get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.1/patches/2231657/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2231657,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2231657/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/737b4d77-8df9-42dd-8c79-f862baac4e71@oss.qualcomm.com/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/17/?format=api",
        "name": "GNU Compiler Collection",
        "link_name": "gcc",
        "list_id": "gcc-patches.gcc.gnu.org",
        "list_email": "gcc-patches@gcc.gnu.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null
    },
    "msgid": "<737b4d77-8df9-42dd-8c79-f862baac4e71@oss.qualcomm.com>",
    "date": "2026-05-01T03:48:13",
    "name": "[to-be-committed,RISC-V,PR,tree-optimization/109038] Recognize shifts+rotate as simple shift in some cases",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "6799b851a6e3ff17760c002769d21f6c7c2ce55b",
    "submitter": {
        "id": 92310,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/92310/?format=api",
        "name": "Jeffrey Law",
        "email": "jeffrey.law@oss.qualcomm.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/737b4d77-8df9-42dd-8c79-f862baac4e71@oss.qualcomm.com/mbox/",
    "series": [
        {
            "id": 502419,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/502419/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=502419",
            "date": "2026-05-01T03:48:13",
            "name": "[to-be-committed,RISC-V,PR,tree-optimization/109038] Recognize shifts+rotate as simple shift in some cases",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/502419/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2231657/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2231657/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=MPnZNHW6;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=JtNSH4Ze;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)",
            "sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.a=rsa-sha256\n header.s=qcppdkim1 header.b=MPnZNHW6;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n header.a=rsa-sha256 header.s=google header.b=JtNSH4Ze",
            "sourceware.org; dmarc=none (p=none dis=none)\n header.from=oss.qualcomm.com",
            "sourceware.org;\n spf=pass smtp.mailfrom=oss.qualcomm.com",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=205.220.168.131"
        ],
        "Received": [
            "from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g6H8l1gw5z1yHZ\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 01 May 2026 13:48:49 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id A8BEA4AA6FFE\n\tfor <incoming@patchwork.ozlabs.org>; Fri,  1 May 2026 03:48:47 +0000 (GMT)",
            "from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com\n [205.220.168.131])\n by sourceware.org (Postfix) with ESMTPS id 484F64AA6FD2\n for <gcc-patches@gcc.gnu.org>; Fri,  1 May 2026 03:48:18 +0000 (GMT)",
            "from pps.filterd (m0279864.ppops.net [127.0.0.1])\n by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 63UMNFDQ2121658\n for <gcc-patches@gcc.gnu.org>; Fri, 1 May 2026 03:48:17 GMT",
            "from mail-dy1-f199.google.com (mail-dy1-f199.google.com\n [74.125.82.199])\n by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4dvag4t5ju-1\n (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n for <gcc-patches@gcc.gnu.org>; Fri, 01 May 2026 03:48:17 +0000 (GMT)",
            "by mail-dy1-f199.google.com with SMTP id\n 5a478bee46e88-2bda35eab74so1405774eec.0\n for <gcc-patches@gcc.gnu.org>; Thu, 30 Apr 2026 20:48:17 -0700 (PDT)",
            "from [172.31.0.17] ([136.38.201.137])\n by smtp.gmail.com with ESMTPSA id\n a92af1059eb24-12df8452edesm1539328c88.14.2026.04.30.20.48.14\n for <gcc-patches@gcc.gnu.org>\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 30 Apr 2026 20:48:14 -0700 (PDT)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org A8BEA4AA6FFE",
            "OpenDKIM Filter v2.11.0 sourceware.org 484F64AA6FD2"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 484F64AA6FD2",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 484F64AA6FD2",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777607298; cv=none;\n b=EPqWO8kmT0uM312/Ae/60Ju4vPYa5UPwMnSDw52otDl8dUg0YtIlVYd4Mdq2/z7LG2dq23/hDuETHbZrp80gRs3Jm51numJn2QMou9+3ZviSza/qfvrv2b1XC8uJWDVJukCBBGpTTpZPMI0fCUKEhkoBAmyTvGL+9N62tTwGSx0=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777607298; c=relaxed/simple;\n bh=GacP1vc6r7p3BTS5wBKue3cZWXobek2X0+8Lse9jwbs=;\n h=DKIM-Signature:DKIM-Signature:Message-ID:Date:MIME-Version:From:\n Subject:To;\n b=rLrOiYwuR+ggy1rz4wumBSBy9V3OO8xz645AvoyBqMee2ANfIDEOr09BS16XiMHHrYf3KBk2HUNcSxRG7Pdvs0hbPBuPZsytn9ClSwljdqoWjVwc+76nesjlLwuKDEAAp0nkDiwzCWqG/t2f3TReXgczfnvVSuRPngFIBgmgIbQ=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n content-type:date:from:message-id:mime-version:subject:to; s=\n qcppdkim1; bh=4+n/XH2TsE39KdfLoEHug/u7LbDc2FhWz4E5pMFBZxk=; b=MP\n nZNHW6z0GQ8BZKtmjUT6Q+3fV94CvziIG+KOIHwCLnDWXFEyOmhzLqlTUu0sso7h\n GS2/hiAKBrlQNPj/bkeulDlZPKwnCoqit5utCAnbROwqzBBdkzzUr5nQ/CLgYKIa\n KMLqDhb1q7SrjZPq6V4i1jzssncXo3SfN9u2i2Mo/ueibcMB4E6N24uTxvLJDI2k\n DTHqPExHnDapc/EKRuZo1XtEe6/JhykDyyvMHqktmKNvGIM7/W+I6sbnThGZMBtb\n iK9kF8Lj6tON1y8IPULUwY4u1wmxEBsWDJi43LytYnAMVu4J6niGetJ4rALpX3Lj\n dXWWQ8HCsUdEzEoDdIzw==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oss.qualcomm.com; s=google; t=1777607296; x=1778212096; darn=gcc.gnu.org;\n h=to:subject:content-language:from:user-agent:mime-version:date\n :message-id:from:to:cc:subject:date:message-id:reply-to;\n bh=4+n/XH2TsE39KdfLoEHug/u7LbDc2FhWz4E5pMFBZxk=;\n b=JtNSH4Ze1XAXiHxNm9lGeBp55on7I2iLINbGYWl/Gg5um0kQ0lhyKaFpgPg8jyPM0f\n N3smlElzpnYaE+/OVMFSD2nh4GpIM7zWHwzoELuc1gCXpJDQvUrTL5lwOvL8v3WQVNqR\n BKw4/i+Sm8QOT9Rfa29oNXDrw5547b/pgZtzztBMrWEX7lvjUkmH3v/SnYqb/c4+6nfl\n j33yUz+vU1Xd600wpcVriTiRfWzyB5yOpa2UZCJfhOSyFts02Ce27a6NjgXqlT9DSlxb\n sAIqEI0Nl3Dk2OVKSVwLPmGBYQnZ4cb5Pe6Cq8HUcSoGPVxNeuQcm/coft5wYvz2SRuz\n 4YRw=="
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777607296; x=1778212096;\n h=to:subject:content-language:from:user-agent:mime-version:date\n :message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=4+n/XH2TsE39KdfLoEHug/u7LbDc2FhWz4E5pMFBZxk=;\n b=L4QpYm2CDped9ox7tl19oCdvqY7T4ydPbkn5i//cvtN9ZhOWcxia5Nr1egBpg/ZKoV\n RXR8K7dNozhquBDlRUkaVv575A/fqLANNoNk9mvDhnMwQ3jt25kZon8s5TQzFjlHU9/d\n O5YAVaeiW1H0injOnoVzXUa4p4j/f9VJBrIUTosjRNm5cL8ZGjGzOAhVZHP7saSznrRk\n uog0TGKoDg6S/i4apJ8Tn1/Z/14aJIXjFVRWtRSxZ2hyqp4pv5PejkP8CAOoN+AjaYan\n ik7PNeBJriMTf8FMAtvy0HJzfKM+G0vr0pYZ39tRe14hYQgX2xbZ2VJtvlfoGlRjRXkg\n AouA==",
        "X-Gm-Message-State": "AOJu0YxGWN8yayb2JyHhUfweemrWQEq0CYfqcJ5IMkaHEZNn1ayplvzZ\n YWUg49Animqwh8OAX/1ThOxxiJ1OtEH7o27gmligvK5xWTc2E+/Gvgh5GDPE3Cx3ozyXPQrN+zp\n 7vTfE/boSCrcaB1cSdSriXgYsqpsSPBX8Njdtbz5WL/b6eGId7cmcKtQloyPWD6K2R883",
        "X-Gm-Gg": "AeBDiet04qi41Iy9uS0LW8lM5OCmWBbrpzh4rjLMj0DhcZQw99QcphclbE92zEJ6+XG\n It9D9xhNYrLq0/3e8EgHNe8wxD7H/Qd+X7LblJ2m+eqkLKjp7S374NBNCag36HM2+sjSjUIVXBF\n /5IXQj3X9YSj6lX8FArxceIQIObI3SNf+stU3c0bhAAk6bXSbVIyxwRiKFwdDIok/sZaZ0WTo2J\n CqBx5lPh39DO+BR86E0iCfYIthrxJOCPBkn8q5vywqVmlyRmvNq5kEHT862uSniHDqyks2SkpEE\n wJapaVCGkFWXrZCkDMGfvkm1n8n6AxgVbu9j8i0aa8rwUSIwElSihGfN/lhQb6NJo1pkAzRv6lK\n xzsbY/TYXklKyXUKqaLgu1SbMWx1UAMunXikOIRx1QCpjZCNlCE+DUZI9R50m",
        "X-Received": [
            "by 2002:a05:7022:693:b0:12d:b2ca:a9e9 with SMTP id\n a92af1059eb24-12dec900b39mr2030088c88.8.1777607296222;\n Thu, 30 Apr 2026 20:48:16 -0700 (PDT)",
            "by 2002:a05:7022:693:b0:12d:b2ca:a9e9 with SMTP id\n a92af1059eb24-12dec900b39mr2030077c88.8.1777607295558;\n Thu, 30 Apr 2026 20:48:15 -0700 (PDT)"
        ],
        "Content-Type": "multipart/mixed; boundary=\"------------WEKlF5YQkFlyZ0eQLAn1nWDB\"",
        "Message-ID": "<737b4d77-8df9-42dd-8c79-f862baac4e71@oss.qualcomm.com>",
        "Date": "Thu, 30 Apr 2026 21:48:13 -0600",
        "MIME-Version": "1.0",
        "User-Agent": "Mozilla Thunderbird",
        "From": "Jeffrey Law <jeffrey.law@oss.qualcomm.com>",
        "Content-Language": "en-US",
        "Subject": "[to-be-committed][RISC-V][PR tree-optimization/109038] Recognize\n shifts+rotate as simple shift in some cases",
        "To": "'GCC Patches' <gcc-patches@gcc.gnu.org>",
        "X-Proofpoint-GUID": "R4lEINM_S-h4hqtXyf2ogF86nykqYkNv",
        "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNTAxMDAzMCBTYWx0ZWRfX45ZlQzTmjgdi\n wZhXjpmXhUcMkYpn1uraO8VknT/eeD0zGVFveCv79/v3itJgFhwMggu1nhjohJcg9OiSFgZ2yXn\n Z5g77Ujxn07wQOrNociE2aezRxVrmuTvd+44BTkwtAXOrUKLC+wL7Y+BwyfM2FQnP2A5Sf79bXj\n /ulTa8yClPtnXaMhPqWRDh4QqqgHElNMfhlZohplMTfwvITlRO9FfxQVmypZb86DEY9ounWPQXb\n vUFh2VbQz6XX++BRkElcaghNgVj5bwNt+CpOfpMeHB7bYrdZBCTwWFxV/YqW0rBhwUNfvskGoop\n 0IuBaSM/abT3L/psZdT2lLDuKCfAi7s/NHFGj6HoHfm9ktfgMtvblFbvhqFun6ryJ7s6x4d8qnS\n yvi+wgocBQiv4+M7FO2kS8hV9NC1djsdCiqvCH3KHQB2fBov0gjN3QEDdtMO2514mVztntk98+x\n bgeL3XZRU8PBS4oE1LA==",
        "X-Authority-Analysis": "v=2.4 cv=UcxhjqSN c=1 sm=1 tr=0 ts=69f42281 cx=c_pps\n a=cFYjgdjTJScbgFmBucgdfQ==:117 a=asGLMfRmzhnGNxaIYohjRg==:17\n a=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=r77TgQKjGQsHNAKrUKIA:9\n a=wrwi2iGPzoTy54-3hUkA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10\n a=7HWjmwRNFuBC6MNrEPoA:9 a=B2y7HmGcmWMA:10 a=scEy_gLbYbu1JhEsrz4S:22",
        "X-Proofpoint-ORIG-GUID": "R4lEINM_S-h4hqtXyf2ogF86nykqYkNv",
        "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-05-01_01,2026-04-30_02,2025-10-01_01",
        "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n suspectscore=0 bulkscore=0 clxscore=1015 lowpriorityscore=0 malwarescore=0\n impostorscore=0 adultscore=0 spamscore=0 phishscore=0 priorityscore=1501\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2604200000 definitions=main-2605010030",
        "X-BeenThere": "gcc-patches@gcc.gnu.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>",
        "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>",
        "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>",
        "List-Post": "<mailto:gcc-patches@gcc.gnu.org>",
        "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>",
        "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>",
        "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"
    },
    "content": "Consider this test from pr109038:\n\nunsigned\nfoo (unsigned int a)\n{\n   unsigned int b = a & 0x00FFFFFF;\n   unsigned int c = ((b & 0x000000FF) << 8\n             | (b & 0x0000FF00) << 8\n             | (b & 0x00FF0000) << 8\n             | (b & 0xFF000000) >> 24);\n   return c;\n}\n\nWe currently generate something like this for rv64gcbv:\n\n         slli    a0,a0,40\n         srli    a0,a0,40\n         roriw   a0,a0,24\n         ret\n\nTwo key points.  The first two shifts clear the upper 40 bits. The roriw \nis a rotation of the low 32 bits by 24 positions with a sign extension \nfrom bit 31 into bits 32..63.\n\nSo we're going to have bit 31 defining bits 32..63 after the rotation \nand the low 8 bits will be clear.  So we can just do\n\n     slliw a0,a0,8\n\n\n\nNote that doesn't even strictly need bitmanip, though the original \nsequence did.  The mask is always going to be a consecutive run of on \nbits including bits 31..63.   The number of bits off in the mask must be \n32 - rotate count.  Put it all together and you get a nice slliw.\n\nEssentially it's a 3->1 combination, so a define_insn is sufficient.\n\nAn earlier version of this patch has been in my tester for weeks, so the \nusual testing has been performed.  But that version was meaningfully \ndifferent (left a trailing andi and was impemented as a splitter).  So I \nconsider most of that testing invalid.  This version did go through \nriscv32-elf and riscv64-elf without regressions and I'll be waiting on \nthe upstream pre-commit to render a verdict.\n\nJeff",
    "diff": "diff --git a/gcc/config/riscv/bitmanip.md b/gcc/config/riscv/bitmanip.md\nindex c9561b0b6228..30046e1fb69e 100644\n--- a/gcc/config/riscv/bitmanip.md\n+++ b/gcc/config/riscv/bitmanip.md\n@@ -1441,3 +1441,25 @@ (define_split\n   [(set (match_dup 4) (and:X (not:X (match_dup 2)) (match_dup 1)))\n    (set (match_dup 0) (xor:X (match_dup 4) (match_dup 3)))])\n \n+\n+;; This would typically be a 3 instruction sequence.  Two shifts plus\n+;; the rotate.  But with bits 32..63 defined by value in bit 31, we can\n+;; use the sign extending shifts/rotates.  And with the number of low bits\n+;; masked off by the AND matching the final shift count we can turn this mess\n+;; into simple \"w\" mode left shift.\n+(define_insn \"rotate_with_masking_to_shift\"\n+  [(set (match_operand:DI 0 \"register_operand\" \"=r\")\n+        (sign_extend:DI (and:SI (rotatert:SI (match_operand:SI 1 \"register_operand\" \"r\")\n+                                             (match_operand 2 \"const_int_operand\" \"i\"))\n+                                (match_operand 3 \"consecutive_bits_operand\" \"i\"))))]\n+  \"(TARGET_64BIT && (TARGET_ZBB || TARGET_ZBKB)\n+    && INTVAL (operands[2]) < 32\n+    && (INTVAL (operands[3]) & HOST_WIDE_INT_C (0xffffffff80000000)) == HOST_WIDE_INT_C (0xffffffff80000000)\n+    && ctz_hwi (INTVAL (operands[3])) == 32 - INTVAL (operands[2]))\"\n+{\n+  operands[2] = GEN_INT (32 - INTVAL (operands[2]));\n+  return \"slliw\\t%0,%1,%2\";\n+}\n+  [(set_attr \"type\" \"shift\")\n+   (set_attr \"mode\" \"DI\")])\n+\ndiff --git a/gcc/testsuite/gcc.target/riscv/pr109038.c b/gcc/testsuite/gcc.target/riscv/pr109038.c\nnew file mode 100644\nindex 000000000000..6a4e82673fb9\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/riscv/pr109038.c\n@@ -0,0 +1,21 @@\n+/* { dg-do compile } */\n+/* { dg-additional-options \"-march=rv64gcb_zicond -mabi=lp64d\" { target rv64 } } */\n+/* { dg-additional-options \"-march=rv32gcb_zicond -mabi=ilp32\" { target rv32 } } */\n+/* { dg-skip-if \"\" { *-*-* } { \"-O0\" \"-Og\" } } */\n+\n+unsigned\n+foo (unsigned int a)\n+{\n+  unsigned int b = a & 0x00FFFFFF;\n+  unsigned int c = ((b & 0x000000FF) << 8\n+            | (b & 0x0000FF00) << 8\n+            | (b & 0x00FF0000) << 8\n+            | (b & 0xFF000000) >> 24);\n+  return c;\n+}\n+\n+/* These don't have the trailing \"w\" so that they work for\n+   both rv32 and rv64.  */\n+/* { dg-final { scan-assembler-not \"srli\" } } */\n+/* { dg-final { scan-assembler-not \"rori\" } } */\n+/* { dg-final { scan-assembler-times \"sll\" 1 } } */\n",
    "prefixes": [
        "to-be-committed",
        "RISC-V",
        "PR",
        "tree-optimization/109038"
    ]
}