{
  "contractVersion": 1,
  "firmwareVersion": "0.12.11",
  "schemaId": "https://spectoda.com/schemas/controller-config/0.12.11.json",
  "source": {
    "repository": "Spectoda/firmware",
    "baselineBranch": "0.12.11",
    "commit": "51a8d6337d968b47f563bf2decb8f7404d93c27a",
    "revisionCommit": "f1c48452350413166dd19d28d5aaf9b9a89152d5",
    "parserRoots": [
      "components/spectoda-library/src/controller.cpp",
      "components/spectoda-library/src/runtime.cpp",
      "components/spectoda-library/src/io.cpp",
      "components/spectoda-library/src/io/",
      "components/spectoda-library/src/port.h",
      "src/esp32/",
      "src/wasm/main.cpp"
    ]
  },
  "capabilities": {
    "touch": true,
    "dmx512": true,
    "osc": true,
    "espnowradio": false,
    "maxLabelLength": 5,
    "gpioDecoratorsPositionIndependent": true,
    "gpioNotConnectedValue": -1
  },
  "schema": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "$id": "https://spectoda.com/schemas/controller-config/0.12.11.json",
    "title": "Spectoda Controller config 0.12.11",
    "description": "Firmware-derived schema for Controller config. Unknown keys are rejected so Studio does not silently write ignored configuration.",
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "controller": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_]{1,5}$",
            "description": "Controller name/identifier, 1..5 label characters."
          },
          "brightness": {
            "type": "integer",
            "minimum": 0,
            "maximum": 255,
            "description": "Global brightness limit, 0..255."
          },
          "power": {
            "type": "integer",
            "minimum": 0,
            "maximum": 255,
            "description": "Global power limit, 0..255."
          },
          "fps": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "description": "Render frames per second. The selected ESP32 build uses CONFIG_FREERTOS_HZ=100."
          },
          "ups": {
            "type": "integer",
            "minimum": 10,
            "maximum": 100,
            "description": "Runtime updates per second."
          },
          "updateable": {
            "type": "boolean",
            "description": "Allow firmware updates."
          },
          "autosave": {
            "oneOf": [
              {
                "type": "boolean"
              },
              {
                "type": "integer",
                "minimum": 1000
              }
            ],
            "description": "Event-state autosave. true uses the build default; false disables; a number sets milliseconds (minimum 1000)."
          },
          "debug": {
            "oneOf": [
              {
                "type": "boolean"
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 5,
                "description": "ESP log level: 0 none, 1 error, 2 warn, 3 info, 4 debug, 5 verbose."
              }
            ],
            "description": "Global console log level or boolean shortcut."
          },
          "wifi": {
            "type": "boolean",
            "description": "Enable or disable Wi-Fi."
          },
          "websocket": {
            "type": "boolean",
            "description": "Enable or disable the WebSocket service."
          },
          "btn": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "description": "GPIO for btn; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          "!btn+": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "description": "Decorated btn example: inverted with internal pull-up; -1 means not connected.",
            "deprecated": false
          },
          "button": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "description": "GPIO for button; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "deprecated": true
          },
          "!button+": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "description": "Decorated button example: inverted with internal pull-up; -1 means not connected.",
            "deprecated": true
          },
          "led": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ],
            "description": "GPIO for led; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          "!led+": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ],
            "description": "Decorated led example: inverted with internal pull-up; -1 means not connected.",
            "deprecated": false
          }
        },
        "additionalProperties": false,
        "patternProperties": {
          "^(?!!btn\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*t[!+\\-]*n[!+\\-]*$": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          "^(?!!button\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*u[!+\\-]*t[!+\\-]*t[!+\\-]*o[!+\\-]*n[!+\\-]*$": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          "^(?!!led\\+$)(?=.*[!+\\-])[!+\\-]*l[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ]
          }
        }
      },
      "wifi": {
        "type": "object",
        "properties": {
          "channel": {
            "type": "integer",
            "minimum": 1,
            "maximum": 13,
            "description": "Wi-Fi channel; default 1."
          }
        },
        "additionalProperties": false
      },
      "rtc": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "SYSTEM",
              "DS1307",
              "PCF8563"
            ],
            "description": "RTC implementation; default SYSTEM."
          },
          "sda": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ],
            "description": "Output-capable RTC I2C data GPIO; required for external RTCs. -1 means not connected."
          },
          "scl": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ],
            "description": "Output-capable RTC I2C clock GPIO; required for external RTCs. -1 means not connected."
          }
        },
        "additionalProperties": false
      },
      "pwm": {
        "type": "object",
        "properties": {
          "frequency": {
            "type": "integer",
            "minimum": 1,
            "description": "Global PWM frequency in hertz."
          }
        },
        "additionalProperties": false
      },
      "ports": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "tag": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_]?$",
              "description": "Legacy suffix appended to PORT. Zero or one label character keeps the converted I/O label within five characters."
            },
            "type": {
              "type": "string",
              "enum": [
                "WS2805",
                "WS2811",
                "WS2812",
                "WS2812B",
                "WS2812D",
                "WS2813",
                "WS2814",
                "WS2815",
                "SK6812",
                "GS8208",
                "APA106"
              ],
              "description": "Legacy pixel chip type."
            },
            "pin": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ],
              "description": "Legacy data GPIO; -1 means not connected."
            },
            "tx": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ],
              "description": "Legacy transmit/data GPIO; -1 means not connected."
            },
            "txinverted": {
              "type": "boolean"
            },
            "rx": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ],
              "description": "Legacy receive GPIO; -1 means not connected."
            },
            "rxinverted": {
              "type": "boolean"
            },
            "mapping": {
              "type": "array",
              "items": {
                "type": "integer"
              }
            },
            "order": {
              "type": "string",
              "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
              "examples": [
                "GRB",
                "WRGB",
                "GRB|RB"
              ]
            },
            "variant": {
              "type": "string"
            },
            "t1": {
              "type": "integer",
              "minimum": 0
            },
            "t2": {
              "type": "integer",
              "minimum": 0
            },
            "t3": {
              "type": "integer",
              "minimum": 0
            },
            "size": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2048
            },
            "reversed": {
              "type": "boolean"
            }
          },
          "additionalProperties": false,
          "required": [
            "tag",
            "type"
          ],
          "description": "Deprecated ports[] entry converted to io + segments during parsing."
        },
        "deprecated": true,
        "description": "Deprecated legacy pixel ports; use io and segments. Scheduled for removal in firmware 0.13."
      },
      "io": {
        "oneOf": [
          {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_]{1,5}$"
            },
            "additionalProperties": {
              "$ref": "#/definitions/ioEntry"
            },
            "description": "Preferred I/O map. Each key is the 1..5 character I/O label."
          },
          {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "NEOPIXEL",
                      "description": "Selects the NEOPIXEL I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "brightness": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port brightness limit, 0..255."
                    },
                    "power": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port power limit, 0..255."
                    },
                    "variant": {
                      "type": "string",
                      "enum": [
                        "WS2805",
                        "WS2811",
                        "WS2812",
                        "WS2812B",
                        "WS2812D",
                        "WS2813",
                        "WS2814",
                        "WS2815",
                        "SK6812",
                        "GS8208",
                        "APA106",
                        "TM1814"
                      ],
                      "description": "Preset chip timing and default channel order."
                    },
                    "order": {
                      "type": "string",
                      "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
                      "examples": [
                        "GRB",
                        "WRGB",
                        "GRB|RB"
                      ],
                      "description": "Pixel order. Three-channel orders contain R/G/B once; four-channel orders put W first or last. GRB|RB is the WS2805 split form."
                    },
                    "pins": {
                      "type": "array",
                      "items": {
                        "type": "integer",
                        "enum": [
                          -1,
                          0,
                          1,
                          2,
                          3,
                          4,
                          5,
                          6,
                          7,
                          8,
                          9,
                          10,
                          11,
                          12,
                          13,
                          14,
                          15,
                          16,
                          17,
                          18,
                          19,
                          20,
                          21,
                          22,
                          23,
                          25,
                          26,
                          27,
                          32,
                          33
                        ]
                      },
                      "minItems": 1,
                      "maxItems": 4,
                      "description": "Output-capable GPIOs mapped from the rightmost order channel, maximum four; -1 means not connected."
                    },
                    "t1": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Custom first RMT timing component in nanoseconds."
                    },
                    "t2": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Custom second RMT timing component in nanoseconds."
                    },
                    "t3": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Custom third RMT timing component in nanoseconds."
                    },
                    "flags": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Reserved pixel driver flags; parsed but not currently acted on."
                    },
                    "c1": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 63,
                      "description": "TM1814 current-control channel 1."
                    },
                    "c2": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 63,
                      "description": "TM1814 current-control channel 2."
                    },
                    "c3": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 63,
                      "description": "TM1814 current-control channel 3."
                    },
                    "c4": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 63,
                      "description": "TM1814 current-control channel 4."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "NEOPIXEL",
                  "description": "Addressable one-wire pixels. TM1814 is also accepted as a variant.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "DOTSTAR",
                      "description": "Selects the DOTSTAR I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "brightness": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port brightness limit, 0..255."
                    },
                    "power": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port power limit, 0..255."
                    },
                    "order": {
                      "const": "RGB",
                      "description": "Only RGB is implemented in firmware 0.12.11."
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "DOTSTAR",
                  "description": "APA102/Dotstar pixels; sda is data and scl is clock.",
                  "patternProperties": {
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "TM1814",
                      "description": "Selects the TM1814 I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "brightness": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port brightness limit, 0..255."
                    },
                    "power": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port power limit, 0..255."
                    },
                    "order": {
                      "type": "string",
                      "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
                      "examples": [
                        "GRB",
                        "WRGB",
                        "GRB|RB"
                      ],
                      "description": "One-, two-, or four-channel packing order supported by TM1814."
                    },
                    "t1": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Custom first RMT timing component in nanoseconds."
                    },
                    "t2": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Custom second RMT timing component in nanoseconds."
                    },
                    "t3": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Custom third RMT timing component in nanoseconds."
                    },
                    "c1": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 63,
                      "description": "TM1814 current-control channel 1."
                    },
                    "c2": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 63,
                      "description": "TM1814 current-control channel 2."
                    },
                    "c3": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 63,
                      "description": "TM1814 current-control channel 3."
                    },
                    "c4": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 63,
                      "description": "TM1814 current-control channel 4."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "TM1814",
                  "description": "Direct TM1814 pixel driver.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "PWM",
                      "description": "Selects the PWM I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "brightness": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port brightness limit, 0..255."
                    },
                    "power": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port power limit, 0..255."
                    },
                    "fadetime": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "PWM transition time in milliseconds; default 700."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "PWM",
                  "description": "PWM output port.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "DALI",
                      "description": "Selects the DALI I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "brightness": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port brightness limit, 0..255."
                    },
                    "power": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port power limit, 0..255."
                    },
                    "variant": {
                      "type": "string",
                      "enum": [
                        "DT6",
                        "DT8_XY",
                        "DT8_RGBWAF",
                        "DT8_TC",
                        "MONITOR",
                        "COMMISSION",
                        "DECOMMISSION"
                      ],
                      "description": "DALI device type or one-shot operational mode."
                    },
                    "mincolortemp": {
                      "type": "integer",
                      "minimum": 1000,
                      "maximum": 10000,
                      "description": "Minimum DT8 color temperature in kelvin."
                    },
                    "maxcolortemp": {
                      "type": "integer",
                      "minimum": 1000,
                      "maximum": 10000,
                      "description": "Maximum DT8 color temperature in kelvin; must not be below mincolortemp."
                    },
                    "mapping": {
                      "type": "array",
                      "items": {
                        "type": "integer"
                      },
                      "description": "DALI channel mapping. A negative value repeats the preceding mapping entry abs(value) times."
                    },
                    "poweronlevel": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 254,
                      "description": "DALI power-on level."
                    },
                    "systemfailurelevel": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 254,
                      "description": "DALI system-failure level."
                    },
                    "minlevel": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 254,
                      "description": "DALI minimum level."
                    },
                    "maxlevel": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 254,
                      "description": "DALI maximum level."
                    },
                    "faderate": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Requested fade rate in steps per second; firmware maps it to a DALI index."
                    },
                    "fadetime": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Requested fade time in milliseconds; firmware maps it to a DALI index."
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "DALI",
                  "description": "DALI port or operational monitor/commissioning mode. An omitted variant creates the normal DALIPort; DT6_ONOFF is recognized in source but not implemented and is rejected.",
                  "patternProperties": {
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "DAC",
                      "description": "Selects the DAC I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "brightness": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port brightness limit, 0..255."
                    },
                    "power": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port power limit, 0..255."
                    },
                    "order": {
                      "type": "string",
                      "enum": [
                        "W",
                        "RB"
                      ],
                      "description": "Implemented DAC modes. R, G and B branches are placeholders and are not available."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        25,
                        26
                      ],
                      "description": "Single DAC-capable GPIO (25 or 26) for W mode; -1 means not connected."
                    },
                    "pins": {
                      "type": "array",
                      "items": {
                        "type": "integer",
                        "enum": [
                          -1,
                          25,
                          26
                        ]
                      },
                      "minItems": 1,
                      "maxItems": 2,
                      "not": {
                        "enum": [
                          [
                            25,
                            25
                          ],
                          [
                            26,
                            26
                          ]
                        ]
                      },
                      "description": "DAC-capable GPIOs (25/26): exactly one for W or exactly two for RB; -1 means not connected and may repeat."
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "DAC",
                  "description": "ESP32 DAC output; only W and RB orders are implemented. W requires one pin value; RB (also the default order) requires two values. Each value may be -1 for not connected; connected GPIO 25/26 values must be unique. Decorated/shared GPIO aliases do not configure the DAC driver.",
                  "allOf": [
                    {
                      "oneOf": [
                        {
                          "properties": {
                            "order": {
                              "const": "W"
                            },
                            "pins": {
                              "type": "array",
                              "minItems": 1,
                              "maxItems": 1
                            }
                          },
                          "required": [
                            "order"
                          ],
                          "oneOf": [
                            {
                              "required": [
                                "pin"
                              ],
                              "not": {
                                "required": [
                                  "pins"
                                ]
                              }
                            },
                            {
                              "required": [
                                "pins"
                              ],
                              "not": {
                                "required": [
                                  "pin"
                                ]
                              }
                            }
                          ]
                        },
                        {
                          "properties": {
                            "order": {
                              "const": "RB"
                            },
                            "pins": {
                              "type": "array",
                              "minItems": 2,
                              "maxItems": 2
                            }
                          },
                          "required": [
                            "pins"
                          ],
                          "not": {
                            "required": [
                              "pin"
                            ]
                          }
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "ADC",
                      "description": "Selects the ADC I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "ADC",
                  "description": "ESP32 ADC1 analog input. The input pin may be -1 for not connected or GPIO 32..39.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "RELAY",
                      "description": "Selects the RELAY I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "brightness": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port brightness limit, 0..255."
                    },
                    "power": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port power limit, 0..255."
                    },
                    "debounce": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Relay debounce in milliseconds; default 100."
                    },
                    "startup": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Startup delay in milliseconds; default 0."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "RELAY",
                  "description": "Relay output port.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "GPIO",
                      "description": "Selects the GPIO I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "variant": {
                      "type": "string",
                      "enum": [
                        "INPUT_OUTPUT",
                        "INPUT",
                        "OUTPUT",
                        "OPEN_DRAIN",
                        "RELAY",
                        "BUTTON",
                        "SWITCH"
                      ],
                      "description": "GPIO behavior preset."
                    },
                    "input": {
                      "type": "boolean",
                      "description": "Enable input behavior."
                    },
                    "output": {
                      "type": "boolean",
                      "description": "Enable output behavior."
                    },
                    "debounce": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Input debounce in milliseconds."
                    },
                    "opendrain": {
                      "type": "boolean",
                      "description": "Enable open-drain output."
                    },
                    "default": {
                      "oneOf": [
                        {
                          "type": "boolean"
                        },
                        {
                          "type": "number"
                        }
                      ],
                      "description": "Initial output value."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "GPIO",
                  "description": "General-purpose bidirectional GPIO.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "GPI",
                      "description": "Selects the GPI I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "variant": {
                      "type": "string",
                      "enum": [
                        "INPUT",
                        "BUTTON",
                        "SWITCH"
                      ],
                      "description": "Input behavior preset."
                    },
                    "debounce": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Input debounce in milliseconds."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "GPI",
                  "description": "General-purpose input.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "GPO",
                      "description": "Selects the GPO I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "brightness": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port brightness limit, 0..255."
                    },
                    "power": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port power limit, 0..255."
                    },
                    "variant": {
                      "type": "string",
                      "enum": [
                        "OUTPUT",
                        "OPEN_DRAIN",
                        "RELAY",
                        "PWM"
                      ],
                      "description": "Output behavior. RELAY and PWM are deprecated compatibility forms."
                    },
                    "debounce": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Relay debounce in milliseconds."
                    },
                    "opendrain": {
                      "type": "boolean",
                      "description": "Enable open-drain output."
                    },
                    "default": {
                      "oneOf": [
                        {
                          "type": "boolean"
                        },
                        {
                          "type": "number"
                        }
                      ],
                      "description": "Initial output value."
                    },
                    "fadetime": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "PWM fade time when variant is PWM."
                    },
                    "startup": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Relay startup delay when variant is RELAY."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "GPO",
                  "description": "General-purpose output. Prefer PWM or RELAY types over their legacy GPO variants.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "ACDET",
                      "description": "Selects the ACDET I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "ACDET",
                  "description": "AC detector input.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "HIGH",
                      "description": "Selects the HIGH I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "HIGH",
                  "description": "Constant-high digital source.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "LOW",
                      "description": "Selects the LOW I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "LOW",
                  "description": "Constant-low digital source.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "TOUCH",
                      "description": "Selects the TOUCH I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "tap": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Tap threshold; default 50."
                    },
                    "press": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Press threshold; default 500."
                    },
                    "knock": {
                      "type": "integer",
                      "minimum": 0,
                      "description": "Knock count; default 3."
                    },
                    "sensitivity": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 4,
                      "description": "Touch sensitivity level, 1..4; default 1."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "TOUCH",
                  "description": "ESP32 capacitive-touch input; compiled in for 0.12.11.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "UART",
                      "description": "Selects the UART I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "baudrate": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 5000000,
                      "description": "UART baud rate; default 115200."
                    },
                    "txbuffer": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "description": "TX buffer size. Omit for the zero-sized default."
                    },
                    "rxbuffer": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "description": "RX buffer size; default 4096."
                    },
                    "rxthreshold": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "description": "RX notification threshold; default 48."
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "UART",
                  "description": "Berry-visible UART.",
                  "patternProperties": {
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "I2C",
                      "description": "Selects the I2C I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "frequency": {
                      "type": "integer",
                      "minimum": 1,
                      "description": "I2C bus frequency in hertz; default 400000."
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "I2C",
                  "description": "Berry-visible I2C bus. Only one I2C entry is supported.",
                  "patternProperties": {
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "SACN",
                      "description": "Selects the SACN I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "order": {
                      "type": "string",
                      "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
                      "examples": [
                        "GRB",
                        "WRGB",
                        "GRB|RB"
                      ],
                      "description": "Channel order used to map received data to pixels."
                    },
                    "count": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 4096,
                      "description": "Number of logical pixels/channels."
                    },
                    "port": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "description": "UDP port."
                    },
                    "universe": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 64000,
                      "description": "Starting sACN universe; default 1."
                    },
                    "channel": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 512,
                      "description": "Starting DMX channel."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "SACN",
                  "description": "Streaming ACN input/output.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "ARTNET",
                      "description": "Selects the ARTNET I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "order": {
                      "type": "string",
                      "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
                      "examples": [
                        "GRB",
                        "WRGB",
                        "GRB|RB"
                      ],
                      "description": "Channel order used to map received data to pixels."
                    },
                    "count": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 4096,
                      "description": "Number of logical pixels/channels."
                    },
                    "port": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "description": "UDP port."
                    },
                    "universe": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 64000,
                      "description": "Starting Art-Net universe; default 0."
                    },
                    "channel": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 512,
                      "description": "Starting DMX channel."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "ARTNET",
                  "description": "Art-Net input/output.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "DMX512",
                      "description": "Selects the DMX512 I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "order": {
                      "type": "string",
                      "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
                      "examples": [
                        "GRB",
                        "WRGB",
                        "GRB|RB"
                      ],
                      "description": "Pixel/channel order."
                    },
                    "count": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 170,
                      "description": "Logical pixel count. The code default is 512 while explicit values are capped at 170; set this explicitly."
                    },
                    "channel": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 512,
                      "description": "Starting DMX channel; default 1."
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "DMX512",
                  "description": "DMX512 interface; compiled in for 0.12.11.",
                  "patternProperties": {
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "OSC",
                      "description": "Selects the OSC I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "address": {
                      "type": "string",
                      "description": "OSC address prefix."
                    },
                    "endpoint": {
                      "type": "string",
                      "pattern": "^[^:]+:[0-9]+$",
                      "description": "Destination endpoint in host:port form."
                    },
                    "port": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "description": "Listening UDP port; default 8000."
                    },
                    "rxbuffer": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "description": "RX buffer size; default 1024."
                    },
                    "txbuffer": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "description": "TX buffer size; default 256."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "OSC",
                  "description": "Open Sound Control interface; compiled in for 0.12.11.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "DUMMY",
                      "description": "Selects the DUMMY I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "brightness": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port brightness limit, 0..255."
                    },
                    "power": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port power limit, 0..255."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "DUMMY",
                  "description": "Virtual port compatibility name.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "VIRTUAL",
                      "description": "Selects the VIRTUAL I/O implementation."
                    },
                    "name": {
                      "type": "string",
                      "description": "Optional human-readable name."
                    },
                    "brightness": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port brightness limit, 0..255."
                    },
                    "power": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "description": "Per-port power limit, 0..255."
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "w": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!w+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "white": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!white+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!tx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "sda": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!sda+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "r": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!r+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "red": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!red+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rx": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rx+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "scl": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!scl+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "g": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!g+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "green": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!green+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "b": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!b+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "blue": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!blue+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "rts": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!rts+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "tag": {
                      "type": "string",
                      "pattern": "^(?:$|[A-Za-z0-9_].*)$",
                      "description": "Optional legacy tag. Firmware uses its first character to form the implicit IOx label."
                    },
                    "label": {
                      "type": "string",
                      "pattern": "^[A-Za-z0-9_]{1,5}$",
                      "description": "Optional full legacy label; overrides the implicit tag-derived label."
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "title": "VIRTUAL",
                  "description": "Virtual in-memory port.",
                  "patternProperties": {
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                }
              ]
            },
            "description": "Deprecated array form. tag and label are optional; without either, firmware assigns IO0, IO1 and so on. Use the labeled object map instead."
          }
        ]
      },
      "segments": {
        "type": "object",
        "propertyNames": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_]{1,5}$"
        },
        "additionalProperties": {
          "oneOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 255,
                  "description": "Device/segment ID."
                },
                "io": {
                  "type": "string",
                  "pattern": "^[A-Za-z0-9_]{1,5}$",
                  "description": "Referenced I/O label."
                },
                "size": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2048,
                  "description": "Shortcut for pixels 1..size."
                },
                "from": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2048,
                  "description": "First pixel, inclusive."
                },
                "to": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2048,
                  "description": "Last pixel, inclusive."
                },
                "step": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 2048,
                  "description": "Pixel stride."
                }
              },
              "additionalProperties": false
            },
            {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 255,
                    "description": "Device/segment ID."
                  },
                  "io": {
                    "type": "string",
                    "pattern": "^[A-Za-z0-9_]{1,5}$",
                    "description": "Referenced I/O label."
                  },
                  "size": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2048,
                    "description": "Shortcut for pixels 1..size."
                  },
                  "from": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2048,
                    "description": "First pixel, inclusive."
                  },
                  "to": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2048,
                    "description": "Last pixel, inclusive."
                  },
                  "step": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 2048,
                    "description": "Pixel stride."
                  }
                },
                "additionalProperties": false
              },
              "minItems": 1
            }
          ]
        }
      },
      "script": {
        "type": "string",
        "description": "Single default TNGL/Berry script."
      },
      "scripts": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Ordered default TNGL/Berry scripts."
      },
      "plugins": {
        "oneOf": [
          {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "object",
                  "properties": {
                    "type": {
                      "const": "PowerManage"
                    },
                    "holdtime": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 65535,
                      "description": "Shutdown button hold time in milliseconds; default 500."
                    },
                    "alive": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Deprecated alive/output GPIO; use decorated en. -1 means not connected.",
                      "deprecated": true
                    },
                    "en": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!en+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ],
                      "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "btn": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for btn; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                    },
                    "!btn+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated btn example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": false
                    },
                    "button": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for button; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
                      "deprecated": true
                    },
                    "!button+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated button example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": true
                    },
                    "pin": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
                      "deprecated": true
                    },
                    "!pin+": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ],
                      "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                      "deprecated": true
                    }
                  },
                  "additionalProperties": false,
                  "required": [
                    "type"
                  ],
                  "patternProperties": {
                    "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33
                      ]
                    },
                    "^(?!!btn\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*t[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!button\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*u[!+\\-]*t[!+\\-]*t[!+\\-]*o[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    },
                    "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                      "type": "integer",
                      "enum": [
                        -1,
                        0,
                        1,
                        2,
                        3,
                        4,
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        12,
                        13,
                        14,
                        15,
                        16,
                        17,
                        18,
                        19,
                        20,
                        21,
                        22,
                        23,
                        25,
                        26,
                        27,
                        32,
                        33,
                        34,
                        35,
                        36,
                        37,
                        38,
                        39
                      ]
                    }
                  }
                }
              ]
            }
          },
          {
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "properties": {
                "type": {
                  "const": "PowerManage"
                },
                "holdtime": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 65535,
                  "description": "Shutdown button hold time in milliseconds; default 500."
                },
                "alive": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33
                  ],
                  "description": "Deprecated alive/output GPIO; use decorated en. -1 means not connected.",
                  "deprecated": true
                },
                "en": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33
                  ],
                  "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                },
                "!en+": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33
                  ],
                  "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                  "deprecated": false
                },
                "btn": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39
                  ],
                  "description": "GPIO for btn; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
                },
                "!btn+": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39
                  ],
                  "description": "Decorated btn example: inverted with internal pull-up; -1 means not connected.",
                  "deprecated": false
                },
                "button": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39
                  ],
                  "description": "GPIO for button; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
                  "deprecated": true
                },
                "!button+": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39
                  ],
                  "description": "Decorated button example: inverted with internal pull-up; -1 means not connected.",
                  "deprecated": true
                },
                "pin": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39
                  ],
                  "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
                  "deprecated": true
                },
                "!pin+": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39
                  ],
                  "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                  "deprecated": true
                }
              },
              "additionalProperties": false,
              "required": [
                "type"
              ],
              "patternProperties": {
                "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33
                  ]
                },
                "^(?!!btn\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*t[!+\\-]*n[!+\\-]*$": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39
                  ]
                },
                "^(?!!button\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*u[!+\\-]*t[!+\\-]*t[!+\\-]*o[!+\\-]*n[!+\\-]*$": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39
                  ]
                },
                "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33,
                    34,
                    35,
                    36,
                    37,
                    38,
                    39
                  ]
                }
              }
            }
          }
        ],
        "description": "Array strings are Berry plugin scripts; PowerManage objects are native plugins. Object-map form is native-only."
      },
      "sensors": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "type": {
              "const": "PowerManage"
            },
            "holdtime": {
              "type": "integer",
              "minimum": 1,
              "maximum": 65535,
              "description": "Shutdown button hold time in milliseconds; default 500."
            },
            "alive": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33
              ],
              "description": "Deprecated alive/output GPIO; use decorated en. -1 means not connected.",
              "deprecated": true
            },
            "en": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33
              ],
              "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
            },
            "!en+": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33
              ],
              "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
              "deprecated": false
            },
            "btn": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ],
              "description": "GPIO for btn; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
            },
            "!btn+": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ],
              "description": "Decorated btn example: inverted with internal pull-up; -1 means not connected.",
              "deprecated": false
            },
            "button": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ],
              "description": "GPIO for button; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
              "deprecated": true
            },
            "!button+": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ],
              "description": "Decorated button example: inverted with internal pull-up; -1 means not connected.",
              "deprecated": true
            },
            "pin": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ],
              "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
              "deprecated": true
            },
            "!pin+": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ],
              "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
              "deprecated": true
            }
          },
          "additionalProperties": false,
          "required": [
            "type"
          ],
          "patternProperties": {
            "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33
              ]
            },
            "^(?!!btn\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*t[!+\\-]*n[!+\\-]*$": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ]
            },
            "^(?!!button\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*u[!+\\-]*t[!+\\-]*t[!+\\-]*o[!+\\-]*n[!+\\-]*$": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ]
            },
            "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
              "type": "integer",
              "enum": [
                -1,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                25,
                26,
                27,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39
              ]
            }
          }
        },
        "description": "Deprecated native-plugin list; use plugins. Scheduled for removal in firmware 0.13.",
        "deprecated": true
      },
      "ble": {
        "type": "object",
        "properties": {
          "power": {
            "type": "integer",
            "minimum": -128,
            "maximum": 127,
            "description": "Requested BLE transmit power in dBm; firmware clamps to -12/-9/-6/-3/0/3/6/9."
          },
          "disable": {
            "type": "boolean"
          },
          "enable": {
            "type": "boolean"
          },
          "advertise": {
            "type": "boolean"
          },
          "timeout": {
            "type": "integer",
            "minimum": 0,
            "description": "BLE advertising timeout in milliseconds."
          }
        },
        "additionalProperties": false
      },
      "console": {
        "type": "object",
        "properties": {
          "debug": {
            "oneOf": [
              {
                "type": "boolean"
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 5,
                "description": "ESP log level: 0 none, 1 error, 2 warn, 3 info, 4 debug, 5 verbose."
              }
            ]
          },
          "tx": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          "rx": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          "baudrate": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5000000,
            "description": "Console UART baud rate."
          }
        },
        "additionalProperties": false
      },
      "serial": {
        "type": "object",
        "properties": {
          "baudrate": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5000000,
            "description": "Spectoda serial transport baud rate."
          },
          "debug": {
            "type": "boolean"
          },
          "tx": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          "rx": {
            "type": "integer",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          "enable": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "espnow": {
        "type": "object",
        "properties": {
          "datarate": {
            "type": "string",
            "enum": [
              "250K",
              "500K",
              "1M",
              "2M",
              "2M_S",
              "11M",
              "11M_S",
              "48M",
              "24M",
              "12M",
              "6M",
              "54M",
              "36M",
              "18M",
              "9M"
            ],
            "description": "ESP-NOW PHY data rate."
          },
          "channel": {
            "type": "integer",
            "minimum": 1,
            "maximum": 11
          },
          "power": {
            "type": "integer",
            "minimum": -128,
            "maximum": 127
          },
          "repetitions": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24
          },
          "floor": {
            "type": "integer",
            "minimum": -128,
            "maximum": 127
          },
          "treshold": {
            "type": "integer",
            "minimum": -128,
            "maximum": 127,
            "description": "Rebroadcast RSSI threshold. The firmware keyword is intentionally misspelled treshold."
          },
          "rebroadcasts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 24
          },
          "disable": {
            "type": "boolean"
          },
          "enable": {
            "type": "boolean"
          },
          "isolate": {
            "type": "boolean"
          },
          "timeout": {
            "type": "integer",
            "minimum": 0
          },
          "advertise": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "ethernet": {
        "type": "object",
        "properties": {
          "variant": {
            "type": "string",
            "enum": [
              "LAN8720",
              "OLIMEXPOE2",
              "OLIMEXPOE"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "IP101",
              "RTL8201",
              "LAN8720",
              "DP83848",
              "KSZ8041",
              "KSZ8081"
            ]
          },
          "ip": {
            "type": "string",
            "pattern": "^(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])){3}$"
          },
          "gateway": {
            "type": "string",
            "pattern": "^(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])){3}$"
          },
          "mask": {
            "type": "string",
            "pattern": "^(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])){3}$"
          },
          "dns": {
            "type": "string",
            "pattern": "^(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])){3}$"
          },
          "hostname": {
            "type": "string"
          },
          "phydet": {
            "type": "integer"
          },
          "phymdc": {
            "type": "integer"
          },
          "phymdio": {
            "type": "integer"
          },
          "phyen": {
            "type": "integer"
          },
          "phyrst": {
            "type": "integer"
          },
          "rmiipin": {
            "type": "integer"
          },
          "rmiimode": {
            "type": "integer"
          },
          "timeout": {
            "type": "integer"
          },
          "enable": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      }
    },
    "definitions": {
      "ioEntry": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "NEOPIXEL",
                "description": "Selects the NEOPIXEL I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "brightness": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port brightness limit, 0..255."
              },
              "power": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port power limit, 0..255."
              },
              "variant": {
                "type": "string",
                "enum": [
                  "WS2805",
                  "WS2811",
                  "WS2812",
                  "WS2812B",
                  "WS2812D",
                  "WS2813",
                  "WS2814",
                  "WS2815",
                  "SK6812",
                  "GS8208",
                  "APA106",
                  "TM1814"
                ],
                "description": "Preset chip timing and default channel order."
              },
              "order": {
                "type": "string",
                "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
                "examples": [
                  "GRB",
                  "WRGB",
                  "GRB|RB"
                ],
                "description": "Pixel order. Three-channel orders contain R/G/B once; four-channel orders put W first or last. GRB|RB is the WS2805 split form."
              },
              "pins": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                    19,
                    20,
                    21,
                    22,
                    23,
                    25,
                    26,
                    27,
                    32,
                    33
                  ]
                },
                "minItems": 1,
                "maxItems": 4,
                "description": "Output-capable GPIOs mapped from the rightmost order channel, maximum four; -1 means not connected."
              },
              "t1": {
                "type": "integer",
                "minimum": 0,
                "description": "Custom first RMT timing component in nanoseconds."
              },
              "t2": {
                "type": "integer",
                "minimum": 0,
                "description": "Custom second RMT timing component in nanoseconds."
              },
              "t3": {
                "type": "integer",
                "minimum": 0,
                "description": "Custom third RMT timing component in nanoseconds."
              },
              "flags": {
                "type": "integer",
                "minimum": 0,
                "description": "Reserved pixel driver flags; parsed but not currently acted on."
              },
              "c1": {
                "type": "integer",
                "minimum": 0,
                "maximum": 63,
                "description": "TM1814 current-control channel 1."
              },
              "c2": {
                "type": "integer",
                "minimum": 0,
                "maximum": 63,
                "description": "TM1814 current-control channel 2."
              },
              "c3": {
                "type": "integer",
                "minimum": 0,
                "maximum": 63,
                "description": "TM1814 current-control channel 3."
              },
              "c4": {
                "type": "integer",
                "minimum": 0,
                "maximum": 63,
                "description": "TM1814 current-control channel 4."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "NEOPIXEL",
            "description": "Addressable one-wire pixels. TM1814 is also accepted as a variant.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "DOTSTAR",
                "description": "Selects the DOTSTAR I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "brightness": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port brightness limit, 0..255."
              },
              "power": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port power limit, 0..255."
              },
              "order": {
                "const": "RGB",
                "description": "Only RGB is implemented in firmware 0.12.11."
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "DOTSTAR",
            "description": "APA102/Dotstar pixels; sda is data and scl is clock.",
            "patternProperties": {
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "TM1814",
                "description": "Selects the TM1814 I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "brightness": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port brightness limit, 0..255."
              },
              "power": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port power limit, 0..255."
              },
              "order": {
                "type": "string",
                "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
                "examples": [
                  "GRB",
                  "WRGB",
                  "GRB|RB"
                ],
                "description": "One-, two-, or four-channel packing order supported by TM1814."
              },
              "t1": {
                "type": "integer",
                "minimum": 0,
                "description": "Custom first RMT timing component in nanoseconds."
              },
              "t2": {
                "type": "integer",
                "minimum": 0,
                "description": "Custom second RMT timing component in nanoseconds."
              },
              "t3": {
                "type": "integer",
                "minimum": 0,
                "description": "Custom third RMT timing component in nanoseconds."
              },
              "c1": {
                "type": "integer",
                "minimum": 0,
                "maximum": 63,
                "description": "TM1814 current-control channel 1."
              },
              "c2": {
                "type": "integer",
                "minimum": 0,
                "maximum": 63,
                "description": "TM1814 current-control channel 2."
              },
              "c3": {
                "type": "integer",
                "minimum": 0,
                "maximum": 63,
                "description": "TM1814 current-control channel 3."
              },
              "c4": {
                "type": "integer",
                "minimum": 0,
                "maximum": 63,
                "description": "TM1814 current-control channel 4."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "TM1814",
            "description": "Direct TM1814 pixel driver.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "PWM",
                "description": "Selects the PWM I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "brightness": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port brightness limit, 0..255."
              },
              "power": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port power limit, 0..255."
              },
              "fadetime": {
                "type": "integer",
                "minimum": 0,
                "description": "PWM transition time in milliseconds; default 700."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "PWM",
            "description": "PWM output port.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "DALI",
                "description": "Selects the DALI I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "brightness": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port brightness limit, 0..255."
              },
              "power": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port power limit, 0..255."
              },
              "variant": {
                "type": "string",
                "enum": [
                  "DT6",
                  "DT8_XY",
                  "DT8_RGBWAF",
                  "DT8_TC",
                  "MONITOR",
                  "COMMISSION",
                  "DECOMMISSION"
                ],
                "description": "DALI device type or one-shot operational mode."
              },
              "mincolortemp": {
                "type": "integer",
                "minimum": 1000,
                "maximum": 10000,
                "description": "Minimum DT8 color temperature in kelvin."
              },
              "maxcolortemp": {
                "type": "integer",
                "minimum": 1000,
                "maximum": 10000,
                "description": "Maximum DT8 color temperature in kelvin; must not be below mincolortemp."
              },
              "mapping": {
                "type": "array",
                "items": {
                  "type": "integer"
                },
                "description": "DALI channel mapping. A negative value repeats the preceding mapping entry abs(value) times."
              },
              "poweronlevel": {
                "type": "integer",
                "minimum": 0,
                "maximum": 254,
                "description": "DALI power-on level."
              },
              "systemfailurelevel": {
                "type": "integer",
                "minimum": 0,
                "maximum": 254,
                "description": "DALI system-failure level."
              },
              "minlevel": {
                "type": "integer",
                "minimum": 0,
                "maximum": 254,
                "description": "DALI minimum level."
              },
              "maxlevel": {
                "type": "integer",
                "minimum": 0,
                "maximum": 254,
                "description": "DALI maximum level."
              },
              "faderate": {
                "type": "integer",
                "minimum": 0,
                "description": "Requested fade rate in steps per second; firmware maps it to a DALI index."
              },
              "fadetime": {
                "type": "integer",
                "minimum": 0,
                "description": "Requested fade time in milliseconds; firmware maps it to a DALI index."
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "DALI",
            "description": "DALI port or operational monitor/commissioning mode. An omitted variant creates the normal DALIPort; DT6_ONOFF is recognized in source but not implemented and is rejected.",
            "patternProperties": {
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "DAC",
                "description": "Selects the DAC I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "brightness": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port brightness limit, 0..255."
              },
              "power": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port power limit, 0..255."
              },
              "order": {
                "type": "string",
                "enum": [
                  "W",
                  "RB"
                ],
                "description": "Implemented DAC modes. R, G and B branches are placeholders and are not available."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  25,
                  26
                ],
                "description": "Single DAC-capable GPIO (25 or 26) for W mode; -1 means not connected."
              },
              "pins": {
                "type": "array",
                "items": {
                  "type": "integer",
                  "enum": [
                    -1,
                    25,
                    26
                  ]
                },
                "minItems": 1,
                "maxItems": 2,
                "not": {
                  "enum": [
                    [
                      25,
                      25
                    ],
                    [
                      26,
                      26
                    ]
                  ]
                },
                "description": "DAC-capable GPIOs (25/26): exactly one for W or exactly two for RB; -1 means not connected and may repeat."
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "DAC",
            "description": "ESP32 DAC output; only W and RB orders are implemented. W requires one pin value; RB (also the default order) requires two values. Each value may be -1 for not connected; connected GPIO 25/26 values must be unique. Decorated/shared GPIO aliases do not configure the DAC driver.",
            "allOf": [
              {
                "oneOf": [
                  {
                    "properties": {
                      "order": {
                        "const": "W"
                      },
                      "pins": {
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 1
                      }
                    },
                    "required": [
                      "order"
                    ],
                    "oneOf": [
                      {
                        "required": [
                          "pin"
                        ],
                        "not": {
                          "required": [
                            "pins"
                          ]
                        }
                      },
                      {
                        "required": [
                          "pins"
                        ],
                        "not": {
                          "required": [
                            "pin"
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "properties": {
                      "order": {
                        "const": "RB"
                      },
                      "pins": {
                        "type": "array",
                        "minItems": 2,
                        "maxItems": 2
                      }
                    },
                    "required": [
                      "pins"
                    ],
                    "not": {
                      "required": [
                        "pin"
                      ]
                    }
                  }
                ]
              }
            ]
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "ADC",
                "description": "Selects the ADC I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "ADC",
            "description": "ESP32 ADC1 analog input. The input pin may be -1 for not connected or GPIO 32..39.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "RELAY",
                "description": "Selects the RELAY I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "brightness": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port brightness limit, 0..255."
              },
              "power": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port power limit, 0..255."
              },
              "debounce": {
                "type": "integer",
                "minimum": 0,
                "description": "Relay debounce in milliseconds; default 100."
              },
              "startup": {
                "type": "integer",
                "minimum": 0,
                "description": "Startup delay in milliseconds; default 0."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "RELAY",
            "description": "Relay output port.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "GPIO",
                "description": "Selects the GPIO I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "variant": {
                "type": "string",
                "enum": [
                  "INPUT_OUTPUT",
                  "INPUT",
                  "OUTPUT",
                  "OPEN_DRAIN",
                  "RELAY",
                  "BUTTON",
                  "SWITCH"
                ],
                "description": "GPIO behavior preset."
              },
              "input": {
                "type": "boolean",
                "description": "Enable input behavior."
              },
              "output": {
                "type": "boolean",
                "description": "Enable output behavior."
              },
              "debounce": {
                "type": "integer",
                "minimum": 0,
                "description": "Input debounce in milliseconds."
              },
              "opendrain": {
                "type": "boolean",
                "description": "Enable open-drain output."
              },
              "default": {
                "oneOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "number"
                  }
                ],
                "description": "Initial output value."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "GPIO",
            "description": "General-purpose bidirectional GPIO.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "GPI",
                "description": "Selects the GPI I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "variant": {
                "type": "string",
                "enum": [
                  "INPUT",
                  "BUTTON",
                  "SWITCH"
                ],
                "description": "Input behavior preset."
              },
              "debounce": {
                "type": "integer",
                "minimum": 0,
                "description": "Input debounce in milliseconds."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "GPI",
            "description": "General-purpose input.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "GPO",
                "description": "Selects the GPO I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "brightness": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port brightness limit, 0..255."
              },
              "power": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port power limit, 0..255."
              },
              "variant": {
                "type": "string",
                "enum": [
                  "OUTPUT",
                  "OPEN_DRAIN",
                  "RELAY",
                  "PWM"
                ],
                "description": "Output behavior. RELAY and PWM are deprecated compatibility forms."
              },
              "debounce": {
                "type": "integer",
                "minimum": 0,
                "description": "Relay debounce in milliseconds."
              },
              "opendrain": {
                "type": "boolean",
                "description": "Enable open-drain output."
              },
              "default": {
                "oneOf": [
                  {
                    "type": "boolean"
                  },
                  {
                    "type": "number"
                  }
                ],
                "description": "Initial output value."
              },
              "fadetime": {
                "type": "integer",
                "minimum": 0,
                "description": "PWM fade time when variant is PWM."
              },
              "startup": {
                "type": "integer",
                "minimum": 0,
                "description": "Relay startup delay when variant is RELAY."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "GPO",
            "description": "General-purpose output. Prefer PWM or RELAY types over their legacy GPO variants.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "ACDET",
                "description": "Selects the ACDET I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "ACDET",
            "description": "AC detector input.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "HIGH",
                "description": "Selects the HIGH I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "HIGH",
            "description": "Constant-high digital source.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "LOW",
                "description": "Selects the LOW I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "LOW",
            "description": "Constant-low digital source.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "TOUCH",
                "description": "Selects the TOUCH I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "tap": {
                "type": "integer",
                "minimum": 0,
                "description": "Tap threshold; default 50."
              },
              "press": {
                "type": "integer",
                "minimum": 0,
                "description": "Press threshold; default 500."
              },
              "knock": {
                "type": "integer",
                "minimum": 0,
                "description": "Knock count; default 3."
              },
              "sensitivity": {
                "type": "integer",
                "minimum": 1,
                "maximum": 4,
                "description": "Touch sensitivity level, 1..4; default 1."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "TOUCH",
            "description": "ESP32 capacitive-touch input; compiled in for 0.12.11.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "UART",
                "description": "Selects the UART I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "baudrate": {
                "type": "integer",
                "minimum": 1,
                "maximum": 5000000,
                "description": "UART baud rate; default 115200."
              },
              "txbuffer": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535,
                "description": "TX buffer size. Omit for the zero-sized default."
              },
              "rxbuffer": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535,
                "description": "RX buffer size; default 4096."
              },
              "rxthreshold": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535,
                "description": "RX notification threshold; default 48."
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "UART",
            "description": "Berry-visible UART.",
            "patternProperties": {
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "I2C",
                "description": "Selects the I2C I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "frequency": {
                "type": "integer",
                "minimum": 1,
                "description": "I2C bus frequency in hertz; default 400000."
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "I2C",
            "description": "Berry-visible I2C bus. Only one I2C entry is supported.",
            "patternProperties": {
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "SACN",
                "description": "Selects the SACN I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "order": {
                "type": "string",
                "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
                "examples": [
                  "GRB",
                  "WRGB",
                  "GRB|RB"
                ],
                "description": "Channel order used to map received data to pixels."
              },
              "count": {
                "type": "integer",
                "minimum": 1,
                "maximum": 4096,
                "description": "Number of logical pixels/channels."
              },
              "port": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535,
                "description": "UDP port."
              },
              "universe": {
                "type": "integer",
                "minimum": 1,
                "maximum": 64000,
                "description": "Starting sACN universe; default 1."
              },
              "channel": {
                "type": "integer",
                "minimum": 1,
                "maximum": 512,
                "description": "Starting DMX channel."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "SACN",
            "description": "Streaming ACN input/output.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "ARTNET",
                "description": "Selects the ARTNET I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "order": {
                "type": "string",
                "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
                "examples": [
                  "GRB",
                  "WRGB",
                  "GRB|RB"
                ],
                "description": "Channel order used to map received data to pixels."
              },
              "count": {
                "type": "integer",
                "minimum": 1,
                "maximum": 4096,
                "description": "Number of logical pixels/channels."
              },
              "port": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535,
                "description": "UDP port."
              },
              "universe": {
                "type": "integer",
                "minimum": 0,
                "maximum": 64000,
                "description": "Starting Art-Net universe; default 0."
              },
              "channel": {
                "type": "integer",
                "minimum": 1,
                "maximum": 512,
                "description": "Starting DMX channel."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "ARTNET",
            "description": "Art-Net input/output.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "DMX512",
                "description": "Selects the DMX512 I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "order": {
                "type": "string",
                "pattern": "^[RGBW]{1,4}(?:\\|[RGBW]{1,4})?$",
                "examples": [
                  "GRB",
                  "WRGB",
                  "GRB|RB"
                ],
                "description": "Pixel/channel order."
              },
              "count": {
                "type": "integer",
                "minimum": 1,
                "maximum": 170,
                "description": "Logical pixel count. The code default is 512 while explicit values are capped at 170; set this explicitly."
              },
              "channel": {
                "type": "integer",
                "minimum": 1,
                "maximum": 512,
                "description": "Starting DMX channel; default 1."
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "DMX512",
            "description": "DMX512 interface; compiled in for 0.12.11.",
            "patternProperties": {
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "OSC",
                "description": "Selects the OSC I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "address": {
                "type": "string",
                "description": "OSC address prefix."
              },
              "endpoint": {
                "type": "string",
                "pattern": "^[^:]+:[0-9]+$",
                "description": "Destination endpoint in host:port form."
              },
              "port": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535,
                "description": "Listening UDP port; default 8000."
              },
              "rxbuffer": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535,
                "description": "RX buffer size; default 1024."
              },
              "txbuffer": {
                "type": "integer",
                "minimum": 1,
                "maximum": 65535,
                "description": "TX buffer size; default 256."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "OSC",
            "description": "Open Sound Control interface; compiled in for 0.12.11.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "DUMMY",
                "description": "Selects the DUMMY I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "brightness": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port brightness limit, 0..255."
              },
              "power": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port power limit, 0..255."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "DUMMY",
            "description": "Virtual port compatibility name.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "const": "VIRTUAL",
                "description": "Selects the VIRTUAL I/O implementation."
              },
              "name": {
                "type": "string",
                "description": "Optional human-readable name."
              },
              "brightness": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port brightness limit, 0..255."
              },
              "power": {
                "type": "integer",
                "minimum": 0,
                "maximum": 255,
                "description": "Per-port power limit, 0..255."
              },
              "pin": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!pin+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "w": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!w+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated w example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "white": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!white+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated white example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "tx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!tx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "sda": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!sda+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "r": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!r+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated r example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "red": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!red+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated red example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rx": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rx+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "scl": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!scl+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "g": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!g+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated g example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "green": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!green+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated green example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "b": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!b+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated b example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "blue": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!blue+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "rts": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!rts+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              },
              "en": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
              },
              "!en+": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ],
                "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
                "deprecated": false
              }
            },
            "additionalProperties": false,
            "required": [
              "type"
            ],
            "title": "VIRTUAL",
            "description": "Virtual in-memory port.",
            "patternProperties": {
              "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              },
              "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$": {
                "type": "integer",
                "enum": [
                  -1,
                  0,
                  1,
                  2,
                  3,
                  4,
                  5,
                  6,
                  7,
                  8,
                  9,
                  10,
                  11,
                  12,
                  13,
                  14,
                  15,
                  16,
                  17,
                  18,
                  19,
                  20,
                  21,
                  22,
                  23,
                  25,
                  26,
                  27,
                  32,
                  33,
                  34,
                  35,
                  36,
                  37,
                  38,
                  39
                ]
              }
            }
          }
        ]
      }
    }
  },
  "validationRules": [
    {
      "kind": "maxIoTypeCount",
      "ioType": "I2C",
      "maximum": 1,
      "description": "Only one I2C I/O entry can be active."
    },
    {
      "kind": "ioNumberOrder",
      "ioType": "DALI",
      "minimumField": "mincolortemp",
      "maximumField": "maxcolortemp",
      "description": "DALI maxcolortemp must be greater than or equal to mincolortemp."
    },
    {
      "kind": "segmentIoReference",
      "description": "A segment section must refer to an existing I/O label."
    }
  ],
  "reference": {
    "topLevelKeywords": [
      "controller",
      "wifi",
      "rtc",
      "pwm",
      "ports",
      "io",
      "segments",
      "script",
      "scripts",
      "plugins",
      "sensors",
      "ble",
      "console",
      "serial",
      "espnow",
      "ethernet"
    ],
    "sections": {
      "controller": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "name",
            "type": "string",
            "constraints": "string /^[A-Za-z0-9_]{1,5}$/",
            "description": "Controller name/identifier, 1..5 label characters."
          },
          {
            "keyword": "brightness",
            "type": "integer",
            "constraints": "integer [0..255]",
            "description": "Global brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "type": "integer",
            "constraints": "integer [0..255]",
            "description": "Global power limit, 0..255."
          },
          {
            "keyword": "fps",
            "type": "integer",
            "constraints": "integer [0..100]",
            "description": "Render frames per second. The selected ESP32 build uses CONFIG_FREERTOS_HZ=100."
          },
          {
            "keyword": "ups",
            "type": "integer",
            "constraints": "integer [10..100]",
            "description": "Runtime updates per second."
          },
          {
            "keyword": "updateable",
            "type": "boolean",
            "constraints": "boolean",
            "description": "Allow firmware updates."
          },
          {
            "keyword": "autosave",
            "type": "conditional",
            "constraints": "boolean or integer [1000..∞]",
            "description": "Event-state autosave. true uses the build default; false disables; a number sets milliseconds (minimum 1000)."
          },
          {
            "keyword": "debug",
            "type": "conditional",
            "constraints": "boolean or integer [0..5]",
            "description": "Global console log level or boolean shortcut."
          },
          {
            "keyword": "wifi",
            "type": "boolean",
            "constraints": "boolean",
            "description": "Enable or disable Wi-Fi."
          },
          {
            "keyword": "websocket",
            "type": "boolean",
            "constraints": "boolean",
            "description": "Enable or disable the WebSocket service."
          },
          {
            "keyword": "btn",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for btn; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "!btn+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated btn example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "button",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for button; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "deprecated": true
          },
          {
            "keyword": "!button+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated button example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "deprecated": true
          },
          {
            "keyword": "led",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for led; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ]
          },
          {
            "keyword": "!led+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated led example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ]
          }
        ]
      },
      "wifi": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "channel",
            "type": "integer",
            "constraints": "integer [1..13]",
            "description": "Wi-Fi channel; default 1."
          }
        ]
      },
      "rtc": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "type",
            "type": "string",
            "constraints": "\"SYSTEM\" | \"DS1307\" | \"PCF8563\"",
            "description": "RTC implementation; default SYSTEM.",
            "enum": [
              "SYSTEM",
              "DS1307",
              "PCF8563"
            ]
          },
          {
            "keyword": "sda",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Output-capable RTC I2C data GPIO; required for external RTCs. -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ]
          },
          {
            "keyword": "scl",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Output-capable RTC I2C clock GPIO; required for external RTCs. -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ]
          }
        ]
      },
      "pwm": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "frequency",
            "type": "integer",
            "constraints": "integer [1..∞]",
            "description": "Global PWM frequency in hertz."
          }
        ]
      },
      "ports": {
        "description": "Deprecated legacy pixel ports; use io and segments. Scheduled for removal in firmware 0.13.",
        "deprecated": true,
        "removalVersion": "0.13",
        "keywords": [
          {
            "keyword": "tag",
            "type": "string",
            "constraints": "string /^[A-Za-z0-9_]?$/",
            "description": "Legacy suffix appended to PORT. Zero or one label character keeps the converted I/O label within five characters."
          },
          {
            "keyword": "type",
            "type": "string",
            "constraints": "\"WS2805\" | \"WS2811\" | \"WS2812\" | \"WS2812B\" | \"WS2812D\" | \"WS2813\" | \"WS2814\" | \"WS2815\" | \"SK6812\" | \"GS8208\" | \"APA106\"",
            "description": "Legacy pixel chip type.",
            "enum": [
              "WS2805",
              "WS2811",
              "WS2812",
              "WS2812B",
              "WS2812D",
              "WS2813",
              "WS2814",
              "WS2815",
              "SK6812",
              "GS8208",
              "APA106"
            ]
          },
          {
            "keyword": "pin",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Legacy data GPIO; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "tx",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Legacy transmit/data GPIO; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "txinverted",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          },
          {
            "keyword": "rx",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Legacy receive GPIO; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "rxinverted",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          },
          {
            "keyword": "mapping",
            "type": "array",
            "constraints": "array<integer>",
            "description": ""
          },
          {
            "keyword": "order",
            "type": "string",
            "constraints": "string (one or two 1–4 character RGBW orders separated by a vertical bar)",
            "description": ""
          },
          {
            "keyword": "variant",
            "type": "string",
            "constraints": "string",
            "description": ""
          },
          {
            "keyword": "t1",
            "type": "integer",
            "constraints": "integer [0..∞]",
            "description": ""
          },
          {
            "keyword": "t2",
            "type": "integer",
            "constraints": "integer [0..∞]",
            "description": ""
          },
          {
            "keyword": "t3",
            "type": "integer",
            "constraints": "integer [0..∞]",
            "description": ""
          },
          {
            "keyword": "size",
            "type": "integer",
            "constraints": "integer [1..2048]",
            "description": ""
          },
          {
            "keyword": "reversed",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          }
        ]
      },
      "io": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "<LABEL>",
            "type": "string",
            "constraints": "string /^[A-Za-z0-9_]{1,5}$/",
            "description": "Preferred object-map key: the 1..5 character I/O label."
          },
          {
            "keyword": "type",
            "type": "string",
            "constraints": "string",
            "description": "Required I/O discriminator; see the I/O type reference."
          },
          {
            "keyword": "tag",
            "type": "string",
            "constraints": "string /^(?:$|[A-Za-z0-9_].*)$/",
            "description": "Deprecated optional tag; its first character forms the implicit IOx label."
          },
          {
            "keyword": "label",
            "type": "string",
            "constraints": "string /^[A-Za-z0-9_]{1,5}$/",
            "description": "Deprecated optional full label; overrides the implicit tag-derived label."
          },
          {
            "keyword": "name",
            "type": "string",
            "constraints": "string",
            "description": "Optional human-readable name."
          }
        ]
      },
      "segments": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "id",
            "type": "integer",
            "constraints": "integer [0..255]",
            "description": "Device/segment ID."
          },
          {
            "keyword": "io",
            "type": "string",
            "constraints": "string /^[A-Za-z0-9_]{1,5}$/",
            "description": "Referenced I/O label."
          },
          {
            "keyword": "size",
            "type": "integer",
            "constraints": "integer [1..2048]",
            "description": "Shortcut for pixels 1..size."
          },
          {
            "keyword": "from",
            "type": "integer",
            "constraints": "integer [1..2048]",
            "description": "First pixel, inclusive."
          },
          {
            "keyword": "to",
            "type": "integer",
            "constraints": "integer [1..2048]",
            "description": "Last pixel, inclusive."
          },
          {
            "keyword": "step",
            "type": "integer",
            "constraints": "integer [1..2048]",
            "description": "Pixel stride."
          }
        ]
      },
      "script": {
        "description": "Single default TNGL/Berry script.",
        "deprecated": false,
        "keywords": []
      },
      "scripts": {
        "description": "Ordered default TNGL/Berry scripts.",
        "deprecated": false,
        "keywords": []
      },
      "plugins": {
        "description": "Array strings are Berry plugin scripts; PowerManage objects are native plugins. Object-map form is native-only.",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "type",
            "type": "conditional",
            "constraints": "\"PowerManage\"",
            "description": ""
          },
          {
            "keyword": "holdtime",
            "type": "integer",
            "constraints": "integer [1..65535]",
            "description": "Shutdown button hold time in milliseconds; default 500."
          },
          {
            "keyword": "alive",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Deprecated alive/output GPIO; use decorated en. -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ],
            "deprecated": true
          },
          {
            "keyword": "en",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ]
          },
          {
            "keyword": "!en+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ]
          },
          {
            "keyword": "btn",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for btn; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "!btn+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated btn example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "button",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for button; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "deprecated": true
          },
          {
            "keyword": "!button+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated button example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "deprecated": true
          },
          {
            "keyword": "pin",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "deprecated": true
          },
          {
            "keyword": "!pin+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "deprecated": true
          }
        ]
      },
      "sensors": {
        "description": "Deprecated native-plugin list; use plugins. Scheduled for removal in firmware 0.13.",
        "deprecated": true,
        "removalVersion": "0.13",
        "keywords": [
          {
            "keyword": "type",
            "type": "conditional",
            "constraints": "\"PowerManage\"",
            "description": ""
          },
          {
            "keyword": "holdtime",
            "type": "integer",
            "constraints": "integer [1..65535]",
            "description": "Shutdown button hold time in milliseconds; default 500."
          },
          {
            "keyword": "alive",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Deprecated alive/output GPIO; use decorated en. -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ],
            "deprecated": true
          },
          {
            "keyword": "en",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ]
          },
          {
            "keyword": "!en+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33
            ]
          },
          {
            "keyword": "btn",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for btn; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "!btn+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated btn example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "button",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for button; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "deprecated": true
          },
          {
            "keyword": "!button+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated button example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "deprecated": true
          },
          {
            "keyword": "pin",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "deprecated": true
          },
          {
            "keyword": "!pin+",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected.",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ],
            "deprecated": true
          }
        ]
      },
      "ble": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "power",
            "type": "integer",
            "constraints": "integer [-128..127]",
            "description": "Requested BLE transmit power in dBm; firmware clamps to -12/-9/-6/-3/0/3/6/9."
          },
          {
            "keyword": "disable",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          },
          {
            "keyword": "enable",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          },
          {
            "keyword": "advertise",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          },
          {
            "keyword": "timeout",
            "type": "integer",
            "constraints": "integer [0..∞]",
            "description": "BLE advertising timeout in milliseconds."
          }
        ]
      },
      "console": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "debug",
            "type": "conditional",
            "constraints": "boolean or integer [0..5]",
            "description": ""
          },
          {
            "keyword": "tx",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "rx",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "baudrate",
            "type": "integer",
            "constraints": "integer [1..5000000]",
            "description": "Console UART baud rate."
          }
        ]
      },
      "serial": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "baudrate",
            "type": "integer",
            "constraints": "integer [1..5000000]",
            "description": "Spectoda serial transport baud rate."
          },
          {
            "keyword": "debug",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          },
          {
            "keyword": "tx",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "rx",
            "type": "integer",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "",
            "enum": [
              -1,
              0,
              1,
              2,
              3,
              4,
              5,
              6,
              7,
              8,
              9,
              10,
              11,
              12,
              13,
              14,
              15,
              16,
              17,
              18,
              19,
              20,
              21,
              22,
              23,
              25,
              26,
              27,
              32,
              33,
              34,
              35,
              36,
              37,
              38,
              39
            ]
          },
          {
            "keyword": "enable",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          }
        ]
      },
      "espnow": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "datarate",
            "type": "string",
            "constraints": "\"250K\" | \"500K\" | \"1M\" | \"2M\" | \"2M_S\" | \"11M\" | \"11M_S\" | \"48M\" | \"24M\" | \"12M\" | \"6M\" | \"54M\" | \"36M\" | \"18M\" | \"9M\"",
            "description": "ESP-NOW PHY data rate.",
            "enum": [
              "250K",
              "500K",
              "1M",
              "2M",
              "2M_S",
              "11M",
              "11M_S",
              "48M",
              "24M",
              "12M",
              "6M",
              "54M",
              "36M",
              "18M",
              "9M"
            ]
          },
          {
            "keyword": "channel",
            "type": "integer",
            "constraints": "integer [1..11]",
            "description": ""
          },
          {
            "keyword": "power",
            "type": "integer",
            "constraints": "integer [-128..127]",
            "description": ""
          },
          {
            "keyword": "repetitions",
            "type": "integer",
            "constraints": "integer [1..24]",
            "description": ""
          },
          {
            "keyword": "floor",
            "type": "integer",
            "constraints": "integer [-128..127]",
            "description": ""
          },
          {
            "keyword": "treshold",
            "type": "integer",
            "constraints": "integer [-128..127]",
            "description": "Rebroadcast RSSI threshold. The firmware keyword is intentionally misspelled treshold."
          },
          {
            "keyword": "rebroadcasts",
            "type": "integer",
            "constraints": "integer [0..24]",
            "description": ""
          },
          {
            "keyword": "disable",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          },
          {
            "keyword": "enable",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          },
          {
            "keyword": "isolate",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          },
          {
            "keyword": "timeout",
            "type": "integer",
            "constraints": "integer [0..∞]",
            "description": ""
          },
          {
            "keyword": "advertise",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          }
        ]
      },
      "ethernet": {
        "description": "",
        "deprecated": false,
        "keywords": [
          {
            "keyword": "variant",
            "type": "string",
            "constraints": "\"LAN8720\" | \"OLIMEXPOE2\" | \"OLIMEXPOE\"",
            "description": "",
            "enum": [
              "LAN8720",
              "OLIMEXPOE2",
              "OLIMEXPOE"
            ]
          },
          {
            "keyword": "type",
            "type": "string",
            "constraints": "\"IP101\" | \"RTL8201\" | \"LAN8720\" | \"DP83848\" | \"KSZ8041\" | \"KSZ8081\"",
            "description": "",
            "enum": [
              "IP101",
              "RTL8201",
              "LAN8720",
              "DP83848",
              "KSZ8041",
              "KSZ8081"
            ]
          },
          {
            "keyword": "ip",
            "type": "string",
            "constraints": "string /^(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])){3}$/",
            "description": ""
          },
          {
            "keyword": "gateway",
            "type": "string",
            "constraints": "string /^(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])){3}$/",
            "description": ""
          },
          {
            "keyword": "mask",
            "type": "string",
            "constraints": "string /^(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])){3}$/",
            "description": ""
          },
          {
            "keyword": "dns",
            "type": "string",
            "constraints": "string /^(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])){3}$/",
            "description": ""
          },
          {
            "keyword": "hostname",
            "type": "string",
            "constraints": "string",
            "description": ""
          },
          {
            "keyword": "phydet",
            "type": "integer",
            "constraints": "integer",
            "description": ""
          },
          {
            "keyword": "phymdc",
            "type": "integer",
            "constraints": "integer",
            "description": ""
          },
          {
            "keyword": "phymdio",
            "type": "integer",
            "constraints": "integer",
            "description": ""
          },
          {
            "keyword": "phyen",
            "type": "integer",
            "constraints": "integer",
            "description": ""
          },
          {
            "keyword": "phyrst",
            "type": "integer",
            "constraints": "integer",
            "description": ""
          },
          {
            "keyword": "rmiipin",
            "type": "integer",
            "constraints": "integer",
            "description": ""
          },
          {
            "keyword": "rmiimode",
            "type": "integer",
            "constraints": "integer",
            "description": ""
          },
          {
            "keyword": "timeout",
            "type": "integer",
            "constraints": "integer",
            "description": ""
          },
          {
            "keyword": "enable",
            "type": "boolean",
            "constraints": "boolean",
            "description": ""
          }
        ]
      }
    },
    "ioTypes": [
      {
        "type": "NEOPIXEL",
        "status": "supported",
        "description": "Addressable one-wire pixels. TM1814 is also accepted as a variant.",
        "keywords": [
          "name",
          "brightness",
          "power",
          "variant",
          "order",
          "pins",
          "t1",
          "t2",
          "t3",
          "flags",
          "c1",
          "c2",
          "c3",
          "c4",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "brightness",
            "constraints": "integer [0..255]",
            "description": "Per-port brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "constraints": "integer [0..255]",
            "description": "Per-port power limit, 0..255."
          },
          {
            "keyword": "variant",
            "constraints": "\"WS2805\" | \"WS2811\" | \"WS2812\" | \"WS2812B\" | \"WS2812D\" | \"WS2813\" | \"WS2814\" | \"WS2815\" | \"SK6812\" | \"GS8208\" | \"APA106\" | \"TM1814\"",
            "description": "Preset chip timing and default channel order."
          },
          {
            "keyword": "order",
            "constraints": "string (one or two 1–4 character RGBW orders separated by a vertical bar)",
            "description": "Pixel order. Three-channel orders contain R/G/B once; four-channel orders put W first or last. GRB|RB is the WS2805 split form."
          },
          {
            "keyword": "pins",
            "constraints": "array<-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33>",
            "description": "Output-capable GPIOs mapped from the rightmost order channel, maximum four; -1 means not connected."
          },
          {
            "keyword": "t1",
            "constraints": "integer [0..∞]",
            "description": "Custom first RMT timing component in nanoseconds."
          },
          {
            "keyword": "t2",
            "constraints": "integer [0..∞]",
            "description": "Custom second RMT timing component in nanoseconds."
          },
          {
            "keyword": "t3",
            "constraints": "integer [0..∞]",
            "description": "Custom third RMT timing component in nanoseconds."
          },
          {
            "keyword": "flags",
            "constraints": "integer [0..∞]",
            "description": "Reserved pixel driver flags; parsed but not currently acted on."
          },
          {
            "keyword": "c1",
            "constraints": "integer [0..63]",
            "description": "TM1814 current-control channel 1."
          },
          {
            "keyword": "c2",
            "constraints": "integer [0..63]",
            "description": "TM1814 current-control channel 2."
          },
          {
            "keyword": "c3",
            "constraints": "integer [0..63]",
            "description": "TM1814 current-control channel 3."
          },
          {
            "keyword": "c4",
            "constraints": "integer [0..63]",
            "description": "TM1814 current-control channel 4."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "variant": [
            "WS2805",
            "WS2811",
            "WS2812",
            "WS2812B",
            "WS2812D",
            "WS2813",
            "WS2814",
            "WS2815",
            "SK6812",
            "GS8208",
            "APA106",
            "TM1814"
          ],
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "DOTSTAR",
        "status": "supported",
        "description": "APA102/Dotstar pixels; sda is data and scl is clock.",
        "keywords": [
          "name",
          "brightness",
          "power",
          "order",
          "sda",
          "!sda+",
          "scl",
          "!scl+",
          "en",
          "!en+",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "brightness",
            "constraints": "integer [0..255]",
            "description": "Per-port brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "constraints": "integer [0..255]",
            "description": "Per-port power limit, 0..255."
          },
          {
            "keyword": "order",
            "constraints": "\"RGB\"",
            "description": "Only RGB is implemented in firmware 0.12.11."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "order": [
            "RGB"
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "TM1814",
        "status": "supported",
        "description": "Direct TM1814 pixel driver.",
        "keywords": [
          "name",
          "brightness",
          "power",
          "order",
          "t1",
          "t2",
          "t3",
          "c1",
          "c2",
          "c3",
          "c4",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "brightness",
            "constraints": "integer [0..255]",
            "description": "Per-port brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "constraints": "integer [0..255]",
            "description": "Per-port power limit, 0..255."
          },
          {
            "keyword": "order",
            "constraints": "string (one or two 1–4 character RGBW orders separated by a vertical bar)",
            "description": "One-, two-, or four-channel packing order supported by TM1814."
          },
          {
            "keyword": "t1",
            "constraints": "integer [0..∞]",
            "description": "Custom first RMT timing component in nanoseconds."
          },
          {
            "keyword": "t2",
            "constraints": "integer [0..∞]",
            "description": "Custom second RMT timing component in nanoseconds."
          },
          {
            "keyword": "t3",
            "constraints": "integer [0..∞]",
            "description": "Custom third RMT timing component in nanoseconds."
          },
          {
            "keyword": "c1",
            "constraints": "integer [0..63]",
            "description": "TM1814 current-control channel 1."
          },
          {
            "keyword": "c2",
            "constraints": "integer [0..63]",
            "description": "TM1814 current-control channel 2."
          },
          {
            "keyword": "c3",
            "constraints": "integer [0..63]",
            "description": "TM1814 current-control channel 3."
          },
          {
            "keyword": "c4",
            "constraints": "integer [0..63]",
            "description": "TM1814 current-control channel 4."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "PWM",
        "status": "supported",
        "description": "PWM output port.",
        "keywords": [
          "name",
          "brightness",
          "power",
          "fadetime",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "brightness",
            "constraints": "integer [0..255]",
            "description": "Per-port brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "constraints": "integer [0..255]",
            "description": "Per-port power limit, 0..255."
          },
          {
            "keyword": "fadetime",
            "constraints": "integer [0..∞]",
            "description": "PWM transition time in milliseconds; default 700."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "DALI",
        "status": "supported",
        "description": "DALI port or operational monitor/commissioning mode. An omitted variant creates the normal DALIPort; DT6_ONOFF is recognized in source but not implemented and is rejected.",
        "keywords": [
          "name",
          "brightness",
          "power",
          "variant",
          "mincolortemp",
          "maxcolortemp",
          "mapping",
          "poweronlevel",
          "systemfailurelevel",
          "minlevel",
          "maxlevel",
          "faderate",
          "fadetime",
          "tx",
          "!tx+",
          "rx",
          "!rx+",
          "en",
          "!en+",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "brightness",
            "constraints": "integer [0..255]",
            "description": "Per-port brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "constraints": "integer [0..255]",
            "description": "Per-port power limit, 0..255."
          },
          {
            "keyword": "variant",
            "constraints": "\"DT6\" | \"DT8_XY\" | \"DT8_RGBWAF\" | \"DT8_TC\" | \"MONITOR\" | \"COMMISSION\" | \"DECOMMISSION\"",
            "description": "DALI device type or one-shot operational mode."
          },
          {
            "keyword": "mincolortemp",
            "constraints": "integer [1000..10000]",
            "description": "Minimum DT8 color temperature in kelvin."
          },
          {
            "keyword": "maxcolortemp",
            "constraints": "integer [1000..10000]",
            "description": "Maximum DT8 color temperature in kelvin; must not be below mincolortemp."
          },
          {
            "keyword": "mapping",
            "constraints": "array<integer>",
            "description": "DALI channel mapping. A negative value repeats the preceding mapping entry abs(value) times."
          },
          {
            "keyword": "poweronlevel",
            "constraints": "integer [0..254]",
            "description": "DALI power-on level."
          },
          {
            "keyword": "systemfailurelevel",
            "constraints": "integer [0..254]",
            "description": "DALI system-failure level."
          },
          {
            "keyword": "minlevel",
            "constraints": "integer [0..254]",
            "description": "DALI minimum level."
          },
          {
            "keyword": "maxlevel",
            "constraints": "integer [0..254]",
            "description": "DALI maximum level."
          },
          {
            "keyword": "faderate",
            "constraints": "integer [0..∞]",
            "description": "Requested fade rate in steps per second; firmware maps it to a DALI index."
          },
          {
            "keyword": "fadetime",
            "constraints": "integer [0..∞]",
            "description": "Requested fade time in milliseconds; firmware maps it to a DALI index."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "variant": [
            "DT6",
            "DT8_XY",
            "DT8_RGBWAF",
            "DT8_TC",
            "MONITOR",
            "COMMISSION",
            "DECOMMISSION"
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "DAC",
        "status": "supported",
        "description": "ESP32 DAC output; only W and RB orders are implemented. W requires one pin value; RB (also the default order) requires two values. Each value may be -1 for not connected; connected GPIO 25/26 values must be unique. Decorated/shared GPIO aliases do not configure the DAC driver.",
        "keywords": [
          "name",
          "brightness",
          "power",
          "order",
          "pin",
          "pins"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "brightness",
            "constraints": "integer [0..255]",
            "description": "Per-port brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "constraints": "integer [0..255]",
            "description": "Per-port power limit, 0..255."
          },
          {
            "keyword": "order",
            "constraints": "\"W\" | \"RB\"",
            "description": "Implemented DAC modes. R, G and B branches are placeholders and are not available."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 25 | 26",
            "description": "Single DAC-capable GPIO (25 or 26) for W mode; -1 means not connected."
          },
          {
            "keyword": "pins",
            "constraints": "array<-1 | 25 | 26>",
            "description": "DAC-capable GPIOs (25/26): exactly one for W or exactly two for RB; -1 means not connected and may repeat."
          }
        ],
        "enums": {
          "order": [
            "W",
            "RB"
          ],
          "pin": [
            -1,
            25,
            26
          ]
        },
        "gpioGrammar": []
      },
      {
        "type": "ADC",
        "status": "supported",
        "description": "ESP32 ADC1 analog input. The input pin may be -1 for not connected or GPIO 32..39.",
        "keywords": [
          "name",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "en",
          "!en+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ]
        },
        "gpioGrammar": [
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "RELAY",
        "status": "supported",
        "description": "Relay output port.",
        "keywords": [
          "name",
          "brightness",
          "power",
          "debounce",
          "startup",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "brightness",
            "constraints": "integer [0..255]",
            "description": "Per-port brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "constraints": "integer [0..255]",
            "description": "Per-port power limit, 0..255."
          },
          {
            "keyword": "debounce",
            "constraints": "integer [0..∞]",
            "description": "Relay debounce in milliseconds; default 100."
          },
          {
            "keyword": "startup",
            "constraints": "integer [0..∞]",
            "description": "Startup delay in milliseconds; default 0."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "GPIO",
        "status": "supported",
        "description": "General-purpose bidirectional GPIO.",
        "keywords": [
          "name",
          "variant",
          "input",
          "output",
          "debounce",
          "opendrain",
          "default",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "variant",
            "constraints": "\"INPUT_OUTPUT\" | \"INPUT\" | \"OUTPUT\" | \"OPEN_DRAIN\" | \"RELAY\" | \"BUTTON\" | \"SWITCH\"",
            "description": "GPIO behavior preset."
          },
          {
            "keyword": "input",
            "constraints": "boolean",
            "description": "Enable input behavior."
          },
          {
            "keyword": "output",
            "constraints": "boolean",
            "description": "Enable output behavior."
          },
          {
            "keyword": "debounce",
            "constraints": "integer [0..∞]",
            "description": "Input debounce in milliseconds."
          },
          {
            "keyword": "opendrain",
            "constraints": "boolean",
            "description": "Enable open-drain output."
          },
          {
            "keyword": "default",
            "constraints": "boolean or number",
            "description": "Initial output value."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "variant": [
            "INPUT_OUTPUT",
            "INPUT",
            "OUTPUT",
            "OPEN_DRAIN",
            "RELAY",
            "BUTTON",
            "SWITCH"
          ],
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "GPI",
        "status": "supported",
        "description": "General-purpose input.",
        "keywords": [
          "name",
          "variant",
          "debounce",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "variant",
            "constraints": "\"INPUT\" | \"BUTTON\" | \"SWITCH\"",
            "description": "Input behavior preset."
          },
          {
            "keyword": "debounce",
            "constraints": "integer [0..∞]",
            "description": "Input debounce in milliseconds."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "variant": [
            "INPUT",
            "BUTTON",
            "SWITCH"
          ],
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "GPO",
        "status": "supported",
        "description": "General-purpose output. Prefer PWM or RELAY types over their legacy GPO variants.",
        "keywords": [
          "name",
          "brightness",
          "power",
          "variant",
          "debounce",
          "opendrain",
          "default",
          "fadetime",
          "startup",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "brightness",
            "constraints": "integer [0..255]",
            "description": "Per-port brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "constraints": "integer [0..255]",
            "description": "Per-port power limit, 0..255."
          },
          {
            "keyword": "variant",
            "constraints": "\"OUTPUT\" | \"OPEN_DRAIN\" | \"RELAY\" | \"PWM\"",
            "description": "Output behavior. RELAY and PWM are deprecated compatibility forms."
          },
          {
            "keyword": "debounce",
            "constraints": "integer [0..∞]",
            "description": "Relay debounce in milliseconds."
          },
          {
            "keyword": "opendrain",
            "constraints": "boolean",
            "description": "Enable open-drain output."
          },
          {
            "keyword": "default",
            "constraints": "boolean or number",
            "description": "Initial output value."
          },
          {
            "keyword": "fadetime",
            "constraints": "integer [0..∞]",
            "description": "PWM fade time when variant is PWM."
          },
          {
            "keyword": "startup",
            "constraints": "integer [0..∞]",
            "description": "Relay startup delay when variant is RELAY."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "variant": [
            "OUTPUT",
            "OPEN_DRAIN",
            "RELAY",
            "PWM"
          ],
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "ACDET",
        "status": "supported",
        "description": "AC detector input.",
        "keywords": [
          "name",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "HIGH",
        "status": "supported",
        "description": "Constant-high digital source.",
        "keywords": [
          "name",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "LOW",
        "status": "supported",
        "description": "Constant-low digital source.",
        "keywords": [
          "name",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "TOUCH",
        "status": "supported",
        "description": "ESP32 capacitive-touch input; compiled in for 0.12.11.",
        "keywords": [
          "name",
          "tap",
          "press",
          "knock",
          "sensitivity",
          "pin",
          "!pin+",
          "en",
          "!en+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "tap",
            "constraints": "integer [0..∞]",
            "description": "Tap threshold; default 50."
          },
          {
            "keyword": "press",
            "constraints": "integer [0..∞]",
            "description": "Press threshold; default 500."
          },
          {
            "keyword": "knock",
            "constraints": "integer [0..∞]",
            "description": "Knock count; default 3."
          },
          {
            "keyword": "sensitivity",
            "constraints": "integer [1..4]",
            "description": "Touch sensitivity level, 1..4; default 1."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "UART",
        "status": "supported",
        "description": "Berry-visible UART.",
        "keywords": [
          "name",
          "baudrate",
          "txbuffer",
          "rxbuffer",
          "rxthreshold",
          "tx",
          "!tx+",
          "rx",
          "!rx+",
          "rts",
          "!rts+",
          "en",
          "!en+",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "baudrate",
            "constraints": "integer [1..5000000]",
            "description": "UART baud rate; default 115200."
          },
          {
            "keyword": "txbuffer",
            "constraints": "integer [1..65535]",
            "description": "TX buffer size. Omit for the zero-sized default."
          },
          {
            "keyword": "rxbuffer",
            "constraints": "integer [1..65535]",
            "description": "RX buffer size; default 4096."
          },
          {
            "keyword": "rxthreshold",
            "constraints": "integer [1..65535]",
            "description": "RX notification threshold; default 48."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "I2C",
        "status": "supported",
        "description": "Berry-visible I2C bus. Only one I2C entry is supported.",
        "keywords": [
          "name",
          "frequency",
          "sda",
          "!sda+",
          "scl",
          "!scl+",
          "en",
          "!en+",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "frequency",
            "constraints": "integer [1..∞]",
            "description": "I2C bus frequency in hertz; default 400000."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "SACN",
        "status": "supported",
        "description": "Streaming ACN input/output.",
        "keywords": [
          "name",
          "order",
          "count",
          "port",
          "universe",
          "channel",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+",
          "en",
          "!en+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "order",
            "constraints": "string (one or two 1–4 character RGBW orders separated by a vertical bar)",
            "description": "Channel order used to map received data to pixels."
          },
          {
            "keyword": "count",
            "constraints": "integer [1..4096]",
            "description": "Number of logical pixels/channels."
          },
          {
            "keyword": "port",
            "constraints": "integer [1..65535]",
            "description": "UDP port."
          },
          {
            "keyword": "universe",
            "constraints": "integer [1..64000]",
            "description": "Starting sACN universe; default 1."
          },
          {
            "keyword": "channel",
            "constraints": "integer [1..512]",
            "description": "Starting DMX channel."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "ARTNET",
        "status": "supported",
        "description": "Art-Net input/output.",
        "keywords": [
          "name",
          "order",
          "count",
          "port",
          "universe",
          "channel",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+",
          "en",
          "!en+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "order",
            "constraints": "string (one or two 1–4 character RGBW orders separated by a vertical bar)",
            "description": "Channel order used to map received data to pixels."
          },
          {
            "keyword": "count",
            "constraints": "integer [1..4096]",
            "description": "Number of logical pixels/channels."
          },
          {
            "keyword": "port",
            "constraints": "integer [1..65535]",
            "description": "UDP port."
          },
          {
            "keyword": "universe",
            "constraints": "integer [0..64000]",
            "description": "Starting Art-Net universe; default 0."
          },
          {
            "keyword": "channel",
            "constraints": "integer [1..512]",
            "description": "Starting DMX channel."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "DMX512",
        "status": "supported",
        "description": "DMX512 interface; compiled in for 0.12.11.",
        "keywords": [
          "name",
          "order",
          "count",
          "channel",
          "tx",
          "!tx+",
          "rx",
          "!rx+",
          "rts",
          "!rts+",
          "en",
          "!en+",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "order",
            "constraints": "string (one or two 1–4 character RGBW orders separated by a vertical bar)",
            "description": "Pixel/channel order."
          },
          {
            "keyword": "count",
            "constraints": "integer [1..170]",
            "description": "Logical pixel count. The code default is 512 while explicit values are capped at 170; set this explicitly."
          },
          {
            "keyword": "channel",
            "constraints": "integer [1..512]",
            "description": "Starting DMX channel; default 1."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "OSC",
        "status": "supported",
        "description": "Open Sound Control interface; compiled in for 0.12.11.",
        "keywords": [
          "name",
          "address",
          "endpoint",
          "port",
          "rxbuffer",
          "txbuffer",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+",
          "en",
          "!en+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "address",
            "constraints": "string",
            "description": "OSC address prefix."
          },
          {
            "keyword": "endpoint",
            "constraints": "string /^[^:]+:[0-9]+$/",
            "description": "Destination endpoint in host:port form."
          },
          {
            "keyword": "port",
            "constraints": "integer [1..65535]",
            "description": "Listening UDP port; default 8000."
          },
          {
            "keyword": "rxbuffer",
            "constraints": "integer [1..65535]",
            "description": "RX buffer size; default 1024."
          },
          {
            "keyword": "txbuffer",
            "constraints": "integer [1..65535]",
            "description": "TX buffer size; default 256."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "DUMMY",
        "status": "supported",
        "description": "Virtual port compatibility name.",
        "keywords": [
          "name",
          "brightness",
          "power",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+",
          "en",
          "!en+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "brightness",
            "constraints": "integer [0..255]",
            "description": "Per-port brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "constraints": "integer [0..255]",
            "description": "Per-port power limit, 0..255."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      },
      {
        "type": "VIRTUAL",
        "status": "supported",
        "description": "Virtual in-memory port.",
        "keywords": [
          "name",
          "brightness",
          "power",
          "pin",
          "!pin+",
          "w",
          "!w+",
          "white",
          "!white+",
          "tx",
          "!tx+",
          "sda",
          "!sda+",
          "r",
          "!r+",
          "red",
          "!red+",
          "rx",
          "!rx+",
          "scl",
          "!scl+",
          "g",
          "!g+",
          "green",
          "!green+",
          "b",
          "!b+",
          "blue",
          "!blue+",
          "rts",
          "!rts+",
          "en",
          "!en+"
        ],
        "fields": [
          {
            "keyword": "name",
            "constraints": "string",
            "description": "Optional human-readable name."
          },
          {
            "keyword": "brightness",
            "constraints": "integer [0..255]",
            "description": "Per-port brightness limit, 0..255."
          },
          {
            "keyword": "power",
            "constraints": "integer [0..255]",
            "description": "Per-port power limit, 0..255."
          },
          {
            "keyword": "pin",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for pin; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!pin+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated pin example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "w",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for w; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!w+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated w example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "white",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for white; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!white+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated white example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "tx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for tx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!tx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated tx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "sda",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for sda; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!sda+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated sda example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "r",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for r; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!r+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated r example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "red",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for red; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!red+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated red example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rx",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rx; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rx+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rx example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "scl",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for scl; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!scl+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated scl example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "g",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for g; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!g+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated g example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "green",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for green; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!green+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated green example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "b",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for b; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!b+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated b example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "blue",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for blue; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!blue+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated blue example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "rts",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for rts; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!rts+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated rts example: inverted with internal pull-up; -1 means not connected."
          },
          {
            "keyword": "en",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "GPIO for en; -1 means not connected. Decorators may occur anywhere: ! invert, + pull-up, - pull-down."
          },
          {
            "keyword": "!en+",
            "constraints": "-1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39",
            "description": "Decorated en example: inverted with internal pull-up; -1 means not connected."
          }
        ],
        "enums": {
          "pin": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!pin+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "w": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!w+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "white": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!white+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "tx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!tx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "sda": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!sda+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "r": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!r+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "red": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!red+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rx": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rx+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "scl": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!scl+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "g": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!g+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "green": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!green+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "b": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!b+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "blue": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!blue+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "rts": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!rts+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "en": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ],
          "!en+": [
            -1,
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23,
            25,
            26,
            27,
            32,
            33,
            34,
            35,
            36,
            37,
            38,
            39
          ]
        },
        "gpioGrammar": [
          "^(?!!b\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*$",
          "^(?!!blue\\+$)(?=.*[!+\\-])[!+\\-]*b[!+\\-]*l[!+\\-]*u[!+\\-]*e[!+\\-]*$",
          "^(?!!en\\+$)(?=.*[!+\\-])[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!g\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*$",
          "^(?!!green\\+$)(?=.*[!+\\-])[!+\\-]*g[!+\\-]*r[!+\\-]*e[!+\\-]*e[!+\\-]*n[!+\\-]*$",
          "^(?!!pin\\+$)(?=.*[!+\\-])[!+\\-]*p[!+\\-]*i[!+\\-]*n[!+\\-]*$",
          "^(?!!r\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*$",
          "^(?!!red\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*e[!+\\-]*d[!+\\-]*$",
          "^(?!!rts\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*t[!+\\-]*s[!+\\-]*$",
          "^(?!!rx\\+$)(?=.*[!+\\-])[!+\\-]*r[!+\\-]*x[!+\\-]*$",
          "^(?!!scl\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*c[!+\\-]*l[!+\\-]*$",
          "^(?!!sda\\+$)(?=.*[!+\\-])[!+\\-]*s[!+\\-]*d[!+\\-]*a[!+\\-]*$",
          "^(?!!tx\\+$)(?=.*[!+\\-])[!+\\-]*t[!+\\-]*x[!+\\-]*$",
          "^(?!!w\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*$",
          "^(?!!white\\+$)(?=.*[!+\\-])[!+\\-]*w[!+\\-]*h[!+\\-]*i[!+\\-]*t[!+\\-]*e[!+\\-]*$"
        ]
      }
    ],
    "recognizedButUnavailable": [
      {
        "path": "io.*.type",
        "value": "ESPNOWRADIO",
        "reason": "Parser branch exists, but INCLUDE_ESPNOWRADIO=0 in the selected 0.12.11 build.",
        "keywords": [
          "rxqueue",
          "interface"
        ]
      },
      {
        "path": "io.*[type=DALI].variant",
        "value": "DT6_ONOFF",
        "reason": "The branch is present but does not assign a DALI device type."
      },
      {
        "path": "io.*[type=DAC].order",
        "value": "R | G | B",
        "reason": "The branches are TODO placeholders; only W and RB create a port."
      },
      {
        "path": "ble",
        "value": "isolate | stealth",
        "reason": "These parser blocks are commented out.",
        "keywords": [
          "stealth"
        ]
      }
    ],
    "excludedNonControllerJson": [
      {
        "path": "signature",
        "reason": "Network config, consumed by src/esp32/device.cpp rather than Controller config."
      },
      {
        "path": "key",
        "reason": "Network config, consumed by src/esp32/device.cpp rather than Controller config."
      },
      {
        "path": "connection parser payload",
        "reason": "WASM connection selection input, not Controller config."
      }
    ],
    "decoratedGpio": {
      "modifiers": {
        "!": "invert",
        "+": "internal pull-up",
        "-": "internal pull-down"
      },
      "positionIndependent": true,
      "notConnectedValue": -1,
      "examples": [
        "pin",
        "!pin+",
        "p!i+n",
        "-tx!"
      ],
      "controllerAliases": {
        "btn": "canonical button",
        "button": "deprecated button",
        "led": "status LED"
      },
      "ioAliases": [
        "pin",
        "w",
        "white",
        "tx",
        "sda",
        "r",
        "red",
        "rx",
        "scl",
        "g",
        "green",
        "b",
        "blue",
        "rts",
        "en"
      ]
    },
    "crossFieldRules": [
      "I/O and segment labels contain 1..5 characters from A-Z, a-z, 0-9 or underscore.",
      "Only one I2C I/O entry can be active.",
      "DALI maxcolortemp must be greater than or equal to mincolortemp.",
      "A segment section must refer to an existing I/O label.",
      "Segment size is shorthand for from=1,to=size.",
      "Pin value -1 means not connected for every GPIO pin schema.",
      "DAC order W requires exactly one GPIO 25/26 or -1; RB or an omitted order requires two values from -1, 25 and 26, and connected GPIOs must be unique.",
      "ADC inputs are limited to ADC1 GPIOs 32..39 or -1; RTC I2C pins must be output-capable or -1.",
      "controller.btn wins over deprecated controller.button when both are present.",
      "plugins PowerManage btn wins over deprecated button and pin aliases."
    ]
  }
}
