fix: Omit children with invalid state from space summary #1227

Merged
nex merged 1 commit from nex/fix/empty-children into main 2025-12-18 19:48:59 +00:00
Owner

fixes #1059

Space children that are empty/redacted (content is {}) are now properly omitted from the hierarchy response:

{
  "body": {
    "children": [
      {
        "avatar_url": "mxc://nexy7574.co.uk/cqMb1Hv34mK7AFsEG6FQC0lYVwINnsEZ",
        "canonical_alias": "#general:nexy7574.co.uk",
        "guest_can_join": false,
        "im.nheko.summary.room_version": "10",
        "name": "Nexy general/ontopic 🏳‍⚧",
        "num_joined_members": 63,
        "room_id": "!QTkUxxpfM9xGYHr6KV:nexy7574.co.uk",
        "topic": "A place to discuss my homeservers and other projects without their own rooms.\n\nPlease refer to the NioBot code of conduct: https://docs.nio-bot.dev/master/meta/code-of-conduct/. Moderator decision is final.",
        "world_readable": false
      },
      {
        "canonical_alias": "#stickers:nexy7574.co.uk",
        "guest_can_join": false,
        "im.nheko.summary.room_version": "11",
        "name": "Nexy Stickers",
        "num_joined_members": 26,
        "room_id": "!OsgPt00PZet9BvF2v0:nexy7574.co.uk",
        "topic": "NEXY STICKERS! ALL THE STICKERS!",
        "world_readable": false
      },
      {
        "canonical_alias": "#offtopics:nexy7574.co.uk",
        "guest_can_join": true,
        "im.nheko.summary.room_version": "11",
        "name": "Nexy Offtopics",
        "num_joined_members": 19,
        "room_id": "!ChZ2JPTDaE3w17ADWT:nexy7574.co.uk",
        "room_type": "m.space",
        "topic": "A space containing all of the previous nexy offtopic spaces. Stay tuned for the monthly upgrades!",
        "world_readable": false
      },
      {
        "avatar_url": "mxc://nexy7574.co.uk/GbcQWqZPYBWYbM40MZfel8oszI2B8O76",
        "canonical_alias": "#spam:nexy7574.co.uk",
        "guest_can_join": true,
        "im.nheko.summary.room_version": "11",
        "name": "Nexy spam v2",
        "num_joined_members": 38,
        "room_id": "!spam-1:nexy7574.co.uk",
        "topic": "Spam",
        "world_readable": true
      },
      {
        "avatar_url": "mxc://nexy7574.co.uk/CedROJ82UFmQys8c6nOzlBsL0W4TeIsJ",
        "canonical_alias": "#status:nexy7574.co.uk",
        "guest_can_join": true,
        "im.nheko.summary.room_version": "10",
        "name": "status",
        "num_joined_members": 26,
        "room_id": "!79d6Qowfu2eD3MUVPJ:nexy7574.co.uk",
        "topic": "Live status monitor updates from https://status.nexy7574.co.uk",
        "world_readable": true
      },
      {
        "avatar_url": "mxc://nexy7574.co.uk/5Xufz4Rn7vKJ36nP1puxLvsbo8A6WAA3",
        "canonical_alias": "#ping:nexy7574.co.uk",
        "guest_can_join": false,
        "im.nheko.summary.room_version": "11",
        "name": "Ping",
        "num_joined_members": 38,
        "room_id": "!ping:nexy7574.co.uk",
        "topic": "Ping bots welcome here. You can see a statistics board at https://mau.bot/_matrix/maubot/plugin/pingstat/!ping:nexy7574.co.uk/stats - please remember it is not a competition.",
        "world_readable": false
      }
    ],
    "inaccessible_children": [],
    "room": {
      "avatar_url": "mxc://nexy7574.co.uk/nuW9yYtysL3aSfq3cHIUQDGi70XokkFZ",
      "canonical_alias": "#meta:nexy7574.co.uk",
      "children_state": [
        {
          "content": {
            "auto_join": false,
            "order": "~9VleC",
            "suggested": false,
            "via": [
              "nexy7574.co.uk"
            ]
          },
          "origin_server_ts": 1743967730984,
          "sender": "@nex:nexy7574.uk",
          "state_key": "!zDawe9cFevCYVCodpj:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "~JxYT!",
            "suggested": true,
            "via": [
              "nexy7574.co.uk",
              "asgard.chat",
              "basil.quest"
            ]
          },
          "origin_server_ts": 1762956779464,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!b85bQoxewxTERvKwyo:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "*:8tdb",
            "via": [
              "nexy7574.co.uk",
              "continuwuity.rocks",
              "envs.net"
            ]
          },
          "origin_server_ts": 1762956779792,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!aJNXgq6JZdhKrbkH5v:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "#^*{@q",
            "suggested": true,
            "via": [
              "nexy7574.co.uk",
              "synapse.nexy7574.co.uk",
              "transgender.ing"
            ]
          },
          "origin_server_ts": 1762956780579,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!79d6Qowfu2eD3MUVPJ:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": ",jur4%",
            "via": [
              "timedout.uk",
              "nexy7574.co.uk",
              "synapse.nexy7574.co.uk"
            ]
          },
          "origin_server_ts": 1762956778980,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!ping:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "t#^*{2",
            "via": [
              "nexy7574.co.uk",
              "synapse.nexy7574.co.uk",
              "transgender.ing"
            ]
          },
          "origin_server_ts": 1762956780234,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!N41lz04fv3s3zUwBeh:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "{@t#^!",
            "via": [
              "nexy7574.co.uk",
              "synapse.nexy7574.co.uk",
              "transgender.ing"
            ]
          },
          "origin_server_ts": 1762956780725,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!3XZU8BVSy4FkXRTH6S:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "$UtzI'",
            "suggested": true,
            "via": [
              "nexy7574.co.uk",
              "continuwuity.rocks",
              "envs.net"
            ]
          },
          "origin_server_ts": 1762956779977,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!QTkUxxpfM9xGYHr6KV:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "~(5 vd",
            "via": [
              "nexy7574.co.uk",
              "transgender.ing",
              "squarebowl.club"
            ]
          },
          "origin_server_ts": 1762956779631,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!aaF57zH2PUWPOonvGC:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "}0J!nN",
            "via": [
              "nexy7574.co.uk",
              "littlevortex.net",
              "matrix.org"
            ]
          },
          "origin_server_ts": 1745617807950,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!1apUfE1Luu1v4TWG9G:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "PG:NW[",
            "via": [
              "nexy7574.co.uk",
              "envs.net",
              "squarebowl.club"
            ]
          },
          "origin_server_ts": 1762956778822,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!spam-1:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "b5L<iF",
            "via": [
              "nexy7574.co.uk",
              "synapse.nexy7574.co.uk",
              "continuwuity.org"
            ]
          },
          "origin_server_ts": 1762956780112,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!OsgPt00PZet9BvF2v0:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "via": [
              "nexy7574.co.uk",
              "timedout.uk",
              "beeper.com"
            ]
          },
          "origin_server_ts": 1762956780454,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!ChZ2JPTDaE3w17ADWT:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "suggested": true,
            "via": [
              "nexy7574.co.uk",
              "synapse.nexy7574.co.uk",
              "asgard.chat"
            ]
          },
          "origin_server_ts": 1762956779280,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!hammerhead-1:nexy7574.co.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "order": "~E. Yk",
            "via": [
              "timedout.uk",
              "nexy7574.co.uk",
              "synapse.nexy7574.co.uk"
            ]
          },
          "origin_server_ts": 1762956779131,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!mod-1:timedout.uk",
          "type": "m.space.child"
        },
        {
          "content": {
            "via": [
              "nexy7574.co.uk",
              "maunium.net",
              "beeper"
            ]
          },
          "origin_server_ts": 1762468596828,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!WPZTYKl78yFl9u9kNmsACs0On5_wLdR4UPZ5MQIJJlA",
          "type": "m.space.child"
        },
        {
          "content": {
            "via": [
              "nexy7574.co.uk",
              "timedout.uk",
              "starstruck.systems"
            ]
          },
          "origin_server_ts": 1762213505368,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!WPZTYKl78yFl9u9kNmsACs0On5_wLdR4UPZ5MQIJJlA`",
          "type": "m.space.child"
        },
        {
          "content": {
            "canonical": true,
            "via": [
              "starstruck.systems",
              "synapse.nexy7574.co.uk",
              "maunium.net"
            ]
          },
          "origin_server_ts": 1763248718287,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!UdKLVYoj9Cb-VuNJHKgqHI37jvx2UUaeBv36DhjGVWo",
          "type": "m.space.child"
        },
        {
          "content": {
            "suggested": false,
            "via": [
              "nexy7574.co.uk",
              "synapse.nexy7574.co.uk"
            ]
          },
          "origin_server_ts": 1763390889623,
          "sender": "@nex:nexy7574.co.uk",
          "state_key": "!pt14oflSwU69xSCGzq:nexy7574.co.uk",
          "type": "m.space.child"
        }
      ],
      "guest_can_join": true,
      "im.nheko.summary.room_version": "10",
      "join_rule": "public",
      "name": "nexy7574.co.uk & co meta",
      "num_joined_members": 66,
      "room_id": "!kgXoljvDj4JpE8SkxV:nexy7574.co.uk",
      "room_type": "m.space",
      "topic": "Metaspace for nexy7574.co.uk and associated homeservers",
      "world_readable": true
    }
  },
  "elapsed_ms": 490,
  "headers": {
    "Access-Control-Allow-Origin": [
      "*"
    ],
    "Alt-Svc": [
      "h3=\":443\"; ma=2592000"
    ],
    "Cache-Control": [
      "public,max-age=806400"
    ],
    "Content-Security-Policy": [
      "default-src 'none';frame-ancestors 'none';form-action 'none';base-uri 'none';sandbox"
    ],
    "Content-Type": [
      "application/json"
    ],
    "Date": [
      "Thu, 18 Dec 2025 19:41:09 GMT"
    ],
    "Origin-Agent-Cluster": [
      "?1"
    ],
    "Permissions-Policy": [
      "interest-cohort=(),browsing-topics=()"
    ],
    "Strict-Transport-Security": [
      "max-age=31536000; includeSubDomains; preload"
    ],
    "Vary": [
      "origin, access-control-request-method, access-control-request-headers",
      "accept-encoding"
    ],
    "Via": [
      "1.1 Caddy"
    ],
    "X-Content-Type-Options": [
      "nosniff"
    ],
    "X-Frame-Options": [
      "DENY"
    ],
    "X-Xss-Protection": [
      "0"
    ]
  },
  "status_code": 200
}
fixes #1059 Space children that are empty/redacted (content is `{}`) are now properly omitted from the hierarchy response: ```json { "body": { "children": [ { "avatar_url": "mxc://nexy7574.co.uk/cqMb1Hv34mK7AFsEG6FQC0lYVwINnsEZ", "canonical_alias": "#general:nexy7574.co.uk", "guest_can_join": false, "im.nheko.summary.room_version": "10", "name": "Nexy general/ontopic 🏳‍⚧", "num_joined_members": 63, "room_id": "!QTkUxxpfM9xGYHr6KV:nexy7574.co.uk", "topic": "A place to discuss my homeservers and other projects without their own rooms.\n\nPlease refer to the NioBot code of conduct: https://docs.nio-bot.dev/master/meta/code-of-conduct/. Moderator decision is final.", "world_readable": false }, { "canonical_alias": "#stickers:nexy7574.co.uk", "guest_can_join": false, "im.nheko.summary.room_version": "11", "name": "Nexy Stickers", "num_joined_members": 26, "room_id": "!OsgPt00PZet9BvF2v0:nexy7574.co.uk", "topic": "NEXY STICKERS! ALL THE STICKERS!", "world_readable": false }, { "canonical_alias": "#offtopics:nexy7574.co.uk", "guest_can_join": true, "im.nheko.summary.room_version": "11", "name": "Nexy Offtopics", "num_joined_members": 19, "room_id": "!ChZ2JPTDaE3w17ADWT:nexy7574.co.uk", "room_type": "m.space", "topic": "A space containing all of the previous nexy offtopic spaces. Stay tuned for the monthly upgrades!", "world_readable": false }, { "avatar_url": "mxc://nexy7574.co.uk/GbcQWqZPYBWYbM40MZfel8oszI2B8O76", "canonical_alias": "#spam:nexy7574.co.uk", "guest_can_join": true, "im.nheko.summary.room_version": "11", "name": "Nexy spam v2", "num_joined_members": 38, "room_id": "!spam-1:nexy7574.co.uk", "topic": "Spam", "world_readable": true }, { "avatar_url": "mxc://nexy7574.co.uk/CedROJ82UFmQys8c6nOzlBsL0W4TeIsJ", "canonical_alias": "#status:nexy7574.co.uk", "guest_can_join": true, "im.nheko.summary.room_version": "10", "name": "status", "num_joined_members": 26, "room_id": "!79d6Qowfu2eD3MUVPJ:nexy7574.co.uk", "topic": "Live status monitor updates from https://status.nexy7574.co.uk", "world_readable": true }, { "avatar_url": "mxc://nexy7574.co.uk/5Xufz4Rn7vKJ36nP1puxLvsbo8A6WAA3", "canonical_alias": "#ping:nexy7574.co.uk", "guest_can_join": false, "im.nheko.summary.room_version": "11", "name": "Ping", "num_joined_members": 38, "room_id": "!ping:nexy7574.co.uk", "topic": "Ping bots welcome here. You can see a statistics board at https://mau.bot/_matrix/maubot/plugin/pingstat/!ping:nexy7574.co.uk/stats - please remember it is not a competition.", "world_readable": false } ], "inaccessible_children": [], "room": { "avatar_url": "mxc://nexy7574.co.uk/nuW9yYtysL3aSfq3cHIUQDGi70XokkFZ", "canonical_alias": "#meta:nexy7574.co.uk", "children_state": [ { "content": { "auto_join": false, "order": "~9VleC", "suggested": false, "via": [ "nexy7574.co.uk" ] }, "origin_server_ts": 1743967730984, "sender": "@nex:nexy7574.uk", "state_key": "!zDawe9cFevCYVCodpj:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "~JxYT!", "suggested": true, "via": [ "nexy7574.co.uk", "asgard.chat", "basil.quest" ] }, "origin_server_ts": 1762956779464, "sender": "@nex:nexy7574.co.uk", "state_key": "!b85bQoxewxTERvKwyo:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "*:8tdb", "via": [ "nexy7574.co.uk", "continuwuity.rocks", "envs.net" ] }, "origin_server_ts": 1762956779792, "sender": "@nex:nexy7574.co.uk", "state_key": "!aJNXgq6JZdhKrbkH5v:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "#^*{@q", "suggested": true, "via": [ "nexy7574.co.uk", "synapse.nexy7574.co.uk", "transgender.ing" ] }, "origin_server_ts": 1762956780579, "sender": "@nex:nexy7574.co.uk", "state_key": "!79d6Qowfu2eD3MUVPJ:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": ",jur4%", "via": [ "timedout.uk", "nexy7574.co.uk", "synapse.nexy7574.co.uk" ] }, "origin_server_ts": 1762956778980, "sender": "@nex:nexy7574.co.uk", "state_key": "!ping:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "t#^*{2", "via": [ "nexy7574.co.uk", "synapse.nexy7574.co.uk", "transgender.ing" ] }, "origin_server_ts": 1762956780234, "sender": "@nex:nexy7574.co.uk", "state_key": "!N41lz04fv3s3zUwBeh:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "{@t#^!", "via": [ "nexy7574.co.uk", "synapse.nexy7574.co.uk", "transgender.ing" ] }, "origin_server_ts": 1762956780725, "sender": "@nex:nexy7574.co.uk", "state_key": "!3XZU8BVSy4FkXRTH6S:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "$UtzI'", "suggested": true, "via": [ "nexy7574.co.uk", "continuwuity.rocks", "envs.net" ] }, "origin_server_ts": 1762956779977, "sender": "@nex:nexy7574.co.uk", "state_key": "!QTkUxxpfM9xGYHr6KV:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "~(5 vd", "via": [ "nexy7574.co.uk", "transgender.ing", "squarebowl.club" ] }, "origin_server_ts": 1762956779631, "sender": "@nex:nexy7574.co.uk", "state_key": "!aaF57zH2PUWPOonvGC:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "}0J!nN", "via": [ "nexy7574.co.uk", "littlevortex.net", "matrix.org" ] }, "origin_server_ts": 1745617807950, "sender": "@nex:nexy7574.co.uk", "state_key": "!1apUfE1Luu1v4TWG9G:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "PG:NW[", "via": [ "nexy7574.co.uk", "envs.net", "squarebowl.club" ] }, "origin_server_ts": 1762956778822, "sender": "@nex:nexy7574.co.uk", "state_key": "!spam-1:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "b5L<iF", "via": [ "nexy7574.co.uk", "synapse.nexy7574.co.uk", "continuwuity.org" ] }, "origin_server_ts": 1762956780112, "sender": "@nex:nexy7574.co.uk", "state_key": "!OsgPt00PZet9BvF2v0:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "via": [ "nexy7574.co.uk", "timedout.uk", "beeper.com" ] }, "origin_server_ts": 1762956780454, "sender": "@nex:nexy7574.co.uk", "state_key": "!ChZ2JPTDaE3w17ADWT:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "suggested": true, "via": [ "nexy7574.co.uk", "synapse.nexy7574.co.uk", "asgard.chat" ] }, "origin_server_ts": 1762956779280, "sender": "@nex:nexy7574.co.uk", "state_key": "!hammerhead-1:nexy7574.co.uk", "type": "m.space.child" }, { "content": { "order": "~E. Yk", "via": [ "timedout.uk", "nexy7574.co.uk", "synapse.nexy7574.co.uk" ] }, "origin_server_ts": 1762956779131, "sender": "@nex:nexy7574.co.uk", "state_key": "!mod-1:timedout.uk", "type": "m.space.child" }, { "content": { "via": [ "nexy7574.co.uk", "maunium.net", "beeper" ] }, "origin_server_ts": 1762468596828, "sender": "@nex:nexy7574.co.uk", "state_key": "!WPZTYKl78yFl9u9kNmsACs0On5_wLdR4UPZ5MQIJJlA", "type": "m.space.child" }, { "content": { "via": [ "nexy7574.co.uk", "timedout.uk", "starstruck.systems" ] }, "origin_server_ts": 1762213505368, "sender": "@nex:nexy7574.co.uk", "state_key": "!WPZTYKl78yFl9u9kNmsACs0On5_wLdR4UPZ5MQIJJlA`", "type": "m.space.child" }, { "content": { "canonical": true, "via": [ "starstruck.systems", "synapse.nexy7574.co.uk", "maunium.net" ] }, "origin_server_ts": 1763248718287, "sender": "@nex:nexy7574.co.uk", "state_key": "!UdKLVYoj9Cb-VuNJHKgqHI37jvx2UUaeBv36DhjGVWo", "type": "m.space.child" }, { "content": { "suggested": false, "via": [ "nexy7574.co.uk", "synapse.nexy7574.co.uk" ] }, "origin_server_ts": 1763390889623, "sender": "@nex:nexy7574.co.uk", "state_key": "!pt14oflSwU69xSCGzq:nexy7574.co.uk", "type": "m.space.child" } ], "guest_can_join": true, "im.nheko.summary.room_version": "10", "join_rule": "public", "name": "nexy7574.co.uk & co meta", "num_joined_members": 66, "room_id": "!kgXoljvDj4JpE8SkxV:nexy7574.co.uk", "room_type": "m.space", "topic": "Metaspace for nexy7574.co.uk and associated homeservers", "world_readable": true } }, "elapsed_ms": 490, "headers": { "Access-Control-Allow-Origin": [ "*" ], "Alt-Svc": [ "h3=\":443\"; ma=2592000" ], "Cache-Control": [ "public,max-age=806400" ], "Content-Security-Policy": [ "default-src 'none';frame-ancestors 'none';form-action 'none';base-uri 'none';sandbox" ], "Content-Type": [ "application/json" ], "Date": [ "Thu, 18 Dec 2025 19:41:09 GMT" ], "Origin-Agent-Cluster": [ "?1" ], "Permissions-Policy": [ "interest-cohort=(),browsing-topics=()" ], "Strict-Transport-Security": [ "max-age=31536000; includeSubDomains; preload" ], "Vary": [ "origin, access-control-request-method, access-control-request-headers", "accept-encoding" ], "Via": [ "1.1 Caddy" ], "X-Content-Type-Options": [ "nosniff" ], "X-Frame-Options": [ "DENY" ], "X-Xss-Protection": [ "0" ] }, "status_code": 200 } ```
nex added this to the 0.5.0 milestone 2025-12-18 19:43:27 +00:00
fix: Omit children with invalid state from space summary
All checks were successful
Documentation / Build and Deploy Documentation (pull_request) Successful in 53s
Checks / Prek / Pre-commit & Formatting (pull_request) Successful in 1m26s
Checks / Prek / Clippy and Cargo Tests (pull_request) Successful in 19m12s
95c5b1f18d
nex requested review from Owners 2025-12-18 19:43:42 +00:00
Jade approved these changes 2025-12-18 19:44:48 +00:00
nex merged commit 48a6a475ce into main 2025-12-18 19:48:59 +00:00
nex deleted branch nex/fix/empty-children 2025-12-18 19:48:59 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
continuwuation/continuwuity!1227
No description provided.