Received: (at 79374) by debbugs.gnu.org; 20 Sep 2025 18:28:41 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 20 14:28:41 2025 Received: from localhost ([127.0.0.1]:47598 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1v02K9-0005Lm-CJ for submit <at> debbugs.gnu.org; Sat, 20 Sep 2025 14:28:41 -0400 Received: from chocolate.ash.relay.mailchannels.net ([23.83.222.35]:13405) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <me@HIDDEN>) id 1v02K5-0005L1-1G for 79374 <at> debbugs.gnu.org; Sat, 20 Sep 2025 14:28:38 -0400 X-Sender-Id: hostingeremailsmtpin|x-authuser|lua@HIDDEN Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id C0A5F422826; Sat, 20 Sep 2025 18:28:34 +0000 (UTC) Received: from fr-int-smtpout26.hostinger.io (trex-blue-7.trex.outbound.svc.cluster.local [100.108.36.204]) (Authenticated sender: hostingeremailsmtpin) by relay.mailchannels.net (Postfix) with ESMTPA id CF382422466; Sat, 20 Sep 2025 18:28:32 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1758392914; a=rsa-sha256; cv=none; b=rjXOxaoFp11ZaP5004c8v86XS71osIKbzpvQageVHOqrqH5CkckDZuewr5IE+nxF20ht3s zXVS2Ze1orXYJ8SD02Hna3oWr/tFy2JgLD14tjzWhLU5sZ8ozRqDs55R0cCYi22+ucVAGD 9NOsKtUuZAB3uiNN/WgWxRr1mS4pReKE6GIXm6dzVJvZwsTZcGILPx+vdRPx1J4qbxC/d3 9h5dqQaj+d/RzxWYgqrp+fX6XdUkrxFQHk3sYJXU7t6HcuAuWCKF77mISeY+TMauQGAWPC JXFceg8+BTAz6789Xbg8IVW5MGiA1pQPHS6bN7a0oR1wfGQ4z3GgTlUH5iOP9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1758392914; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:dkim-signature; bh=UJ870OYyxybBan/qAxb3gB3oOcVlzTzESqJLPjWr4o4=; b=hmXCUJi8JZDyiepqkjbOaBG46OfWRmQDTeEhd2ikcBj+mTW0IGSie9wkOFjXAxnBGXOnpT Fgt7P15DvjaBLsiMJYcrwNaNzzSKvs516KPnjaREZWUqslooYGj4l/kBcxjkgpE1tQt+ue Em1A8czwE7O7tCetqjCuA9pT0778FBtgUQdPtlbkf1C6TkjnJbEpNwpkO7gLCVXOmwBuj5 +ktZs952ubSk2hdrMQqfBesPSbzh0rUw3fw4Ej0gJbjyluXg7aRHctbqeC1PN725tK8RGw 07xn8e9yVRuFLb7guLIbO6pBgrYfCSHgPx4mGwBUKkCzxOZomF89OnADj3Rrtw== ARC-Authentication-Results: i=1; rspamd-59b854cb4c-lplnq; auth=pass smtp.auth=hostingeremailsmtpin smtp.mailfrom=me@HIDDEN X-Sender-Id: hostingeremailsmtpin|x-authuser|lua@HIDDEN X-MC-Relay: Neutral X-MailChannels-SenderId: hostingeremailsmtpin|x-authuser|lua@HIDDEN X-MailChannels-Auth-Id: hostingeremailsmtpin X-Celery-Continue: 2233ce995c3dba0f_1758392914485_1714015281 X-MC-Loop-Signature: 1758392914485:3257163232 X-MC-Ingress-Time: 1758392914485 Received: from fr-int-smtpout26.hostinger.io (fr-int-smtpout26.hostinger.io [148.222.54.11]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.108.36.204 (trex/7.1.3); Sat, 20 Sep 2025 18:28:34 +0000 Received: from [IPV6:2804:14d:8084:9f01::1001] (unknown [IPv6:2804:14d:8084:9f01::1001]) (Authenticated sender: lua@HIDDEN) by smtp.hostinger.com (smtp.hostinger.com) with ESMTPSA id 4cTdDF2jFSz1xnJ; Sat, 20 Sep 2025 18:28:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lua.blog.br; s=hostingermail-a; t=1758392911; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references; bh=UJ870OYyxybBan/qAxb3gB3oOcVlzTzESqJLPjWr4o4=; b=jr/V9HA/yhZ097NnS1edugC0kscMVCsJlY7Z/OXGOhRA1QpVzg678JKdD/YoyxJX22F3TT tXYJuNvGfeG86JhftHm/iaqd+v98zpz0UM7tzm3aWrku4HnQz/OuPEbCxGdfY0PvhRstbS jOwxbEFx3iplthP7vjeFMRC8RTHqSFDlfq489/x9SyDhzl+quAXiRhWQsPwT6teQ2b3Zgv cTFnxN7ODRXwPCdtoODfdbtgJQG3hsWRgeKHL8L85Yp5MkXQD9osfZB12Alv5ZWXdPurFq T7z6N8l8h7dDcgdL9JmQn+iZJGHp2YZKe5OpVn7eDNc9PCEZIukguP0LElJxeg== Content-Type: multipart/mixed; boundary="------------GJN5oDb0aW0nJ7zJh0m0tAhd" Message-ID: <6565a5cb-851f-4eda-8721-7ca78e958fff@HIDDEN> MIME-Version: 1.0 User-Agent: Betterbird (Linux) Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens From: Lua Viana Reis <me@HIDDEN> To: "J.D. Smith" <jdtsmith@HIDDEN>, 79374 <at> debbugs.gnu.org, =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN> <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> <87ecsoc6cz.fsf@HIDDEN> <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> <m2o6r5vxmz.fsf@HIDDEN> <CALDnm523KVxY_UTOmRx25ETWnyUV=i-kVQh6+stU_8kecgggaQ@HIDDEN> <m2jz1tvw0y.fsf@HIDDEN> <d7802adf-79da-465d-8107-50656831c52e@HIDDEN> Content-Language: en-US, pt-BR In-Reply-To: <d7802adf-79da-465d-8107-50656831c52e@HIDDEN> Date: Sat, 20 Sep 2025 18:28:29 +0000 (UTC) X-CM-Analysis: v=2.4 cv=DJTd4DNb c=1 sm=1 tr=0 ts=68cef24f a=a7fqfHw7GlYXtyy7Q6Sjnw==:617 a=xqWC_Br6kY4A:10 a=r77TgQKjGQsHNAKrUKIA:9 a=pGLkceISAAAA:8 a=5pKtzuSfpS3vxJVUnMcA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=OK3ux8P1vIYdBQBqfCsA:9 a=1Vq_FK4TplAA:10 a=7FNYEHr8PWIA:10 X-CM-Envelope: MS4xfMbOWXwKHi2aFecp9NgKJFzPW0kAkN4IxxUsMoRtghblenLtbNXtEkXKmfoa4mJ5iNsBYkKZNFqwLH02GmZAKr9WzGK1kLPA8+dYa7p0qH+AtzWrVzw+ K+eJx78V/tjwyztnHXFRLYHkzPuqc3gjdJBlaF08N+Aaz2x+vzbGrAKAYHJAIrv+kVKopmEvEV0pXuCF8kN9q5vSLzRNy1WURe9Rje5v65QdvD1nXZOuDppx W1LlVj31L2QnnCNGGGgmHjPHDd2VfEJjCsSEGNlFqQr7WsFgTEmj6bV8zvPOCBZ5 X-AuthUser: lua@HIDDEN X-Debbugs-Envelope-To: 79374 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Reply-To: me@HIDDEN Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> This is a multi-part message in MIME format. --------------GJN5oDb0aW0nJ7zJh0m0tAhd Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Unfortunately I clicked reply again, and it seems the inline GIF is gone, so I'm sending it again as an attachment. Em 20/09/2025 15:25, Lua Viana Reis escreveu: > Indeed, my complaint was not that they interact with each other, but > that the inlay hints sometimes fail to update while the semantic > tokens are doing better. Unfortunately, I'm gen-z which means I'm > half-illiterate in this technology called e-mail, so I clicked "reply" > instead of "reply all". > > Below is the GIF I sent to João. Even if the semantic tokens are > disabled, the inlay hints do not update after the edit (but the > semantic tokens do). I did not investigate the problem that much, but > it's not specific to the Haskell LS or code actions. > > > > Em 20/09/2025 15:06, J.D. Smith escreveu: >> João Távora <joaotavora@HIDDEN> writes: >> >>> Thanks for the testing, JD. Are you using in conjunction with inlay >>> hints? Lua reported some misinteractions... >>> >> I typically disable inlay-hints unless I need them. I've re-enabled and >> haven't noticed any issues in a few minutes of testing. I'd be >> surprised they interact from a display POV, since one uses overlays and >> the other text properties. > --------------GJN5oDb0aW0nJ7zJh0m0tAhd Content-Type: image/gif; name="output-2025-09-18-01:59:02.gif" Content-Disposition: attachment; filename="output-2025-09-18-01:59:02.gif" Content-Transfer-Encoding: base64 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 VzHbxTQ15f+oC98Wq1ZloG71TerK7MelXOWxvNkKDej+rOXQvLaxfcBjTtoKnuC8PjxkTNmF +VSSpm4kztyP3MAoDr4YTuOavdl1bONyfMxycOdI/Qaofb3DDdbKPu3ODuDgzufU3ueW3OwT DuHwHOu+S9PNruflDu3XOeLGTen1bu+V54w+Dt5TqcuLxMsexRhK9lckzeQA7zZhHGXqZJLC DuoK61+rLZOvqVgTr722O7fGDee0rrF2LbuFDsELmMdgwKsPK/CuntIqDY9pjrsXT9zQvaOO zsFW++fsXtdzjbXo/qIvry4KDgc8HwfXfmnW2vHPzu2WLPPJdvRELOt2beE3z7P/OU/xHo/Q m6XzTo/0S1/ze/7mb6zoBIz1WX/vYS/2ksevD6qD+35DfhtsgHtvgosDourLxXUmkB3SHtkw dY+ieMjwX7OhA0ZcL/3caQ2ugrpinqw9nBzgtZ6tdMTrdWZZKOZoPn/BteX3neqpaJ7yqni1 LdbDBr2u7wr67mrIos+uhe/54yr5bZD6qg/0Yf6Xpt/yr/r5pR/cpN/ofRr6pH+mkNz4gf/I VjpnW67rw334o++sim+vY6/8yy94jpq+ZQ/kVCzk1yRxKCpOeXPkxRl8SE7UT+bgrr9kmKQL /AUglf+PEv/72B2vdIr7sz37t9/+jgz8jQ/yIv/rkK+//31B/nnDqSAgiCNZmqORGieLqq2g ru1Q2/dg2ueu473vJwCKfkaekFg0Koc1ZA4qLDFxQWvTiX1KrS3ZDCYek2OyMjpNOqvbsJQ7 XeWSsnYmC6+c37fR+lwQVB4eFd/fiB4doB/h0ddLnODS395RVuLjlRfjIGNg56RhlShl15Rk quoqa6vrK2ys7Cxtre0tbq7uLm+v7y9wsPAwcbHxMXKy8jJzs/MzdLT0NHV1cAN2dks2d3eD NEQ4xOxE+cRsRHrEa0K7SDu8GLy7QDzMPD2Jfcn+Oz1+tH4jBOqbhwZfglhsTBCsl6+gQYcJ ISKMOLAiQElANi7K1AOTR5CUOv969BSSVKhRmzSVTLkS0YmFrsCUiOTCpgickjIKxJjxos+H rGSWIVpT50tHJjeJmWKJjyMuTaCqLMX0FMuTUTB5EcnpDdJfRnuNtTYma8uqXZp27XgI5klT owq5TLsWK6pPUkmO3Mo3Llg4rjhW4tsW7ty/gK3K1Zq1z8uvjScnVmz2MubMmjdz7uz5M+jQ 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 ypxJs6bNmzhz6tzJs6fPn0CDCh1KtKjRo0iTKl3KtCmtZ9CcSp1KtarVq1izat3KtavXr2DD ih1LtqzZs2jTql3Ltq3bt46gwp1Lt67du3jz6t3Lt6/fv4ADCx5MuLDhw4gTK64ld7Hjx5Aj S55MubLly5gza97MubPnz6BDe24surTp06hTq17NurXr17Bjy55Nu7btvaRv697Nu7fv38CD Cx9OvLjx48iTK3+Re7nz59CjS59Ovbr169iza9/O/XDz7uDDix9Pvrz58+jTq1/Pvv3g7+7j y59Pv779+/jz69/Pvz9s+P4FKOCA/wQWaOCBCCao4IIMNgggJBNEOEGDFFZo4YUYZqjhhhx2 6OGHND34iIQTgmjiiSimqOKKLLbo4oswGieiIyTGaOONOOao44489ujjj0AKM2MjNQZp5JFI Jqnkkkw26eST9A3JSJFQVmnllVhmqeWWXHbpJVtSLkLll2SWaeaZaKap5ppstnlDmIqM6eac dNZp55145qnnnuzBGYecoCzE56CEFmrooYgmquiiNyzj6DHKLJOLn2cA+omgjGaq6aacdurp p6B6+KijMYw66TOYWOoJpqG26uqrsMYq66y0+jaqpC/ceqozqUpYCqu1BivssMQWa+yxyJLF jBGk8kLpEf+qdgJsstRWa+212Gar7balLNsopL48a0S0nEzL7bnopqvuuuy2+6m3MuDai7g3 kLuJue7mq+++/Pbr7788wlsquOGieom9R+ArAKuYLsSQDA6/EPHCE0usMMAYZ6zxxhx37HFp ycjrgsDNGGwJwkYozDAVFDv8cAsus5xCxDG/jELNNn+s88489+zzz0CHdSvBKJBcMq8H+xqJ yjK3jHPOJjyds9RNnyB10FhnrfXWXHft9S1DE21CyCLfQu8MKN/AdBVRV1xx202bGzPcU6/M 9td456333nz3vbfIAofdwK5Rnaw0JCtbHfe0jFft9MxvO9743X5XbvnlmGeuebX/gYst+OBm m1xJ2jMkTrfilJ+OOtSTp66Q6xdvLvvstNdu++11wlu20bCcLQPpEMvc8OKwV0116rGv/jTu zDfv/PPQR9+j7mKPXX0svscAfPAPD2+z3MYfD7nrr18t/fnop6/++uzrRz3oKfDuSvYwbB+D oPiHXzzlx9dNPszia58AB0jAAhrwgMN538iu1zvRUcJ+MOjfzRz3uNUljILlQ6AGN8jBDnrw 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 mxR+awqZu7eX27WAiwSb2wiHiwuduxWRC5Fqm7qiAqnK2bb3uK4mMLewILsoQLtV4bUIwbeg G7phS7GVOwOjOxClK7yIqxWOG7y9W7xIO7x9cbpoy4JQawuT+7uLy7xDgbelcLTTa708gbxF i71/i7vSy71V4byoq7roiyHj6adpqqawKwC22wrxC78y6xWVS7iE+73/ZUu9ccC/Z+C/iUu+ eRG5ABy+rmG+zyuLBNsL26u8mFDA3Yux+QsKEIy5Aky5ijvB/XvBslDBS4HA55u+IswgAApz 2PW2ijC/qzC/Kny7zCuyMHy5Hry1HHwDM7zBDty8pnfD/1vDm2GxG1uypDu8PKwIRVwTMZzD m3DEQuG/X+vDuyu5UKwUQCzEI3zF91HCc9q+Y4fCcdDCqcDC9dsVDZy3+yvDU2zG1avExMsV VoyFO5zGPczGTfHGrgDCCVyIdvyCVUvDdLy8f+wTTLzGNbHHRuDEciwDg3wKi1xcC1wLeBzC WDzJAqLFcrqyk9CyMRsDdTvGtSuzm8zJDxu7/54Ms6UMA6P8AqkcyjRRxrkbxbDsx3TcyBgc yFHAuJ+LAkLLuLUMwBq8u7/MCZGsCNrmywmBy+Kry7cczAVxyNSrt6EwzDbMs76byDrJcTj5 yJcgzcBLxKXLy7uswU+svNCszNQczL2MzlOrzvrrwB4MzsfMzvzbzIqsvda8kH08zYFsxALs yrnrzvFMtbn8Cdxcz/q7zvusx3BMyQwdICEqoyacoV58BhDbyXZryhZ90XSrsBatynVLvxrd AmDc0SJd0R/dyt5MzhmMxgBNz+bMu4tgzE2guwgN0zdbzjVNvjT90jgtzAWtwN1sywex0+mM 0zft0jw9yz1d1LycCf+32LvpHNUv+MYI/NPmZshqPLXmzLlce9RYm8SIm8wIzdRmTNQ5zcw9 DcEwXctMHdZindT1nLO0rMdY7cdHMNcHrc92zdXj3NZ8jdSd8NSQMNRefc/SbNUNndjhwboM ep+cSgoIm9GnLNkhDdIZ7bCULcqVXdIk/cmZPQlBrM0xndJZPdaxDMyAPdCMINM2/dZt3dVN 3c6A/dp4Tdd17ZB67czge9aprdqyzca7zduxvc2CLbqHm9C47ciiHb1TzdxZvcxu3dpv7bHi PN2uTdsqbda0vbdzTNS+7du/HdfB7dOIzd26jdy5HdTFO8Hj/d3XTd7O/dfa7YXmptj2bR// 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 +7PP8K1/8a9P+7mv+7vP+4Jt+8+O8Qut8b1P/MVv/Mdfvb+f+cF/5MOP/M8P/dEv/W+q/Amt +cLP+dOv/dvP/d0vmNVf5Nff/Nnv/eVv/ueP/i4J/owu/o7u/OkP//Ev///z74/rL/ftT/fv T//7z/8gIIgjWZonmqor27ovHMszXds3nus73/s/MCgcEovGIzKpXDKbzic0Kp1Sq9YrNquV QboQ4CQ8AUbKESAlTdmy2zID3HCKy932Oz6v3/P7/j9goOAgYaHhIWKi4iJjo+MjZKTkJGWl 5SVmpuYmZ6dnlNfXj9jYj9nZj9raZwmC64srQlBsDx3cnC0rzABvL5avbrDwMHGx8TFysvIy c7PzM3S09DR1tfU1drZ2TkN3N4p3ePhdKJgYmRmaWk9su7usyTs8++sMrcv9T76ObV1J/7Ne wKwM3GbwIMKEChcybOjwIcSIEidSrGjxIsaMGgn/ift2oqM4cl7MhUFXRl0aevLaxVs5T8c+ GDFVzNxRswadFjmbCeT1y+fGoEKHEi1q9CjSpEqXMm3q9CnUqFKbgWwArqpHN+VGnTOVLtU6 Hi5Zkhj7MsdNFmlbnhVbj98tF3GiFaRSdyrevHr38u3r9y/gwIIHEy5s+DDCkCu8/dnqg5RJ VD5UqYT1VgRZtJllXl6x9sbnGHPlxg0IlOBpxKpXs27t+jXs2LJn065t+zZuLIxb7O7juAdk ryfBpnTbFkXN0JaVs10+q/ON0TpLO7srxXru7Nq3c+/u/Tv48OLHky9vPsY43ln5/OYR3Mcp lKtsQkde34c7e/dPMNd//xwndStIt8QGGwiCHRQInrcggw06+CCEEUo4IYUVWnihDr2xoOEe 7e3wXg/xETcfTPu1YmKJsnyWnwA3sbjWZvbd0990/rAwoBIFFgiEQCL0xEKPLShIwo8q9DRk kUNiuCSTTTr5JJRRSjkllVVaydF6i32THh4e6gAiDyJOFhZ9//GHIg60wPhOi/XJ0+Z/K6Xw Jo03BqgCjknouKMPPR45QAp/ArqCkoIOaoKhqRF5pABKXvkopJFKOimllVp6KaaZMsWhllV1 ORJXJQknWQ+UGbecmZqpuJ9ZbbV6ppxsucRDninUisSefO6QqHWJEqooor4Ga+gJvB6qKbLJ Kv+7LLPNOvsstNFKCwRjil2FlUhdkFQKfF+NWVyZscqaag35uHgZi2WhGyOcLyW3bp143orL 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 2i236/2Cw0YIGQKcoCfACDsCpMApQAldAqzgK+I9v+//AwYKDhIWGh4iJiouMjY6PkJGSk5S VlpeYmZqbnJ2en6ChoqO3pSZ/aSp/bS5/cTJ/dTZ/eTpbSbg0uAmkIrs9gL75lLt/gYa3wwo L2MxBz9DR0tPU1dbX2Nna29zd3t/g4eLj5OLNZyjp6OnqO+ZnqWttb3FzdXd5fnx8iDDFO8v 6ZdFYLkdBEccDJKwyT+Afxb/wljmzMrEghYvYsyocSPHjh4/ggwpciTJkiZPllOn8tyJlSzB vEMVb9U8V/Vi3aOVj88wgz39FWP4c+BQlCcWQvSRVElDQUtbSFTWTKrRqlavYs2qdSvXrl6/ gg0rdizZTi7blTj70ktMH6nksaEHxx4dfHh4Fr3x9GjeI3uf/C0Z1MRgI4GRHCbqEEdFKo3L Qo4seTLlypYvY86seTPnzp5NrEu7VkRotmXgoYHbyscrurN81MK7GEfiKbWZ9r1amMRuIrd9 5w7z+8RjKcU/I0+ufDnz5s6fQ48ufTp1k+lEN2g5ekvbHm9pxrU5F2ddnXf3DOc7+0t6w8Gr /isR/9/ve6Hr0dePSJXi/ur+/wMYoIADEliggQcimKBkpY3AYIPbadEdD9/5wIpcsPggi122 iNGefPlh4SFw9+nW23zukQgYiFyIKMJxULyooIwz0lijjTfimKOOO/LIo4OkQSjAj1lIuAOF PVgoHoY9aGgeh7Ttg0xCDfVF5YkoXMnbMFl+2FuXwiR1Yj+1cdllmVoaA5GXCKW5JptnVrFl T1NSiaWcBzUFJkFW2rmeQG0+5SaUKQJaZaEp6snCfC0KECMJUa0QlaOQNtqfCRKlgGmlMUo6 QI+fghqqqKOSWqqpp6KaKhJDshokFkXqcCQPSbJ2U4Y5wbZTDrnEx6WVe//+mtuvhPFap3pq Fpunmb3+dNiwxxpLLLP38SktL9GiWS1RAkxbVLCz/YKtnnNm+a206n0p7rKMgqlCuMpmyy28 6wrbFKOObiopCp1qeqm+x/FLHDOdCsyvp6oinLDCCzPcsMMPQxwxR0MKGSTFV8Cag6w70NpD a+S91kNsOnxrYrDWaksvsCdDS6i5KKcc2Msq4zlztvPKa/O46hJT8lA65/zsmzkT/SfLaKJ7 M89B46xXcCXDzPPRSjddw6QGH1wC1lk/unXBBGu9Ndcuei2x2Wejnbbaa7Pdtttv00Bxq9mZ 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 VXL/Ln48+fLmz6NPr/9+Pfv27nMKHylZqvGqyLEqt039PX9KiSCB1h944QlYoIEHIpigggsy 2KCDD0IYoYQTUlihM/GJNN9IlNknRHJHWBhiZ5lkIqJC+5mYooorstiiiy/CGKOMM9JYo403 toNhSBqKxOFIluEHIo5DbkWiQ0QmQyCSSzLZpJNPQhmllFNSWaWVV7qnY0Q8huSjSECOhBmW Y7JkpJQokpmmmmuy2aabb8IZp5xz0mmelgpxGZGXIYEpkph1AhqooIMSWqihhyKaqKKLMtro kHe2k6dCe0bUZ0h/Opqpppty2qmnn4Iaqqijklqqqaeimqqqq7LaqquvwhqrrLPSWqutt+L/ mquuu/Laq6+/AhussMMSW6yxxyKbrLLLMtuss89CG62001JbrbXXYputttty262334Ibrrjj kluuueeim66667LbrrvvwhuvvPPSW6+99+Kbr7778tuvv/8CHLDAAxNcsMEHI5ywwjaNIAIN DZOwsMQTU1yxxRdjnLHGVkLcMAsdj7CxyCOTXLLJJ6OcssqOgexxCi2HvLLMM9Ncs80345yz zijEbELPJ/wsQNA7E1200UcjnbTSSzs7tNAOAw01z1IzXbXVV2OdtdZbc62m00F/TXXXY5Nd ttlno5222s2FHbHPYpfg9Npz01233XfjnbfeN4ENd9t7Ax644IMT/1644WS7/LTfcCt+uOOP Qx655JNT7q/HiUftduaVc96555+DHrrowELcQt+Mj5666quz3rrrr3Pc8ccwow677bfjnrvu u/NOHsyz/9678MMTX7zxxyNvV+KYv3x57clDH73001NfvfUPiy33Ctpf373334MfvviQ/429 5uOjn77667Pf/tHlv8C9+/PTX7/99+NvL/ymy5+///8DMIACHCCx9gc8AiIwgQpcIAMbCKrT xY95DpwgBStowQticEi0O9/bZJfBD4IwhCIcIQnbEzwVgKyEKlwhC1vowheyTIJT6x8Ma2jD G+IwhzrcIQ976MMfAjGIQhwiEYtoxCMiMf+JSlwiE5voxCdCMYpSnCIVq2jFK2Ixi1rcIhe7 6MUvgjGMYhwjGctoxjOiMY1qXCMb2+jGN8IxjnKcIx3raMc74jGPetwjH/voxz8CMpCCHCQh C2nIQyIykYpcJCMb6chHQjKSkpwkJStpyUtiMpOa3CQnO5kbJaELlJ4cJSlLyZeJ7CQjReDG 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 hvYauceLvOkGucn7pFj7DMJXpcGznv3pnv45rns6iwELvMZ7lK45u/wJn33bmZSpuf8IdrTk Kraqi65yG6cVO6djq6qDSzu3w5r7Gb9YiqexuQVnqDr0C5/2e76FWzfCG6CE9bSvy7wJrMCq trwLjKB+ta18p2aXeyyNWUzaKaKcu5fteb8p25cUu7gaWqjI+XsU2pq1W8GOecIFC74tnKuc 6b/kS6v5h8ACzMEdLLP4y5gkDJ2tmbpG45cHy72sm8PVq4tDM8KPubqgcLhiqXkLtKgOLMVT 7GwNTMVrqU97lcVaC3YU3LU4mZO+Op+gSq/DxLkrCcLuy6bU2K5dCa9G25RvDMTWmKzlmqo6 w774CnskK8e547A4qZIMK8jae8Qt5nZ1HMc8KZOKLMRGKrH/s0lZB1JYKJDHV2zJl8xoVozJ Hql69dXJksc1Xiy94ziJWTmTsdu/77iUn4vGlFzJANmQbZqOpSzLqCyQazzGW0rHMnnKxMSA r4wnewywt1ywddzLvmy+4HjH40uqvTd5i6yQO6KTpIzLhLyssgnJXxlgbDdearzJ3wzOeKbJ 4XyR92VeU/pPovyttji/u0WI15uNt4S6txRDwNyIqeyKMBmQb3vPkHmK+KnKYFzIQbl8fyFI c1nMvMzOm1iJ8viubWzNoKu4SGfMA21bJ9nPDG2hqfBfk4x8z5p2FknOI03SkDbOJY3SbqhB NbyFHQTMePbSGxTTKU3TNd1hJ23T/zmdRxjE0i3NQT1dZ0BdOkKt00Vt1CeF00dd1CFsMjMd k41cMkwtaVItQlSt1FeN1SiV1FnN1Zzj1E8tpF0t1mNN1gK31WWN1iRD1KSAhmnt1m8N1752 1nFN1yjV1nWN13mt1yY9envt1611138t2INN2FU214WN2Imt2IvN2GV52I0N2ZEt2ZNN2dX3 2JWN2Zmt2ZvN2TF32Z0N2qEt2qNN2mbd16WN2qmt2qvN2vb22a0N27Et27NN24/22rWN27mt 27vN2yR2270N3MEt3MNN3KT028WN3Mmt3MvN3Ctz3M2N1Wu4ORkG3dVt3dd9As+N3fSWd58M OpsX0rXwi/+tMN6r4FGhtd3prd7Drd3rbW6od0/Z9zkDNJuyULwcXd6pcN7o7d797d+y3d7/ DW7Xl3ry7Tn6M7GxIN31l9+ocEkUJOARLuGlHeATvm0EKKVmFDoAKhbcjHb3bXwN7lkfZeEl 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 6pAq67Iya7M6K+k5qZJGa6AOmmI6aZKu6bXWp35qKoh66og+Z4eK6SJCZoFGKq6a6UbGqree 65bq6LgmK6TdJ7VGWvkR4Xxq66Gx6ZsW4r7W2pxaWp2q551WWp5eGmgWGsLSJ71SGjcO6qXl p0Dq5buCaX/G62JW6i7yZrte5a0Ko8XeqqyuoYiO6j9+LJXepqSm7KmirK9WLKqmqstaasl+ Jcmi/+tU7iJX0qykwmrOUmSo5ihPxqWqmhqwBusEFmOAlqnS4ubFPuvTQm3USu3Uhl2+Gqm2 biuSZm22XuvVWm1w2qy7TurJEqvOlmyuhumqhmqpnivZdqzNfqvYji2snppTMuyjYa2aYq2+ uqm0fi2tAWylaSb4AYDAHqzC6ul7Km6fNuzDLprdVuvddlrEImIHUmzZWuyy8efMhujLeu7n TihvdulCGmesYqBG8mixWu6hliq8DmSViq7a0urKwmza2q6ojq7HbiCIdq7q8ijpduXaWuoX ciHu4lpCSikN5maUIudOHG2Nyibm9ifoGi/VWu/1Ym/2aq/U3WMkdm+cIv8maTKs4yoi8Poq 63Ju2sIu6XKoeKalW5qlyvZur94u5k4sogovTaKp5DbavXaf+G5rTQrw9/KvDhouneYgZh5w wSLu4Y4fZzawn5IvvwqqvRawplFu+Zqs0tav2CJg6QpoB8tsLk5v+touq6ru6b5sE2bq7NYu uPKuCYNsDJutzCbvBrtwy+ZuuKJv9Z4t+9bwlmblxsow9aImZMKvSoJqxbam0T7v5UmkCIdw +25vFVvxFWNxFp+c986r3t7tAGftTE4wSZoqFdcv/Trh0KpwbY5nCo8wG6/w9cXv7eZmzKaa 3W5tve4vnBYwGGMr33pxHpda4FKaAicwwVKaweL/6Q9CMOMC6gU72v9asCB7WgaTcRIjqxGP 6LGxaNlOsdpGcYV2svRqMimH6Sf7sB1f5cjSsBC7roN26upeKQsTrQ7P8P2K686uYYS6svya cCsbKgmzrTDTJvMWbV0+sV3ipBzLsirrshZDczRL8zRT8705bBcH8BePb6CKMSS3Mcu6sQgX My2/cZbmLyiH8xOeMjPnMPXSrzOjWt9aGh4n6ZJusyBfMyWTGiIL7iGD3wIzsCZu5gMzsiM/ sidOcr96M8QW6lk6J/GWsgcHo6d+cixnLNmOckZbaTq3KCoXcQkTcy3D5iyHbCp3MAuTtEiD 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 RR6LbLLKLstss84+C2200k5LbbWmuZbakko2ySS2c3ibC6EXFovfPOaSekekzKUa5quWtgsQ pemyu2WjQGmW5nVvwulQddRp4yd5uNC53UaziHdwSbOA64rAtqBnbcSDyripp/BabNywGWNc IcXteSwxZruOTDKKwJ6MsmAhr8xyyy6/DHPMMs9Mc80234wzkvvyu3POPv8MdNDFQCx00QVy 3DHS/miccS0gr2ojvUZLU3LVViuSctZaZzJ1115/DXbYYo9Ndtlmn+21TA6jzXbbbidL9Ns1 P/2f00wnbbfSfdD/PQ0WUssNzNWCD7514YYDjnjiii/OeOOOPw555M2q7afkll+O+TBxZ855 5xdr6vktg49eteGmZx166qqvznrrrr8Oe+xAesuw7Lbf3vjmuO+e+Ia8A0J68LueTjywvx+P fPLKL898886L7ebz0k9Ps+7UX3+zl9iXIHz3JxYPPovbj09++eafj3766qcS/fruv0+j9fDP j2yt43uP/1/h728Y/f7/D8AACnCABKRZkgqIwAQmQ34KbKADI5O/CO6FfxRU2QMviMEManCD HOygBz8IQmEwMIQkLKErJIhCR1RwhZ0woQtfCMMYynCGNKyhDdmWwhzqcIc87KEPfwjE/yAK cYhELKIRj4jEJCpxiUxsohOfCMUoSnGKVKyiFa+IxSxqcYtc7KIXvwjGMIpxjGQsoxnPiMY0 qnGNbGyjG98IxzjKcY50rKMd74jHPOpxj3zsox//CMhACnKQhCykIQ+JyEQqcpGMbKQjHwnJ SEpykpSspCUviclManKTnOykJz8JylCKcpSkLKUpT4nKVKpylaxspStfCctYynKWtKylLW+J y1zqcpe87KUvfwnMYApzmMQspjGPicxkKnOZzGymM58JzWhKc5rUrKY1r4nNbGpzm9zspje/ Cc5winOc5CynOc+JznSqc53sbKc73wnPeMpznvSspz3vic986v9zn/zspz//CdCACnSgBC2o QQ+K0IQqdKEMbahDHwrRiEp0ohStqEUvitGManSjHO2oRz8K0pCKdKQkLalJT4rSlKp0pSxt qUtfCtOYynSmNK2pTW+K05zqdKc87alPfwrUoAp1qEQtqlGPitSkKnWpTG2qU58K1ahKdapU rapVr4rVrGp1q1ztqle/CtawinWsZC2rWc+K1rSqda1sbatb3wrXuMp1rnStq13vite86nWv fO2rX/8K2MAKdrCELaxhD4vYxCp2sYxtrGMfC9nISnaylK2sZS+L2cxqdrOc7axnPwva0Ip2 tKQtrWlPi9rUqna1rG2ta18L29jKdraytK2tbW+L29zqdre87a1vfwvc4Ap3uMQtrnGPi9zk Kne5zG2uc58L3ehKd7rUra51r4vd7Gp3u9ztrne/C97wine85C2vec+L3vSqd73sba973wvf +Mp3vvStr33vi9/86ne//O2vf/8L4AALeMAELrCBD4zgBCt4wQxusIMfDOEIS3jCFK6whS+M 4QxreMMc7rCHPwziEIt4xCQusYlPjOIUq3jFLG6xi18M4xjLGL4hAAAh+QQFJQAFACwDAMcD 7AapBAAE/7DISau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94ru987//AoEQgEBqPyKRyyWw6 n9CodEqtWq/YrHbL7Xq/WCJ4TC6bz+i0es1uu9/wuHxOr+PE9rx+z+/7/4CBgoOEhYaHfEWI i4yNjo+QkZKTlJWWl3aKmJucnZ6foKGio6SlpnenqaqrrK2ur7CxsrMpmrS3uLm6u7y9vr/A thfCFcQbxsDJysvMzc7P0NFNyBTG1BrX0trb3N3e3+Dho9kY5OXi6Onq6+zt7u9VwtnWHebw 9/j5+vv8/dC25JAF9EewoMGDCBMqhKRp4LljCyNKnEixosWLSuwNMaERo8ePIP9DihzZr2NH CydJqlzJsqXLl65McoRJs6bNmzhzLpJZIqXOn0CDCh1K9AdPEj6LKl3KtKlTpkdHJH1KtarV q1glnpw6NavXr2DDio22tefYs2jTql2rK6XGrmzjyp1Lt64fn/bg2t3Lt6/fv/HMQgRMuLDh w4gTK17MuLHjx5AjS55MubLly5gza97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7bt 27hz697Nmw+B38CDCwf+hojx48iP917OvHnl4dCFF09OXbnz69izE47OncD06tW1ix9PXm33 6N/BJy/Pvr37p+ehp1dv/b39+/hrxh8+nz6e/AAGKCD/RvtJ54Z/6w2o4IIM0oJABwg86EKB wfXnX096NajhhhxeIeEJ1ET4AoXEHYhgfSL81+GKLLbIxYczYSDihCR6Z+KJKoaQo4s89uij EjCGECQHQ5pQo41t4GhcLT826eSTORQJg5QkHGkhfUxCqeWWXKJApQtfimDljThm2eWZaKZ5 QZgssAnCmEkqmWGGatZpp4BuUjCjCHlO8CWcbBg3wKADEEHooChOUNadjDbaY58S7CnkB2wC uoaghApwaKY54uXop6BuCGkBkoKQp5uWqoHppqyqmBSdocYqK26j6jkpkWtakGoax226aqEN DVPPrMQWW16tft66gZRB7opG/6+crvqfQBzAauy12JaGbKTKZkBlszWmF214BVDjULboplvb tqR2K+MHzp4BLbDgbSSYuvjmyxq7o7LZZ7xmzItluTHqa/DBo/Hrbq4eAFyGwOrZixTCFFfM mcKm4tpwuGSOS53EUlks8siTYUypxh04TAbE9RJ8L8kwx3yYyR74Cy/HcRqKaMQuTyzzz0D3 RTOERKeMc6DS8txzikE37XRcQ6OsQZ4qj8EyuUvr+PTWXIcFab8joHr0pUm3DPJgXaet9lVf L1wzB1WDcfXH1Xhg7dp45w1S2xmX8OfYqpaNdd1o62344ZvF/YWcdyPu+OONKe4F45BXbnlo kndB+f/lnHd+WeZcbO756KRHDjivcpau+uqGgb6F6KzHLvtcrmsB++y45y5W7VncrvvvwFPF exipB2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy3 7/778Mcv//z012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIygBCdIwQpa 8IIYzKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe +vCHQAyiEIdIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFrfIxS7/evGLYAyjGMdI xjKa8YxoTKMa18jGNrrxjXCMoxznSMc62vGOeMyjHvfIxz768Y+ADKQgB0nIQhrykIhMpCIX ychGOvKRkIykJCdJyUpa8pKYzKQmN8nJTnryk6AMpShHScpSmvKUqEylKlfJyla68pWwjKUs Z0nLWtrylrjMpS53ycte+vKXwAymMIdJzGIa85jITKYyl8nMZjrzmdCMpjSnSc1qWvOa2Mym NrfJzW5685vgDKc4x0nOcprznOhMpzrXyc52uvOd8IynPOdJz3ra8574zKc+98nPfvrznwAN qEAHStCCGvSgCE2oQhfK0IY69KEQjahEJ0rRilr0/6IYzahGN8rRjnr0oyANqUhHStKSmvSk KE2pSlfK0pa69KUwjalMZ0rTmtr0pjjNqU53ytOe+vSnQA2qUIdK1KIa9ahITapSl8rUpjr1 qVCNqlSnStWqWvWqWM2qVrfK1a569atgDatYx0rWspr1rGhNq1rXyta2uvWtcI2rXOdK17ra 9a54zate98rXvvr1r4ANrGAHS9jCGvawiE2sYhfL2MY69rGQjaxkJ0vZylr2spjNrGY3y9nO evazoA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM2tbnfL29769rfADa5whyur HRHXoMY9LkGTq1zkNlehjf977jqjK910Ure6vpwHNrSGXW6ei3Dc7a42PRUy8W5THoVT1LDM O17wZoBa6WVvNYMVX/XWV77SjArT8HtN/YaXv9T0LwiuC+BaCvgDBC7wLA9sNwUHeMAFczA0 F1VeCU/4vxi2MDPdgmANz7fC9/Xwhl/2EBGb+MQoTrGKV8ziFrv4xTCOsYxnTOMa2/jGOM6x jnfM4x77+MdADrKQh0zkIhv5yEhOspKXzOQmO/nJUI6ylKdM5Spb+cpYzrKWt8zlLnv5y2AO s5jHTOYym/nMaE6zmtfM5ja7+c1wjrOc50znOtv5znjOs573zOc++/nPgA60oAdN6EIb+tCI TrT/ohfN6EY7+tGQjrSkJ03pSlv60pjOtKY3zelOe/rToA61qEdN6lKb+tSoTrWqV83qVrv6 1bCOtaxnTeta2/rWuM61rnfN6177+tfADrawh03sYhv72MhOtrKXzexmO/vZ0I62tKdN7Wpb +9rYzra2t83tbnv72+AOt7jHTe5ym/vc6E63utfN7na7+93wjre8503vetv73vjOt773ze9+ +/vfAA+4wAdO8IIb/OAIT7jCF87whjv84RCPuMQnTvGKW/ziGM+4xjfO8Y57/OMgD7nIR07y kpv85ChPucpXzvKWu/zlMI+5zGdO85rb/OY4z7nOd87znvv850APutCH/070ohv96EhPutKX zvSmO/3pUI+61KdO9apb/epYz7rWt871rnv962APu9jHTvaym/3saE+72tfO9ra7/e1wj7vc 5073utv97njPu973zve++/3vgA+84AdP+MIb/vCIT7ziF8/4xjv+8ZCPvOQnT/nKW/7ymM+8 5jfP+c57/vOgD73oR0/60pv+9KhPvepXz/rWu/71sI+97GdP+9rb/va4z73ud8/73vv+98AP vvCHT/ziG//4yE++8pfP/OY7//nQj770p0/96lv/+tjPvva3z/3ue//74A+/+MdP/vKb//zo T7/618/+9rv//fCPv/znT//62//++M+//vfP///++///ABiAAjiABFiABniACJiACriADNiA DviAEBiBEjiBFFiBFniBGJiBGriBHNiBHviBIBiCIjiCJFiCJniCKJiCKriCLNiCLviCMBiD MjiDNFiDNniDOJiDOriDPNiDPviDQBiEQjiERFiERniESJiESriETNiETviEUBiFUjiFVFiF VniFWJiFWriFXNiFXviFYBiGYjiGZFiGZniGaJiGariGbNiGbviGcBiHcjiHdFiHdniHeJiH eriHfNiHfviHgBiIgjiIhFiIhniIiJiIiriIjNiIjviIkBiJkjiJlFiJlniJmJiJmriJnNiJ nviJoBiKojiKpFiKpnj/iqiYiqq4iqzYiq74irAYi7I4i7RYi7Z4i7iYi7q4i7zYi774i8AY jMI4jMRYjMZ4jMiYjMq4jMzYjM74jNAYjdI4jdRYjdZ4jdiYjdq4jdzYjd74jeAYjuI4juRY juZ4juiYjuq4juzYju74jvAYj/I4j/RYj/Z4j/iYj/q4j/zYj/74jwAZkAI5kARZkAZ5kAiZ kAq5kAzZkA75kBAZkRI5kRRZkRZ5kRiZkRq5kRzZkR75kSAZkiI5kiRZkiZ5kiiZkiq5kizZ ki75kjAZkzI5kzRZkzZ5kziZkzq5kzzZkz75k0AZlEI5lERZlEZ5lEiZlEq5lEzZlE75lFAZ /5VSOZVUWZVWeZVYmZVauZVc2ZVe+ZVgGZZiOZZkWZZmeZZomZZquZZs2ZZu+ZZwGZdyOZd0 WZd2eZd4mZd6uZd82Zd++ZeAGZiCOZiEWZiGeZiImZiKuZiM2ZiO+ZiQGZmSOZmUWZmWeZmY mZmauZmc2Zme+ZmgGZqiOZqkWZqmeZqomZqquZqs2Zqu+ZqwGZuyOZu0WZu2eZu4mZu6uZu8 2Zu++ZvAGZzCOZzEWZzGeZzImZzKuZzM2ZzO+ZzQGZ3SOZ3UWZ3WeZ3YmZ3auZ3c2Z3e+Z3g GZ7iOZ7kWZ7meZ7omZ7quZ7s2Z7u+Z7wGZ/y+UUAUJ/1KQEBsAH5if+fD2mf9kkBAIAB+1kB A6qQ/hmgAHoBBUqgC+mfBRAAELqf98mgBYCgFcqfBnqfERqhFWqhGOqhF/qgGQoAG/qg+Tmh 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 6Ej+yOWN46bu1clt7GVu7Vn8ylhMw8D87R3s7jdO5PFu2a7u7WW87eXO7T8s7L2O6M+e1Iat 6+S98IGu4u596YSO5Xq+ubye1WDO482O7zV+2T4M2+Eu7RgO7OE67l198P5u4v1dvDAf8zKf wXE+8zYvwS9/8zq/8zy/qw7e8zGPsEA/9ERf9IVu9EjPqUKfc/RM3/Q8//NOX7BLH/VUX/Uk C/VWD7BTn/Vc3/X7ivVef7A5H/ZkX/bzCvZmL69bn/Zs3/Zu//bCuvZwP/d0X/d2b6qMk/d6 v/d83/d+//eAH/iCP/iEX/iGf/iIn/iKv/iM3/iO//iQH/mSP/mUX/l9HwEAIfkEBSwACgAs BgDHA+kGqQQABP9QyUmrvTjrzbv/YCiOZGmeaKqubOu+cCzPdG3feK7vfO//QGAiESwaj8ik cslsOp/QqHRKrVqv2Kx2y+16v6EheEwum8/otHrNbrvf8Lh8Tq/XxPa8fs/v+/+AgYKDhIWG h3lEiIuMjY6PkJGSk5SVlpdzipibnJ2en6ChoqOkpaZ3p6mqq6ytrq+wsbKzJpq0t7i5uru8 vb6/vbYXCQLFxsfCHMnAzM3Oz9DR0tPUS8sVxMfF1xvc1d/g4eLj5OXmod4Z6ern7e7v8PHy 8/RSQ/d47BbrCvz1/wADChxIsCA0fPn07VNmsKHDhxAjSpzYCKG2iwK4rfNHsaPHjyD/Q4oc aYNjv1okU6pcybKly48mTS58SbOmzZs4cwYDIRObzp9AgwodStRQTJRFkypdyrSpUyhHS/R8 SrWq1atYqUYlMTWr169gw4qlKLPrybFo06pdy3ZeWalt48qdS7furZ4czdrdy7ev3798pvrT C7iw4cOIE08xu1Gx48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ue Tbu27du4c+vezbu379/AgwsfTry48S0Ykytfzry58+fQlROYTr26derHs2vfzjm69+/gw3+/ Tt469/Po0ycWz769+/Hl46ufT79+3Pf48+svFl++/f8ABljV/34EFghff9cJqOCCDP5k4IMQ Sodggg1WaOGFIkWo4YYTUojhhyCGCIsAHRTzwndvdGideAMMIOKLMMboBokoIMDcid6lqCJ1 LLoo449ABolcCjYuh2N0Ou5IQI9CNunkk0zQOIKUHlCJAopuKDndez5C6eWXYNJgpQxjmoBl G1ou6V6XYbbp5ptT3lBmCWeykSaXcOap554WzHkiC3WuceeafBZqaJt+YmBinCAkGqga0xUg qaSRTkrplhex2YGmh3bqaYyJXrCoCKFSUOqjaVQ6KQGWWoqpMZxu+umstIZYagWjhnCrArei ioaqrQb7qgCxylrrscgquKuoupbILP+uOWYJ7KqsUgvrBcVWkG2y3HZ73LJ9NsvBnFb6egZ1 wqJ76bXYcrCtt/DG2xu4uIqrgZ/lRovmtP0Vk+27CgAs78AEy0avqfZmsKy5Zqh7aXz+miBw wRRXjNrBE9B76gcMl+FwAQhGXMLEFpdssmcYS6DxuBzrayewIRMr8ck01zxayrwmrGjLSEpb 7cPliUwCyTYXbTRiOK+8wcIuCwpzvzKPfPTUVEeWtM7Pltg0pE9DHPXQVYctdmFXN+qs1j3v +zPIUH8tAtFjxy13VmVzfPa4W6faddBCvz3334CjBa7SWIua9697k3cMyXAH7vjjRA1e+N0K H35u4tdpM3H/45B37rlNkptN572WN4z5ipm6+/nqrJfWMRlpti777LG9PkbstOeu+2m2g4H7 7sAH31nvX/wu/PHIT0a8F8Yn7/zzhi3fRfPQV289XdJzQf313Hc/1obgP7i99+SXP2D46Os3 vvnst+/++/DHL//89Ndv//3456///vz37///AAygAAdIwAIa8IAITKACF8jABjrwgRCMoAQn SMEKWvCCGMygBjfIwQ568IMgDKEIR0jCEprwhChMoQpXyMIWuvCFMIyhDGdIwxra8IY4zKEO d8jDHvrwh0AMohCHSMQiGvGISEyiEpfIxCY68YlQjKIUp0jFKlrxiljMoha3yMUu/3rxi2AM oxjHSMYymvGMaEyjGtfIxja68Y1wjKMc50jHOtrxjnjMox73yMc++vGPgAykIAdJyEIa8pCI TKQiF8nIRjrykZCMpCQnSclKWvKSmMykJjfJyU568pOgDKUoR0nKUprylKhMpSpXycpWuvKV sIylLGdJy1ra8pa4zKUud8nLXvryl8AMpjCHScxiGvOYyEymMpfJzGY685nQjKY0p0nNalrz mtjMpja3yc1uevOb4AynOMdJznKa85zoTKc618nOdrrznfCMpzznSc962vOe+MynPvfJz376 858ADahAB0rQghr0oAhNqEIXytCGOvShEI2oRCdK0Ypa9P+iGM2oRjfK0Y569KMgDalIR0rS kpr0pChNqUpXytKWuvSlMI2pTGdK05ra9KY4zalOd8rTnvr0p0ANqlCHStSiGvWoSE2qUpfK 1KY69alQjapUp0rVqlr1qljNqla3ytWuevWrYA2rWMdK1rKa9axoTata18rWtrr1rXCNq1zn Ste62vWueM2rXvfK17769a+ADaxgB0vYwhr2sIhNrGIXy9jGOvaxkI2sZCdL2cpa9rKYzaxm N8vZznr2s6ANrWhHS9rSmva0qE2talfL2ta69rWwja1sZ0vb2tr2trjNrW53y9ve+va3wA2u cIdL3OIa97jITa5yl8vc5jr3udD/ja50p0vd6lr3utjNrna3y93ueve74A2veMdL3vKa97zo DWiL0gvT9bLXpe59b3vlC1/6tpRz9s0ofvPrzncNYDlw2y9/2Qmw/6bObwP+J+fwK+AEq7NF EI4vBmIlsAY7GJ0RlvCEN7wBC1/YnBluzr9U92F+Ek3AHi7xOE88MxXrk8VSc3E+YQw2GeOT xiNIsY29iWME77ieAY7xj+kZ5BoPeZ6NY9yRZ5xjD+h4yd3cb4GhTOUqW/nKWM6ylrfM5S57 +ctgDrOYx0zmMpv5zGhOs5rXzOY2u/nNcI6znOdM5zrb+c54zrOe98znPvv5z4AOtKAHTehC G/rQiE60/6IXzehGO/rRkI60pCdN6Upb+tKYzrSmN83pTnv606AOtahHTepSm/rUqE61qlfN 6la7+tWwjrWsZ03rWtv61rjOta53zete+/rXwA62sIdN7GIb+9jITrayl83sZjv72dCOtrSn Te1qW/va2M62trfN7W57+9vgDre4x03ucpv73OhOt7rXze52u/vd8I63vOdN73rb+974zre+ 983vfvv73wAPuMAHTvCCG/zgCE+4whfO8IY7/OEQj7jEJ07xilv84hjPuMY3zvGOe/zjIA+5 yEdO8pKb/OQoT7nKV87ylrv85TCPucxnTvOa2/zmOM+5znfO8577/OdAD7rQh/9O9KIb/ehI T7rSl870pjv96VCPutSnTvWqW/3qWM+61rfO9a57/etgD7vYx072spv97GhPu9rXzva2u/3t cI+73OdO97rb/e54z7ve9873vvv974APvOAHT/jCG/7wiE+84hfP+MY7/vGQj7zkJ0/5ylv+ 8pjPvOY3z/nOe/7zoA+96EdP+tKb/vSoT73qV8/61rv+9bCPvexnT/va2/72uM+97nfP+977 /vfAD77wh0/84hv/+MhPvvKXz/zmO//50I++9KdP/epb//rYz772t8/97nv/++APv/jHT/7y m//86E+/+tfP/va7//3wj7/850//+tv//vjPv/73z////vv//wAYgAI4gARYgAZ4gAiYgAq4 gAzYgA74gBAYgRI4gRRYgRZ4gRiYgRq4gRzYgR74gSAYgiI4giRYgiZ4giiYgiq4gizYgi74 gjAYgzI4gzRYgzZ4gziYgzq4gzzYgz74g0AYhEI4hERYhEZ4hEiYhEq4hEzYhE74hFAYhVI4 hVRYhVZ4hViYhVq4hVzYhV74hWAYhmI4hmRYhmZ4hmiYhmq4hmzYhm74hnAYh3I4h3RYh3Z4 h3iYh3q4h3zYh374h4AYiII4iIRYiIZ4iIiYiIq4iIzYiI74iJAYiZI4iZRYiZZ4iZiYiZq4 iZzYiZ74iaAYiqI4iqRYiqZ4/4qomIqquIqs2Iqu+IqwGIuyOIu0WIu2eIu4mIu6uIu82Iu+ +IvAGIzCOIzEWIzGeIzImIzKuIzM2IzO+IzQGI3SOI3UWI3WeI3YmI3auI3c2I3e+I3gGI7i OI7kWI7meI7omI7quI7s2I7u+I7wGI/yOI/0WI/2eI/4mI/6uI/82I/++I8AGZACOZAEWZAG eZAImZAKuZAM2ZAO+ZAQGZESOZEUWZEWeZEYmZEauZEc2ZEe+ZEgGZIiOZIkWZImeZIomZIq uZIs2ZIu+ZIwGZMyOZM0WZM2eZM4mZM6uZM82ZM++ZNAGZRCOZREWZRGeZRImZRKuZRM2ZRO +ZRQGf+VUjmVVFmVVnmVWJmVWrmVXNmVXvmVYBmWYjmWZFmWZnmWaJmWarmWbNmWbvmWcBmX cjmXdFmXdnmXeJmXermXfNmXfvmXgBmYgjmYhFmYhnmYiJmYirmYjNmYjvmYkBmZkjmZlFmZ lnmZmJmZmrmZnNmZnvmZoBmaojmapFmapnmaqJmaqrmarNmarvmasBmbsjmbtFmbtnmbuJmb urmbvNmbvvmbwBmcwjmcxFmcxnmcyJmcyrmczNmczvmc0Bmd0jmd1Fmd1nmd2Jmd2rmd3Nmd 3vmd4Bme4jme5Fme5nme6Jme6rme7Nme7vme8Bmf8jmf9Fmf9nmf+Jmf+rn/n/zZn/75nwAa oAI6oARaoAZ6oAiaoAq6oAzaoA76oBAaoRI6oRRaoRZ6oRiaoRq6oRzaoR76ocYWACI6ogEA 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 KeSQRBZp5JFIJqnkkkw26eSTUEYp5ZRUVmnllVhmqeWWXHbp5ZdghinmmGSWaeaZaKap5pps tunmm3DGKeecdNZp55145qnnnnz26eefgAYq6KCEFmrooYgmquiijDbq6KOQRirppJRWauml mGaq6aacdurpp6CGKuqopJZq6qmopqrqqqy26uqrsMYq66y01mrrrbjmquuuvPbq66/ABivs sMQWa+yxyCar7LL/zDbr7LPQRivttNRWa+212Gar7bbcduvtt+CGK+645JZr7rnopqvuuuy2 6+678MYr77z01mvvvfjmq+++/Pbr778AByzwwAQXbPDBCCes8MIMN+zwwxBHLPHEFFds8cUY Z6zxxhx37PHHIIcs8sgkl2zyySinrPLKLLfs8sswxyzzzDTXbPPNOOes88489+zzz0AHLfTQ RBdt9NFIJ6300kw37fTTUEct9dRUV2311VhnrfXWXHft9ddghy322GSXbfbZaKet9tpst+32 23DHLffcdNdt991456333nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnl/5hn rvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvstNdu++2456777rz37vvvwAcv/PDE F2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy37/77 8Mcv//z012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIygBCdIwQpa8IIY zKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCH QAyiEIdIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFv+3yMUuevGLYAyjGMdIxjKa 8YxoTKMa18jGNrrxjXCMoxznSMc62vGOeMyjHvfIxz768Y+ADKQgB0nIQhrykIhMpCIXychG OvKRkIykJCdJyUpa8pKYzKQmN8nJTnryk6AMpShHScpSmvKUqEylKlfJyla68pWwjKUsZ0nL WtrylrjMpS53ycte+vKXwAymMIdJzGIa85jITKYyl8nMZjrzmdCMpjSnSc1qWvOa2MymNrfJ zW5685vgDKc4x0nOcprznOhMpzrXyc52uvOd8IynPOdJz3ra8574zKc+98nPfvrznwANqEAH StCCGvSgCE2oQhfK0IY69KEQjahEJ0r/0Ypa9KIYzahGN8rRjnr0oyANqUhHStKSmvSkKE2p SlfK0pa69KUwjalMZ0rTmtr0pjjNqU53ytOe+vSnQA2qUIdK1KIa9ahITapSl8rUpjr1qVCN qlSnStWqWvWqWM2qVrfK1a569atgDatYx0rWspr1rGhNq1rXyta2uvWtcI2rXOdK17ra9a54 zate98rXvvr1r4ANrGAHS9jCGvawiE2sYhfL2MY69rGQjaxkJ0vZylr2spjNrGY3y9nOevaz oA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM2tbnfL29769rfADa5wh0vc4hr3 uMhNrnKXy9zmuTr3udCNrnSnS93qWve62M2udrfL3e5697vgDa94x0ve8pr3vOhNr3rXy972 uve98I2vfOdL3/ra9774za9+98vf/m4JAAAOgIDbB+AACzgA7CswAOJX4AO7r8EHPvCC02dg AQNAwhS+sIQ1HAAAo4/DHa6wh8/HYQVv+MMKhnCIUZziEk/YfC0W8YvLF2MXszjFJyZxjHMM 4x1beMbkqzGPe4xjC6vPxx1eX4Hl12L4FRnBD66w+hIAACH5BAUmAAYALPoC6AMVA1cEAAP/ aLrc/jDKSau9OOvNu/9gKI5kaZ5oqq5s61JCLM+0TNx4ruNv7//AoHBILBqPyKRyGak5abuo jkmtWq/YrHbL7XpHz7BASiZ8z+i0es1uu98u8bMshdvv+Lx+z++D5E50UX6EhYaHiImKLYA1 gjuLkZKTlJWWbY1QjzmXnZ6foKGiIZkzOAWoqaiDo62ur7CxhqU2N6qqrLK6u7y9vkm0Mae3 q5C/x8jJyssZwWM7uMbM09TV1q/OUdFT193e3+CE2dCpueHn6OnqWOM625zr8fLz9Iw1A/j4 juTF3PX/AAMKnEAjn0F9tdyVkzawocOH6mYcnJgwxzseEDNq3MhM/8ZBj/kqDusHj6PJkyhb gUS4coAwfgXMpZxJsyaiGAbvhXymkCRGm0CDCoWDc6LRlz1jMhzKtKnTK0WNfuRpcaG/p1iz ag0SVepObVZLbh1LtiyJroDA+rxhtq3btxfQylGr9Crcu3jdyhVDV2bev4CftpwL02/gw4hp tnQ5mOrIumITS568UaJXhLaIaWZLubPnhgW91tK82czn06jlOaFoigBpYpxTy57trd0m07Rz 61Zme9Pu38B59X4UvLjxUcMFHV/OvFJyOs2jSz/0vMz069jzVCeTvbv3NdvrfB9PXkt4w+XT q1/Pvr379/Djy59Pv779+/jz69/Pv7////8ABijggAQWaOCBCCao4IIMNujggxBGKOGEFFZo 4YUYZqjhhhx26OGHIIYo4ogklmjiiSimqOKKLLbo4oswxijjjDTWaOONOOao44489ujjj0AG KeSQRBZp5JFIJqnkkkw26eSTUEYp5ZRUVmnllVhmqeWWXHbp5ZdghinmmGSWaeaZaKap5pps tunmm3DGKeecdNZp55145qnnnnz26eefgAYq6KCEFmrooYgmquiijDbq6KOQRirppJRWauml mGaq6aacdurpp6CGKuqopJZq6qmopqrqqqy26uqrsMYq66y01mrrrbjmquuuvPbq66/ABivs sMQWa+yxyCar7LL/zDbr7LPQRivttNRWa+212Gar7bbcduvtt+CGK+645JZr7rnopqvuuuy2 6+678MYr77z01mvvvfjmq+++/Pbr778AByzwwAQXbPDBCCes8MIMN+zwwxBHLPHEFFds8cUY Z6zxxhx37PHHIIcs8sgkl2zyySinrPLKLLfs8sswxyzzzDTXbPPNOOes88489+zzz0AHLfTQ RBdt9NFIJ6300kw37fTTUEct9dRUV2311VhnrfXWXHft9ddghy322GSXbfbZaKet9tpst+32 23DHLffcdNdt991456333nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnl/5hn rvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvstNdu++2456777rz37vvvwAcv/PDE F2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy37/77 8Mcv//z012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIygBCdIwQpa8IIY zKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCH QAyiEIdIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFv+3yMUuevGLYAyjGMdIxjKa 8YxoTKMa18jGNrrxjXCMoxznSMc62vGOeMyjHvfIxz768Y+ADKQgB0nIQhrykIhMpCIXychG OvKRkIykJCdJyUpa8pKYzKQmN8nJTnryk6AMpShHScpSmvKUqEylKlfJyla68pWwjKUsZ0nL WtrylrjMpS53ycte+vKXwAymMIdJzGIa85jITKYyl8nMZjrzmdCMpjSnSc1qWvOa2MymNrfJ zW5685vgDKc4x0nOcprznOhMpzrXyc52uvOd8IynPOdJz3ra8574zKc+98nPfvrznwANqEAH StCCGvSgCE2oQhfK0IY69KEQjahEJ0r/0Ypa9KIYzahGN8rRjnr0oyANqUhHStKSmvSkKE2p SlfK0pa69KUwjalMZ0rTmtr0pjjNqU53ytOe+vSnQA2qUIdK1KIa9ahITapSl8rUpjr1qVCN qlSnStWqWvWqWM2qVrfK1a569atgDatYx0rWspr1rGhNq1rXyta2uvWtcI2rXOdK17ra9a54 zate98rXvvr1r4ANrGAHS9jCGvawiE2sYhfL2MY69rGQjaxkJ0vZylr2spjNrGY3y9nOevaz oA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM2tbnfL29769rfADa5wh0vc4hr3 uMhNrnKXy9zm2jr3udCNrnSnS93qWve62M2udrfL3e5697vgDa94x0ve8pr3vOhNr3rXy972 uve98I2vfOdL3/ra9774za9+98vf/vr3vwAOsIAHTOACG/jACE6wghfM4AY7+MEQjrCEJ0zh Clv4whjOsIYDE4AOezgAAFjgh0fcYQWSeMQJ/DAAVrziDyPQwyyOsYdf3OEYs3jGB4SxjQGA 4wPu+MYlRuCPeRxkCQYAgkc2MowfqOIQN7DJThaxjlfMQChTWcogtjGWf7zlHZu4xlxO8YlR nOMxu7jMZi5yARMAACH5BAUlAAUALAQA6AMdBlcEAAP/WLrc/jDKSau9OOvNu/9gKI5kaZ5o qq5s675wLM90bd94ru9879OCoHBIFBKOyKQS+Ws6n9CodEqtWq/YrHbL7Xq/4LB4UiwTl2jl eM1uu9/wuHxOr9vv+Lwea+4L0oAEe4OEhYaHiImKi4yNjo+PfmaBaZICkJiZmpucnZ6foKGi ox6WRZRolqSrrK2ur7CxsrO0oqZnqEqStby9vr/AwcLDxMW3Q7m6fsXMzc7P0NHS09QzQgPY 2dhlyUnL1eDh4uPk5ebnjNfa2dzdR9/o8fLz9PX29/gf6usD7e59+QIKHEiwoMGDrMpo89cN IMKHECNKnEixIhSF7E65I2DG/6LHjyBDihwZEuM2jf/KkFzJsqXLlzCJmeyHsuGxmDhz6tzJ s2ecmQyTHbvks6jRo0iTKl0BtKbQm0ujSp1KtWrPprhSmrLKtavXr2AFYkW2EWrYs2jTql3b a6yRslvZyp1Lt65dRG6DbOQY967fv4ADC66S9w/cXYMTK17MuLGJwnv7Op5MubLlxZAPO7zM ubPnz18za90MurTp06hfirZJOrXr17BjD1z9tLXs27hz64ZGOxe83cCDCx/uqjeq38STK1/O /FAQftBpRu7YvLr169jXPI++Tq9mItnDix9P/sd27hmnIy/Pvr3796WGGh5NHb79+/jzy5/P 2nb+//8ABsjcfuqpJOCBCCa4G4HfCaHggxBGaBqD9BEl4YUYZqgYhf1p6OGHIM7FYTIhlmji iV2NmAuKLLbo4lXy7fXijDTWaOONOOao44489ujjj0AGKeSQRBZp5JFIJqnkkkw26eSTUEYp 5ZRUVmnllVhmqeWWXHbp5ZdghinmmGSWaeaZaKap5ppstunmm3DGKeecdNZp55145qnnnnz2 6eefgAYq6KCEFmrooYgmquiijDbq6KOQRirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qmo pqrqqqy26uqrsMYq66y01mrrrbjmquuuvPbq66/ABivssMQWa+yxyCar7LL/zDbr7LPQRivt tNRWa+212Gar7bbcduvtt+CGK+645JZr7rnopqvuuuy26+678MYr77z01mvvvfjmq+++/Pbr 778AByzwwAQXbPDBCCes8MIMN+zwwxBHLPHEFFds8cUYZ6zxxhx37PHHIIcs8sgkl2zyySin rPLKLLfs8sswxyzzzDTXbPPNOOes88489+zzz0AHLfTQRBdt9NFIJ6300kw37fTTUEct9dRU V2311VhnrfXWXHft9ddghy322GSXbfbZaKet9tpst+3223DHLffcdNdt991456333nz37fff gAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnl/5hnrvnmnHfu+eeghy766KSXbvrpqKeu +uqst+7667DHLvvstNdu++2456777rz37vvvwAcv/PDEF2/88cgnr/zyzDfv/PPQRy/99NRX b/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy37/778Mcv//z012///fjnr//+/Pfv//8A DKAAB0jAAhrwgAhMoAIXyMAGOvCBEIygBCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHSMISmvCE KEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISl8jEJjrx iVCMohSnSMUqWvGKWMyiFv+3yMUuevGLYAyjGMdIxjKa8YxoTKMa18jGNrrxjXCMoxznSMc6 2vGOeMyjHvfIxz768Y+ADKQgB0nIQhrykIhMpCIXychGOvKRkIykJCdJyUpa8pKYzKQmN8nJ Tnryk6AMpShHScpSmvKUqEylKlfJyla68pWwjKUsZ0nLWtrylrjMpS53ycte+vKXwAymMIdJ zGIa85jITKYyl8nMZjrzmdCMpjSnSc1qWvOa2MymNrfJzW5685vgDKc4x0nOcprznOhMpzrX yc52uvOd8IynPOdJz3ra8574zKc+98nPfvrznwANqEAHStCCGvSgCE2oQhfK0IY69KEQjahE J0r/0Ypa9KIYzahGN8rRjnr0oyANqUhHStKSmvSkKE2pSlfK0pa69KUwjalMZ0rTmtr0pjjN qU53ytOe+vSnQA2qUIdK1KIa9ahITapSl8rUpjr1qVCNqlSnStWqWvWqWM2qVrfK1a569atg DatYx0rWspr1rGhNq1rXyta2uvWtcI2rXOdK17ra9a54zate98rXvvr1r4ANrGAHS9jCGvaw iE2sYhfL2MY69rGQjaxkJ0vZylr2spjNrGY3y9nOevazoA2taEdL2tKa9rSoTa1qV8va1rr2 tbCNrWxnS9va2va2uM2tbnfL29769rfADa5wh0vc4hr3uMhNrnKXy9zm/zr3udCNrnSnS93q Wve62M2udrfL3e5697vgDa94x0ve8pr3vOhNr3rXy972uve98I2vfOdL3/ra9774za9+98vf /vr3vwAOsIAHTOACG/jACE6wghfM4AY7+MEQjrCEJ0zhClv4whjOsIY3zOEOe/jDIA6xiEdM 4hKb+MQoTrGKV8ziFrv4xTCOsYxnTOMa2/jGOM6xjnfM4x77+MdADrKQh0zkIhv5yEhOspKX zOQmO/nJUI6ylKdM5Spb+cpYzrKWt8zlLnv5y2AOs5jHTOYym/nMaE6zmtfM5ja7+c1wjrOc 50znOtv5znjOs573zOc++/nPgA60oAdN6EIb+v/QiE60ohfN6EY7+tGQjrSkJ03pSlv60pjO tKY3zelOe/rToA61qEdN6lKb+tSoTrWqV83qVrv61bCOtaxnTeta2/rWuM61rnfN6177+tfA Drawh03sYhv72MhOtrKXzexmO/vZ0I62tKdN7Wpb+9rYzra2t83tbnv72+AOt7jHTe5ym/vc 6E63utfN7na7+93wjre8503vetv73vjOt773ze9++/vfAA+4wAdO8IIb/OAIT7jCF87whjv8 4RCPuMQnTvGKW/ziGM+4xjfO8Y57/OMgD7nIR07ykpv85ChPucpXzvKWu/zlMI+5zGdO85rb /OY4z7nOd87znvv850D/D7rQh070ohv96EhPutKXzvSmO/3pUI+61KdO9apb/epYz7rWt871 rnv962APu9jHTvaym/3saE+72tfO9ra7/e1wj7vc5073utv97njPu973zve++/3vgA+84AdP +MIb/vCIT7ziF8/4xjv+8ZCPvOQnT/nKW/7ymM+85jfP+c57/vOgD73oR0/60pv+9KhPvepX z/rWu/71sI+97GdP+9rb/va4z73ud8/73vv+98APvvCHT/ziG//4yE++8pfP/OY7//nQj770 p0/96lv/+tjPvva3z/3ue//74A+/+MdP/vKb//zoT7/618/+9rv//fCPv/znT//62//++M+/ lP73z//++///ABiAAjiABFiABniACJiACriADNiADviAEBiBEjiBFFiBFniBGJiBGriB4gMA HsiBIPhMATCCJAgA+0aCI2iCJ4iCAcBvHuiBJKhvL/iCMXhvM0iDI2iDNwiDOWhvO8iDLUhv JbiDNThvQ3iDRVhvAYCESRhvAMCCUKiC8/aEUIiCUihvOMiCL/g/CQAAIfkEBSgACAAsBQAW AvIGWgYABP8QyUmrvTjrzbv/YCiOZGmeaKqubOu+cCzPdG3feK7vfO//wKBwSNwNNkfMYMlk Fp/QqHRKrVqv2Kx2y+16v+CweEwum8+8ZEZNYaPf8Lh8Tq/b7/i8fs/v+/+AcG4Wg0uBh4iJ iouMjY6PkJGSk5SVXoMVhUwClp2en6ChoqOkpaanqKlcmAgCroWqsbKztLW2t7i5uru8IKyu AppOvcTFxsfIycrLzM3JTa9KwE3DztbX2Nna29zd3t8om8EdrODm5+jp6uvs7e5kv+Xl7/T1 9vf4+fr72NT+SPwCChxIsKDBgwgF+WviYWHChxAjSpxIsSJFf8Ayanw1z6LHjyD/Q4ocSVIU NU4axGnsWLKly5cwY8qcCQWWkk00c+rcybOnz583l6BMufAf0KNIkypdytQcJnlNo0qdSrWq VVVPiV7dyrWr169gw4odS7as2bNo06pdy7at27dw48qdS7eu3bt48+rdy7ev37+AAwseTLiw 4cOIEytezLix48eQI0ueTLmy5cuYM2vezLmz58+gQ4seTbq06dOoU6tezbq169ewY8ueTbu2 7du4c+vezbu379/AgwsfTry48ePIkytfzry58+fQo0ufTr269evYs2vfzr279+/gw4sfT768 +fPo06tfz769+/fw48ufT7++/fv48+vfz7+///8ABijg/4AEFmjggQgmqOCCDDbo4IMQRijh hBRWaOGFGGao4YYcdujhhyCGKOKIJJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo 449ABinkkEQWaeSRSCap5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmnmmWim qeaabLbp5ptwxinnnHTWaeedeOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEYq6aSU VmrppZhmqummnHbq6aeghirqqKSWauqpqKaq6qqsturqq7DGKuustNZq66245qrrrrz26uuv wAYr7LDEFmvsscgmq+yyzDbr7P+z0EYr7bTUVmvttdhmq+223Hbr7bfghivuuOSWa+656Kar 7rrstuvuu/DGK++89NZr77345qvvvvz26++/AAcs8MAEF2zwwQgnrPDCDDfs8MMQRyzxxBRX bPHFGGes8cYcd+zxxyCHLPLIJJds8skop6zyyiy37PLLMMcs88w012zzzTjnrPPOPPfs889A By300EQXbfTRSCet9NJMN+3001BHLfXUVFdt9dVYZ6311lx37fXXYIct9thkl2322Winrfba bLft9ttwxy333HTXbffdeOet99589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV275 5Zhnrvn/5px37vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+7778AH L/zwxBdv/PHIJ6/88sw37/zz0Ecv/fTUV2/99dhnr/323Hfv/ffghy/++OSXb/756Kev/vrs t+/++/DHL//89Ndv//3456///vz37///AAygAAdIwAIa8IAITKACF8jABjrwgRCMoAQnSMEK WvCCGMygBjfIwQ568IMgDKEIR0jCEprwhChMoQpXyMIWuvCFMIyhDGdIwxra8IY4zKEOd8jD Hvrwh0AMohCHSMQiGvGISEyiEpfIxCY68YlQjKIUp0jFKlrxiljMoha3yMUu/3rxi2AMoxjH SMYymvGMaEyjGtfIxja68Y1wjKMc50jHOtrxjnjMox73yMc++vGPgAykIAdJyEIa8pCITKQi F8nIRjrykZCMpCQnSclKWvKSmMykJjfJyU568pOgDKUoR0nKUprylKhMpSpXycpWuvKVsIyl LGdJy1ra8pa4zKUud8nLXvryl8AMpjCHScxiGvOYyEymMpfJzGY685nQjKY0p0nNalrzmtjM pja3yc1uevOb4AynOMdJznKa85zoTKc618nOdrrznfCMpzznSc962vOe+MynPvfJz376858A DahAB0rQghr0oAhNqEIXytCGOvShEI2oRCdK0Ypa9P+iGM2oRjfK0Y569KMgDalIR0rSkpr0 pChNqUpXytKWuvSlMI2pTGdK05ra9KY4zalOd8rTnvr0p0ANqlCHSlQnuqKohToqUgel1KUm 1alMhaqghiJVP1G1qlO6qgU2spEQaFUyHZFHUbDKja9WgKtNBYFZIRPWC7CErNlYqwbkOlfM tDUTb4UrNq5K16/SVQJ/Zcxd24ATvYKDqn81a2LtioFpEMKw6RgKWrvaWA4EdjG/iAZeqwHZ sqrVBJdVDDTG4dZpGKWz2ghtK0CbGXG8Na+oXYZqVbvV1jYWKrHtxmxZa9eiGCIlud3GbktA W8T49rcccEhwkzFcEhTXMRj/mWxGkLtc5nqVuJo5CRKEshHYVtcWtH0uYLP72KAMQLzfBa8I Qote0RaWKMelbnp58dzLtjcxWVHCfPeK3Q3c17hu1cp+B0zgAhv4wAhOsIIXzOAGO/jB0o2w hCdM4Qpb+MIYzrCGNyxhAnj4wyAO8YcfvBgOm/jEKE6xildsYhG7OMQkVgyLZ0zjGtv4xpN9 sY4JEOPE4PjHQA6ykCe84xf3GDFDTrKSl1zjIrv4yIdhspSnTGULO1nEUDZMlbfM5S5fGcZZ rktaM4BhfXwZxGEWc2DLnI8zjzjNcxlzYy9sZjfzGM52kSub8WHnO+OZLnqmc5vt/Gcxz1XQ fCZ0/6HjfGgL19nNi/ZJXyN8XTIj+h4EKICmC/DiTXN6JWON9EgSi9YRBNrRbfZ0pzdNAMeK eib1dW6jK2xmVbtY1Rx5NU2CAQ3/XmDNs6ZwrVl9a1ZzRCi6hgmvke3rX1s22BMetqY/PG0P 45q0yY7JsoVd2WbPGdV8tnWmOW1tYy9bvtkWSXNNDW0JS5vctr62ctOt7s/299u0HjSx411t V9O7Jeteb7sprW9Wq9rW0/03wO0ta0uDG9Pj9rTEid1dhY+a4ex2eL4TPfGOk3uy87b4QwJe aXxzO9ER9zi5Wy1ddIs8IeG9968vbQ9q85vYLFdJwl8ukZg33OTRHnTK4f8t7mOfl+cfKS57 P7BniKccxEU/93GRDvOMP9sDTa95uau99ZX7m+oWQe9isU7zetic60/38HS9C3aqZN3sim67 Wt5Ojz7LfS10f4fd756WvLtj73w/i9/bAfjAl2Xw7Ci84ceC+HUofvFh6bLkJ6/kx0P+K5TP vOZtbPnLe/7zoA+96EdP+tKb/vSoT73qV8/61rv+9bCPvexnT/va2/72uM+97nfP+977/vfA D77wh0/84hv/+MhPvvKXz/zmO//50I++9KdP/epb//rYz772t8/97nv/++APv/jHT/7ym//8 6E+/+tfP/va7//3wj7/850//+tv//vjPv/73z////vv//wAYgAI4gARYgAZ4gAiYgAq4gAzY gA74gBAYgRI4gRRYgRZ4gRiYgRq4gRzYgR74gSAYgiI4giRYgiZ4giiYgiq4gizYgi74gjAY gzI4gzRYgzZ4gziYgzq4gzzYgz74g0AYhEI4hERYhEZ4hEiYhEq4hEzYhE74hFAYhVI4hVRY hVZ4hViYhVq4hVzYhV74hWAYhmI4hmRYhmZ4hmiYhmq4hmzYhm74hnAYh3I4h3RYh3Z4h3iY h3q4h3zYh374h4AYiII4iIRYiIZ4iIiYiIq4iIzYiI74iJAYiZI4iZRYiZZ4iZiYiZq4iZyY KHLWiWH3X6CoD584ih4h/4qmiA+omIr2sIqsSA+u+IqzMGnSVXKyyF/+VWoCd4txZXW2yIvW IHV95WxXB4zXcG5jV1veZozOsG1BR4x1xYzBiHG7KI3NQHLUaI3WxXS8pY2ylY3g6I3FgI3c KI7KQI5YZ47n+IvhqI674HO+6I7EoHTlKI/rWI3LaI/HIHbFqI/++I8AGZACOZAEWZAGeZAI mZAKuZAM2ZAO+ZAQGZESOZEUWZEWeZEYmZEauZEc2ZEe+ZEgGZIiOZIkWZImeZIomZIquZIs 2ZIu+ZIwGZMyOZM0WZM2eZM4mZM6uZM82ZM++ZNAGZRCOZREWZRGeZRImZRKuZRM2ZRO+ZRQ Gf+VUjmVVFmVVnmVWJmVWrmVXNmVXvmVYBmWYjmWZFmWZnmWaJmWarmWbNmWbvmWcBmXcjmX dFmXdnmXeJmXermXfNmXfvmXgBmYgjmYhFmYhnmYiJmYirmYjNmYjvmYkBmZkjmZlFmZlnmZ mJmZmrmZnNmZnvmZoBmaojmapFmapnmaqJmaqrmarNmarvmasBmbsjmbtFmbtnmbuJmburmb vNmbvvmbwBmcwjmcxFmcxnmcyJmcyrmczNmczvmc0Bmd0jmd1Fmd1nmd2Jmd2rmd3Nmd3vmd 4Bme4jme5Fme5nme6Jme6rme7Nme7vme8Bmf8jmf9Fmf9nmf+Jmf+rn/n/zZn/75nwAaoAI6 oARaoAZ6oAiaoAq6oAzaoA76oBAaoRI6oRRaoRZ6oRiaoRq6oRzaoR76oSAaoiI6oiRaoiZ6 oiiaoiq6oizaoi76ojAaozI6ozRaozZ6oziaozq6ozzaoz76o0AapEI6pERapEZ6pEiapEq6 pEzapE76pFAapVI6pVRapVZ6pViapVq6pVzapV76pWAapmI6pmRapmZ6pmiapmq6pmzapm76 pnAap3I6p3Rap3Z6p3iap3q6p3zap376p4AaqII6qIRaqIZ6qIiaqIq6qIzaqI76qJAaqZI6 qZRaqZZ6qZiaqZq6qZzaqZ76qaAaqqI6qqRa/6qmeqqomqqquqqs2qqu+qqwGquyOqu0Wqu2 equ4mqu6uqu82qu++qvAGqzCOqzEWqzGeqzImqzKuqzM2qzO+qzQGq3SOq3UWq3Weq3Ymq3a uq3c2q3e+q3gGq7iOq7kWq7meq7omq7quq7s2q7u+q7wGq/yOq/0Wq/2eq/4mq/6uq/82q/+ +q8AG7ACO7AEW7AGe7AIm7AKu7AM27AO+7AQG7ESO7EUW7EWe7EYm7Eau7Ec27Ee+7EgG7Ii O7IkW7Ime7Iom7Iqu7Is27Iu+7IwG7MyO7M0W7M2e7M4m7M6u7M827M++7NAG7RCO7REW7RG e7RIm7RKu7RM27RO+/+0UBu1Uju1VFu1Vnu1WJu1Wru1XNu1Xvu1YBu2Yju2ZFu2Znu2aJu2 aru2bNu2bvu2cBu3cju3dFu3dnu3eJu3eru3fNu3fvu3gBu4gju4hFu4hnu4iJu4iru4jNu4 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 xYsYM2rE+C8atY8f/zeKHEmypMmTKGV1HIDEY8iUMGPKnEmzpk0uhuZ1usmzp8+fQIMKdbNT w8qAE4cqXcq0qdOn4RANowe1qtWrWLNqBSXVKNWtYMOKHUu2rNmzaNOqXcu2rdu3cOPKnUu3 rt27ePPq3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26 tOnTqFOrXs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069 uvXr2LNr3869u/fv4MOLH0++vPnz6NOrX8++vfv38OPLn0+/vv37+PPr38+/v///AAYo4P+A BBZo4IEIJqjgggw26OCDEEYo4YQUVmjhhRhmqOGGHHbo4YcghijiiCSWaOKJKKao4oostuji izDGKOOMNNZo44045qjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeWVWGap 5ZZcdunll2CGKeaYZJZp5plopqnmmmy26eabcMYp55x01mnnnXjmqeeefPbp55+ABirooIQW auihiCaq6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6quw xirrrLTWauutuOaq66689urrr8AGK+ywxBZr7LHIJqvsssw26+z/s9BGK+201FZr7bXYZqvt ttx26+234IYr7rjklmvuueimq+667Lbr7rvwxivvvPTWa++9+Oar77789uvvvwAHLPDABBds 8MEIJ6zwwgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDH LPPMNNds880456zzzjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZc d+3112CHLfbYZJdt9tlop6322my37fbbcMct99x012333XjnrffefPft99+ABy744IQXbvjh iCeu+OKMN+7445BHLvnklFdu+eWYZ675/+acd+7556CHLvropJdu+umop6766qy37vrrsMcu ++y012777bjnrvvuvPfu++/ABy/88MQXb/zxyCev/PLMN+/889BHL/301Fdv/fXYZ6/99tx3 7/334Icv/vjkl2/++einr/767Lfv/vvwxy///PTXb//9+Oev//789+///wAMoAAHSMACGvCA CEygAhfIwAY68IEQjKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrrw hTCMoQxnSMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiEhMohKXyMQmOvGJUIyiFKdIxSpa 8YpYzKIWt8jFLv968YtgDKMYx0jGMprxjGhMoxrXyMY2uvGNcIyjHOdIxzra8Y54zKMe98jH Pvrxj4AMpCAHSchCGvKQiEykIhfJyEY68pGQjKQkJ0nJSlrykpjMpCY3yclOevKToAylKEdJ ylKa8pSoTKUqV8nKVrrylbCMpSxnScta2vKWuMylLnfJy1768pfADKYwh0nMYhrzmMhMpjKX ycxmOvOZ0IymNKdJzWpa85rYzKY2t8nNbnrzm+AMpzjHSc5ymvOc6EynOtfJzna6853wjKc8 50nPetrznvjMpz73yc9++vOfAA2oQAdK0IIa9KAITahCF8rQhjr0oRCNqEQnStGKWvT/ohjN qEY3ytGOevSjIA2pSEdK0pKa9KQoTalKV8rSlrr0pTCNqUxnStOa2vSmOM2pTnfK05769KdA DapQh0rUohr1qEhN6hETkAClKoqpTk0UVKO6qKZS9VBWvWqhsqrVQXG1q1j6qgUSABJqiHUD Z7UMPaaCFIGAlRtppQBZQRJXDdR1Mmt1w1vXcVcM9NWvnclrBaSx13Qw9bBTzcBZ//pXyAh2 E0Up7DcQm1jFAhatgcWAK3IiWcMitqwfiWtfG/uYXxB2Av/4SmeXQVoCtHasgU2tJkDiBNWu 9hitfW0FdMsY2XbAtrdVRm5NwNvFyKMNwfXGcEtQXMWkNiCP/01uNpZLguYm5rkAcSsHJKJd 6eIWBNa1bmmRAtqyepcZr22ueBGzkpaQ4yXnTUZ6mfsZzhKlCfHFhm5Ju97eRlYJbYVufo3B 28b217h6Re6Ar6FeDhzYuQlWAnAXTOEKW/jCGM6whjfM4Q57+MMgJkh5yxviKo0YtCWm0onN m2IprRgkLXbxi6kR4yjNmMY1ftKNgZFjvTBhJjs+bY/r8mOZBHnCQz5LkWNy5CTvhSUpabKT 8wJllEh5ynep8kmujGUiw4TLXeaJli+w2bKOmQNnJolEyusSarQVyWFGSJorUGZgzHkDd97I mkHbZjjH+SJ5zkCgBf1l2Zr5vUL+c/9M2opnMndg0BwxNG0R/V9FnwQpaNZspqNsaJe02dI1 ge6J7zxoSF9kz52mdFJAfWkQmFrTnJatR/rcET+z2iCvJkCuLbBrhtiZHLNGdKJvXZJc95oC x1bIr7PrEGEPm9giMbYJkp2QZa9E0vCF9kikXQJqI8TaD2H2i2urbYtwmwTePsiym13bGZcb I7umdroN4ubairredX72u+UcAnkXmrvrnvSS952RXr963soOOMA/EmByE1whxzY1wqttbXyz +OEb8XejaWLxjl8c4y4CM8hjJPKRv6jkJm8RylO+opWzPEUuf/mJYi7zEtG85iO6Oc53zvOe +/znQA+60If/TvSiG/3oSE+60pfO9KY7/elQj7rUp071qlv96ljPuta3zvWue/3rYA+72MdO 9rKb/exoT7va1872trv97XCPu9znTve62/3ueM+73vfO9777/e+AD7zgB0/4whv+8IhPvOIX z/jGO/7xkI+85CdP+cpb/vKYz7zmN8/5znv+86APvehHT/rSm/70qE+96lfP+ta7/vWwj73s Z0/72tv+9rjPve53z/ve+/73wA++8IdP/OIb//jIT77yl8/85jv/+dCPvvSnT/3qW//62M++ 9rfP/e57//vgD7/4x0/+8pv//OhPv/rXz/72u//98I+//OdP//rb//74z7/+98////77//8A GIACOIAEWIAGeIAImIAKuIAM2IAO+IAQGIESOIEUWIEWeIEYmIEauIEc2IEe+IEgGIIiOIIk WIImeIIomIIquIIs2IIu+IIwGIMyOIM0WIM2eIM4mIOIMXA6GG0T14P4wINAuG1DSBI/WIT1 cIRI+A5KuISxEGj55mb95oTbUGpmNgJNSIWpEHHopoXawGgakGaQloVeeAqYtnG8tmll6Az3 xmaEhoZryAznhoVxyIauNm112AxzKAJkmIehsIdT6IfKAIh3KIjJQIgf0IeGiAnx1m2LiAyN 2IWPaAwGl4iTuAxc+GiXOIiOCIeb+ImgGIqiOIqkWIqmeP+KqJiKqriKrNiKrviKsBiLsjiL tFiLtniLuJiLuriLvNiLvviLwBiMwjiMxFiMxniMyJiMyriMzNiMzviM0BiN0jiN1FiN1niN 2JiN2riN3NiN3viN4BiO4jiO5FiO5niO6JiO6riO7NiO7viO8BiP8jiP9FiP9niP+JiP+riP /NiP/viPABmQAjmQBFmQBnmQCJmQCrmQDNmQDvmQEBmREjmRFFmRFnmRGJmRGrmRHNmRHvmR IBmSIjmSJFmSJnmSKJmSKrmSLNmSLvmSMBmTMjmTNFmTNnmTOJmTOrmTPNmTPvmTQBmUQjmU RFmURnmUSJmUSrmUTNmUTvmUUBn/lVI5lVRZlVZ5lViZlVq5lVzZlV75lWAZlmI5lmRZlmZ5 lmiZlmq5lmzZlm75lnAZl3I5l3RZl3Z5l3iZl3q5l3zZl375l4AZmII5mIRZmIZ5mIiZmIq5 mIzZmI75mJAZmZI5mZRZmZZ5mZiZmZq5mZzZmZ75maAZmqI5mqRZmqZ5mqiZmqq5mqzZmq75 mrAZm7I5m7RZm7Z5m7iZm7q5m7zZm775m8AZnMI5nMRZnMZ5nMiZnMq5nMzZnM75nNAZndI5 ndRZndZ5ndiZndq5ndzZnd75neAZnuI5nuRZnuZ5nuiZnuq5nuzZnu75nvAZn/I5n/RZn/Z5 n/iZn/q5/5/82Z/++Z8AGqACOqAEWqAGeqAImqAKuqAM2qAO+qAQGqESOqEUWqEWeqEYmqEa uqEc2qEe+qEgGqIiOqIkWqImeqIomqIquqIs2qIu+qIwGqMyOqM0WqM2eqM4mqM6uqM82qM+ +qNAGqRCOqREWqRGeqRImqRKuqRM2qRO+qRQGqVSOqVUWqVWeqVYmqVauqVc2qVe+qVgGqZi OqZkWqZmeqZomqZquqZs2qZu+qZwGqdyOqd0Wqd2eqd4mqd6uqd82qd++qeAGqiCOqiEWqiG eqiImqiKuqiM2qiO+qiQGqmSOqmUWqmWeqmYmqmauqmc2qme+qmgGqqiOqqkWv+qpnqqqJqq qrqqrNqqrvqqsBqrsjqrtFqrtnqruJqrurqrvNqrvvqrwBqswjqsxFqsxnqsyJqsyrqszNqs zvqs0Bqt0jqt1Fqt1nqt2Jqt2rqt3Nqt3vqt4Bqu4jqu5Fqu5nqu6Jqu6rqu7Nqu7vqu8Bqv 8jqv9Fqv9nqv+Jqv+rqv/Nqv/vqvABuwAjuwBFuwBnuwCJuwCruwDNuwDvuwEBuxEjuxFFux FnuxGJuxGruxHNuxHvuxIBuyIjuyJFuyJnuyKJuyKruyLNuyLvuyMBuzMjuzNFuzNnuzOJuz OruzPNuzPvuzQBu0Qju0RFu0Rnu0SJu0Sru0TNu0Tvv/tFAbtVI7tVRbtVZ7tVibtVq7tVzb tV77tWAbtmI7tmRbtmZ7tmibtmq7tmzbtm77tnAbt3I7t3Rbt3Z7t3ibt3q7t3zbt377t4Ar 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 ZJZp5plopqnmmmy26eabcMYp55x01mnnnXjmqeeefPbp55+ABirooIQWauihiCaq6KKMNuro o5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6quwxirrrLTWauutuOaq 66689urrr8AGK+ywxBZr7LHIJqvssv/MNuvss9BGK+201FZr7bXYZqvtttx26+234IYr7rjk lmvuueimq+667Lbr7rvwxivvvPTWa++9+Oar77789uvvvwAHLPDABBds8MEIJ6zwwgw37PDD EEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds880456zz zjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt 9tlop6322my37fbbcMct99x012333XjnrffefPft99+ABy744IQXbvjhiCeu+OKMN+7445BH LvnklFdu+eX/mGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvu vPfu++/ABy/88MQXb/zxyCev/PLMN+/889BHL/301Fdv/fXYZ6/99tx37/334Icv/vjkl2/+ +einr/767Lfv/vvwxy///PTXb//9+Oev//789+///wAMoAAHSMACGvCACEygAhfIwAY68IEQ jKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrrwhTCMoQxnSMMa2vCG OMyhDnfIwx768IdADKIQh0jEIhrxiEhMohKXyMQmOvGJUIyiFKdIxSpa8YpYzKIW/7fIxS56 8YtgDKMYx0jGMprxjGhMoxrXyMY2uvGNcIyjHOdIxzra8Y54zKMe98jHPvrxj4AMpCAHSchC GvKQiEykIhfJyEY68pGQjKQkJ0nJSlrykpjMpCY3yclOevKToAylKEdJylKa8pSoTKUqV8nK VrrylbCMpSxnScta2vKWuMylLnfJy1768pfADKYwh0nMYhrzmMhMpjKXycxmOvOZ0IymNKdJ zWpa85rYzKY2t8nNbnrzm+AMpzjHSc5ymvOc6EynOtfJzna6853wjKc850nPetrznvjMpz73 yc9++vOfAA2oQAdK0IIa9KAITahCF8rQhjr0oRCNqEQnSv/Rilr0ohjNqEY3ytGOevSjIA2p SEdK0pKa9KQoTalKV8rSlrr0pTCNqUxnStOa2vSmOM2pTnfK05769KdADapQh0rUohr1qEhN qlKXytSmOvWpUI2qVKdK1apa9apYzapWt8rVrnr1q2ANq1jHStaymvWsaE2rWtfK1ra69a1w jatc50rXutr1rnjNq173yte++vWvgA2sYAdL2MIa9rCITaxiF8vYxjr2sZCNrGQnS9nKWvay mM2sZjfL2c569rOgDa1oR0va0pr2tKhNrWpXy9rWuva1sI2tbGdL29ra9ra4za1ud8vb3vr2 t8ANrnCHS9ziGve4yE2ucpfL3Ob/Ove50I2udKdL3epa97rYza52t8vd7nr3u+ANr3jHS97y mve86E2vetfL3va6973wja9850vf+tr3vvjNr373y9/++ve/AA6wgAdM4AIb+MAITrCCF8zg Bjv4wRCOsIQnTOEKW/jCGM6whjfM4Q57+MMgDrGIR0ziEpv4xChOsYpXzOIWu/jFMI6xjGdM 4xrb+MY4zrGOd8zjHvv4x0AOspCHTOQiG/nISE6ykpfM5CY7+clQjrKUp0zlKlv5yljOspa3 zOUue/nLYA6zmMdM5jKb+cxoTrOa18zmNrv5zXCOs5znTOc62/nOeM6znvfM5z77+c+ADrSg B03oQhv6/9CITrSiF83oRjv60ZCOtKQnTelKW/rSmM60pjfN6U57+tOgDrWoR03qUpv61KhO tapXzepWu/rVsI61rGdN61rb+ta4zrWud83rXvv618AOtrCHTexiG/vYyE62spfN7GY7+9nQ jra0p03talv72tjOtra3ze1ue/vb4A63uMdN7nKb+9zoTre6183udrv73fCOt7znTe962/ve +M63vvfN7377+98AD7jAB07wghv84AhPuMIXzvCGO/zhEI+4xCdO8Ypb/OIYz7jGN87xjnv8 4yAPuchHTvKSm/zkKE+5ylfO8pa7/OUwj7nMZ07zmtv85jjPuc53zvOe+/znQP8PutCHTvSi G/3oSE+60pfO9KY7/elQj7rUp071qlv96ljPuta3zvWue/3rYA+72MdO9rKb/exoT7va1872 trv97XCPu9znTve62/3ueM+73vfO9777/e+AD7zgB0/4whv+8IhPvOIXz/jGO/7xkI+85CdP +cpb/vKYz7zmN8/5znv+86APvehHT/rSm/70qE+96lfP+ta7/vWwj73sZ0/72tv+9rjPve53 z/ve+/73wA++8IdP/OIb//jIT77yl8/85jv/+dCPvvSnT/3qW//62M++9rfP/e57//vgD7/4 x0/+8pv//OhPv/rXz/72u//98I+//OdP//rb//74z79n/vfP//77//8AGIAqEQAEKIAG2EkA kIAEWIDYpoALqG0AsIABAADaJoEJSIHXZoEXiIHUpoEbWG0e+IEdSIAbKILRFoEkWIIXOG0o OIEqmIDW9oIrKG0SWIMSOG02mIM4mIM12D0JAAAh+QQFkAAGACwDAOgDDAaIBAAD/2i63P4w ykmrvTjrzbv/YCiOZGmeaKqubOu+cCzPdG3feK7vfO+PhKBwSBQKjsikEvlrOp/QqHRKrVqv 2Kx2y+16v+Awt0gmLs9KsXrNbrvf8Lh8Tq/b7/g8tswnoP8CeoKDhIWGh4iJiouMjY6MfWWA aI+VlpeYmZqbnJ2en6AmkWSTZ6GnqKmqq6ytrq+wq6NFpUuxt7i5uru8vb6/wA2zZrVJwcfI ycrLzM3Ozy3DQ0gD1dbVptDa29zd3t/g4YXSRkfX19ni6uvs7e7v8PEY5EHU59i28vr7/P3+ /wA30fOzBF2+gAgTKlzIsKFDHQPPGEzzsKLFixgzakwYsf+gtXQbQ4ocSbKkyVcdlUw0drKl y5cwY8p8Q6aATZu0POKjOLOnz59AgwpNQeSmUZzlVH48OLSp06dQo74ccrRq0iQrmUjdyrWr 16/xhBwVe/OqvZ0swapdy7at21tkkcYtUE/nAJBv8+rdy7evoCBGiwQmqBStVr+IEytezFgK 4KqQ6xa+y7Sx5cuYM2v+8BjyWMJYl/LcTLq06dOMO3suC/os5dGoY8ueTfup6lESRaetzbu3 798bb0fKbfgI8OPIkyvXJ7wP8de7l0ufTr16sLnD7eK1zr279++d5tLF3tqc7sPg06tfz14P 1dVIzd+7Z7y9/fv4849577nc/Pn/9ekn4IAEFlhDTZ/59985ARro4IMQRrhBSsUEIuGFGGYo IYXFaOjhhyC2x2EtIZZo4onKjVgKiiy26KJpKk7y4ow01thXjIDYqOOOPG6F4x89BinkkDH9 SAmRSCappEVGbrfkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmnmmWimqeaabLbp5ptw xinnnHTWaeedeOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEYq6aSUVmrppZhmqumm nHbq6aeghirqqKSWauqpqKaq6qqsturqq7DGKuustNZq66245qrrrrz26uuvwAYr7LDEFmvs scgmq+yy/8w26+yz0EYr7bTUVmvttdhmq+223Hbr7bfghivuuOSWa+656Kar7rrstuvuu/DG K++89NZr77345qvvvvz26++/AAcs8MAEF2zwwQgnrPDCDDfs8MMQRyzxxBRXbPHFGGes8cYc d+zxxyCHLPLIJJds8skop6zyyiy37PLLMMcs88w012zzzTjnrPPOPPfs889ABy300EQXbfTR SCet9NJMN+3001BHLfXUVFdt9dVYZ6311lx37fXXYIct9thkl2322WinrfbabLft9ttwxy33 3HTXbffdeOet99589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755f+YZ6755px3 7vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+7778AHL/zwxBdv/PHI J6/88sw37/zz0Ecv/fTUV2/99dhnr/323Hfv/ffghy/++OSXb/756Kev/vrst+/++/DHL//8 9Ndv//3456///vz37///AAygAAdIwAIa8IAITKACF8jABjrwgRCMoAQnSMEKWvCCGMygBjfI wQ568IMgDKEIR0jCEprwhChMoQpXyMIWuvCFMIyhDGdIwxra8IY4zKEOd8jDHvrwh0AMohCH SMQiGvGISEyiEpfIxCY68YlQjKIUp0jFKlrxiljMohb/t8jFLnrxi2AMoxjHSMYymvGMaEyj GtfIxja68Y1wjKMc50jHOtrxjnjMox73yMc++vGPgAykIAdJyEIa8pCITKQiF8nIRjrykZCM pCQnSclKWvKSmMykJjfJyU568pOgDKUoR0nKUprylKhMpSpXycpWuvKVsIylLGdJy1ra8pa4 zKUud8nLXvryl8AMpjCHScxiGvOYyEymMpfJzGY685nQjKY0p0nNalrzmtjMpja3yc1uevOb 4AynOMdJznKa85zoTKc618nOdrrznfCMpzznSc962vOe+MynPvfJz376858ADahAB0rQghr0 oAhNqEIXytCGOvShEI2oRCdK/9GKWvSiGM2oRjfK0Y569KMgDalIR0rSkpr0pChNqUpXytKW uvSlMI2pTGdK05ra9KY4zalOd8rTnvr0p0ANqlCHStSiGvWoSE2qUpfK1KY69alQjapUp0rV qlr1qljNqla3ytWuevWrYA2rWMdK1rKa9axoTata18rWtrr1rXCNq1znSte62vWueM2rXvfK 17769a+ADaxgB0vYwhr2sIhNrGIXy9jGOvaxkI2sZCdL2cpa9rKYzaxmN8vZznr2s6ANrWhH S9rSmva0qE2talfL2ta69rWwja1sZ0vb2tr2trjNrW53y9ve+va3wA2ucIdL3OIa97jITa5y l8vc5v8697nQja50p0vd6lr3utjNrna3y93ueve74A2veMdL3vKa97zoTa9618ve9rr3vfCN r3znS9/62ve++M2vfvfL3/76978ADrCAB0zgAhv4wAhOsIIXzOAGO/jBEI6whCdM4Qpb+MIY zrCGN8zhDnv4wyAOsYhHTOISm/jEKE6xilfM4ha7+MUwjrGMZ0zjGtv4xjjOsY53zOMe+/jH QA6ykIdM5CIb+chITrKSl8zkJjv5yVCOspSnTOUqW/nKWM6ylrfM5S57+ctgDrOYx0zmMpv5 zGhOs5rXzOY2u/nNcI6znOdM5zrb+c54zrOe98znPvv5z4AOtKAHTehCG/r/0IhOtKIXzehG O/rRkI60pCdN6Upb+tKYzrSmN83pTnv606AOtahHTepSm/rUqE61qlfN6la7+tWwjrWsZ03r Wtv61rjOta53zete+/rXwA62sIdN7GIb+9jITrayl83sZjv72dCOtrSnTe1qW/va2M62trfN 7W57+9vgDre4x03ucpv73OhOt7rXze52u/vd8I63vOdN73rb+974zre+983vfvv73wAPuMAH TvCCG/zgCE+4whfO8IY7/OEQj7jEJ07xilv84hjPuMY3zvGOe/zjIA+5yEdO8pKb/OQoT7nK V87ylrv85TCPucxnTvOa2/zmOM+5znfO8577/OdA/w+60IdO9KIb/ehIT7rSl870pjv96VCP utSnTvWqW/3qWM+61rfO9a57/etgD7vYx072spv97GhPu9rXzva2u/3tcI+73OdO97rb/e54 z7ve9873vvv974APvOAHT/jCG/7wiE+84hfP+MY7/vGQj7zkJ0/5ylv+8pjPvOY3z/nOe/7z oA+96EdP+tKb/vSoT73qV8/61rv+9bCPvexnT/va2/72uM+97nfP+977/vfAD77wh0/84hv/ +MhPvvKXz/zmO//50I++9KdP/epb//rYz772t8/97nv/++APv/jHT/7ym//86E+/+tfP/va7 //3wj7/850//+tv//vjPv//+98///vv//wAYgAI4gARYgAZ4gAiYgAq4gAzYgA74gBAYgRI4 gRRYgRZ4gRiYgRq4gRzYgR74gSAYgiI4giRYgiZ4gih4VwCwgiuoAAEwcCzIggwAAAIXgzQ4 gwEXgwYQADz4ggbQgv8mgz3Ygz94g/7GgkO4gy8IhEdIg0SohEUYcEnogktohP72hC6oAFaI cFsIgwsHhD5YcEIYhjCIhDwohmNIhgCng0qohkHIhFi4hkzYhmVohXHYhFt4h/1mgzKohV2o b3zIhHPIb4FohIOYgoiYiIq4iIzYiI64ARUSiZI4iZRYiZZ4iZiYiZq4iZn4X5z4iaAYiqI4 iqT/WIqb6ImmmIqquIqs2IquiB779YqyOIu0WIu2CIv6dYu6uIu82IuViIq+GIzCOIy7CIzE eIzImIykaIzK2IzO+IyRyIzQOI3USI3SWI3YmI3EeI3a2I3eaIvc+I3iOI6qGI7keI7oyInm mI7s2I6SuI7uGI/y6CT4NY/2eI9A4l/4uI/8CI/8+I/i6I8AOZDZKJAEeZDQaJAIuZDJqJAM +ZDC6JAQOZHFqI8UeZHNKJEYuZGuqJEc+ZGp6JEgOZKiKJIkeZKnaJEouZIdqZIs+ZIh6ZIw OZMlKZM0eZMp2V84uZPqaJM8+ZPv6JNAOZQrIpREeZT0eF9IuZQyYpRMHLmUJvmULxmVUlmV VnmVWJmVWrmVXNmVXnkGCQAAIfkEBZgABwAsAwDHA1cJpwQABP/wyEmrvTjrzbv/YCiOZGme aKqubOu+cCzPdG3feK7vfO//wKBEIBAaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum888 InrNbrvf8Lh8Tq/b7/i8fs/v+/+AgVxqgoWGh4iJiouMjY6PkJGSk5SVlpcmRZibnJ2en6Ch oqOkpaanqKmqT5qrrq+wsbKztLW2t7i5urtyrby/wMHCw8TFxsfIycrLOr7Mz9DR0tPU1dbX 2NnSzhZE3t/eIdza5OXm5+jp6uvs7e4x4xXg3yPx7/f4+fr7/P3+/wDt2NMwkGDAgwgTKlzI sKHDh/ycFRxXcAjEixgzatzIsaPHj37/fFWMNxKkyZMoU6pcybKlS3kT5sm0V/KlzZs4c+rc ybMnrYoUgGYQ6rOo0aNIkypdytQJ0QNPuzWdSrWq1atYszZ9GhWm1q9gw4odS7ZsOq6ZzKpd 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 A2OVWDmW+geWBoIxZJmWarmWbNmWbvmWcBmXcjmXdFmXdnmXeJmXermXfNmXfvmXgBmYgjmY hFmYhnmYiJmYirmYjNmYjvmYkBmZkjmZlFmZlnmZmJmZmrmZnNmZnvmZoBmaojmapFmapnma qJmaqrmarNmarvmasBmbsjmbtFmbtnmbuJmburmbvNmbvvmbwBmcwjmcxFmcxnmcyJmcyrmc zNmczvmc0Bmd0jmd1Fmd1nmd2Jmd2rmd3Nmd3vmd4Bme4jme5Fme5nme6Jme6rme7Nme7vme 8Bmf8jmf9Fmf9nmf+Jmf+rn/n/zZn/75nwAaoAI6oARaoAZ6oAiaoAq6oAzaoA76oBAaoRI6 oRRaoRZ6oRiaoRq6oRzaoR76oSAaoiI6oiRaoiZ6oiiaoiq6oizaoi76ojAaozI6ozRaozZ6 oziaozq6ozzaoz76o0AapEI6pERapEZ6pEiapEq6pEzapE76pFAapVI6pVRapVZ6pViapVq6 pVzapV76pWAapmI6pmRapmZ6pmiapmq6pmzapm76pnAap3I6p3Rap3Z6p3iap3q6p3zap376 p4AaqII6qIRaqIZ6qIiaqIq6qIzaqI76qJAaqZI6qZRaqZZ6qZiaqZq6qZzaqZ76qaAaqqI6 qqRa/6qmeqqomqqquqqs2qqu+qqwGquyOqu0Wqu2equ4mqu6uqu82qu++qvAGqzCOqzEWqzG eqzImqzKuqzM2qzO+qzQGq3SOq3UWq3Weq3Ymq3auq3c2q3e+q3gGq7iOq7kWq7meq7omq7q uq7s2q7u+q7wGq/yOq/0Wq/2eq/4mq/6uq/82q/++q8AG7ACO7AEW7AGe7AIm7AKu7AM27AO +7AQG7ESO7EUW7EWe7EYm7Eau7Ec27Ee+7EgG7IiO7IkW7Ime7Iom7Iqu7Is27Iu+7IwG7My O7M0W7M2e7M4m7M6u7M827M++7NAG7RCO7REW7RGe7RIm7RKu7RM27RO+/+0UBu1Uju1VFu1 Vnu1WJu1Wru1XNu1Xvu1YBu2Yju2ZFu2Znu2aJu2aru2bNu2bvu2cBu3cju3dFu3dnu3eJu3 eru3fNu3fvu3gBu4gju4hFu4hnu4iJu4iru4jNu4jvu4kBu5kju5lFu5lnu5mJu5mru5nNu5 nvu5oBu6oju6pFu6pnu6qJu6qru6rNu6rvu6sBu7sju7tFu7tnu7uJu7uru7vNu7vvu7wBu8 wju8xFu8xnu8yJu8yru8zJuthNC80DsLzxu91OsK01u92LsKnJi93OsI29u94JsI3xu+5CsI 41u+6CsFwBcg4pC+7ksbEjkT9fC+9FsGqgEY9Zv/v2LgiRtAER1wvvobwEEoOBKJAbYhwAh8 BbWHVwZcwAn8wFXwF/MLwRTMeiAQGgBcwRrsAhIsAhm8wSCcAh3cviFcwkIwwhdswiochCls GSv8ws1AwhMMwzRcA5WBvzWcwzLwGR/wwTr8w14hw/0LxEQMA7XhwEWcxEq8xEzcxE78xFAc xVI8xVRcxVZ8xVicxVq8xVzcxV78xWAcxmI8xmRcxmZ8xmicxmq8xmzcxm78xnAcx3I8x3Rc x3Z8x3icx3q8x3zcx378x4AcyII8yIRcyIZ8yIicyIq8yIzcyI78yJAcyZI8yZRcyZZ8yZic yZq8yZzcyZ78yaAcyqI8/8qkXMqmfMqonMqqvMqs3Mqu/MqwHMuyPMu0XMu2fMu4nMu6vMu8 3Mu+/MvAHMzCPMzEXMzGfMzInMzKvMzM3MzO/MzQHM3SPM3UXM3WfM3YnM3avM3c3M3e/M3g HM7iPM7kXM7mfM7onM7qvM7s3M7u/M7wHM/yPM/0XM/2fM/4nM/6vM/83M/+/M8AHdACPdAE XdAGfdAIndAKvdAM3dAO/dAQHdESPdEUXdEWfdEYndEavdEc3dEe/dEgHdIiPdIkXdImfdIo ndIqvdIs3dIu/dIwHdMyPdM0XdM2fdM4ndM6vdM83dM+/dNAHdRCPdREXdRGfdRIndRKvdRM 3f/UTv3UUB3VUj3VVF3VVn3VWJ3VWr3VXN3VXv3VYB3WYj3WZF3WZn3WaJ3War3WbN3Wbv3W cB3Xcj3XdF3Xdn3XeJ3Xer3XfN3Xfv3XgB3Ygj3YhF3Yhn3YiJ3Yir3YjN3Yjv3YkB3Zkj3Z lF3Zln3ZmJ3Zmr3ZnN3Znv3ZoB3aoj3apF3apn3aqJ3aqr3arN3arv3asB3bsj3btF3btn3b uJ3bur3bvN3bvv3bwB3cwj3cxF3cxn3cyJ3cyr3czN3czv3c0B3d0j3d1F3d1n3d2J3d2r3d 3N3d3v3d4B3e4j3e5F3e5n3e6J3e6r3e7N3e7v3e8B3f8j3f9F3f9n3/3/id3/q93/zd3/79 3wAe4AI+4ARe4AZ+4Aie4Aq+4Aze4A7+4BAe4RI+4RRe4RZ+4Rie4Rq+4Rze4R7+4SAe4iI+ 4iRe4iZ+4iie4iq+4ize4i7+4jAe4zI+4zRe4zZ+4zie4zq+4zze4z7+40Ae5EI+5ERe5EZ+ 5Eie5Eq+5Eze5E7+5FAe5VI+5VRe5VZ+5Vie5Vq+5Vze5V7+5WAe5mI+5mRe5mZ+5mie5mq+ 5mze5m7+5nAe53I+53Re53Z+53ie53q+53ze537+54Ae6II+6IRe6IZ+6Iie6Iq+6Ize6I7+ 6JAe6ZI+6ZRe6ZZ+6Zie6Zq+6Zze6Z7+6aAe/+qiPuqkXuqmfuqonuqqvuqs3uqu/uqwHuuy Puu0Xuu2fuu4nuu6vuu83uu+/uvAHuzCPuzEXuzGfuzInuzKvuzM3uzO/uzQHu3SPu3UXu3W fu3Ynu3avu3c3u3e/u3gHu7iPu7kXu7mfu7onu7qvu7s3u7u/u7wHu/yPu/0Xu/2fu/4nu/6 vu/83u/+/u8AH/ACP/AEX/AGf/AIn/AKv/AM3/AO//AQH/ESP/EUX/EWf/EYn/Eav/Ec3/Ee //EgH/IiP/IkX/Imf/Ion/Iqv/Is3/Iu//IwH/MyP/M0X/M2f/M4n/M6v/M83/M+//NAH/RC P/REX/RGf/RIn/RKv//0TN/0Tv/0UB/1Uj/1VF/1Vn/1WJ/1Wr/1XN/1Xv/1YB/2Yj/2ZF/2 Zn/2aJ/2ar/2bN/2bv/2cB/3cj/3dF/3dn/3eJ/3er/3fN/3fv/3gB/4gj/4hF/4hn/4iJ/4 ir/4jN/4jv/4kB/5kj/5lF/5ln/5mJ/5mr/5nN/5nv/5oB/6oj/6pF/6pn/6qJ/6qr/6rN/6 rv/6sB/7sj/7tF/7tn/7uJ/7ur/7vN/7vv/7wB/8wj/8xF/8xn/8yJ/8yr/8zN/8zv/80B/9 0j/91F/91n/92J/92r/93N/93v/94B/+4j/+5F/+5n/+6J/+6r/+7N/+7v/+8B//8j//9F// //Z///if//q///zf//7///////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// ////////////////b+cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAADJEmIhFmIhFmIhFmIhBgFNNlDtxVlv3v0HQ3EkS/NEU3VlW/eFY3mm a/vGc33ne/8HBoVDYtF4RCaVS2bT+YRGpVNqTHDFZrVbbtf7BYfFY+zEfEan1Wt22/2Go6tz et1+x+f1e37f/wcMFBwkLDQ8RExUXGTsIXuEjJScLIuzvMTM1JRo7PT8BA0VHSUtNT1FTVVd ZW11fYX9oJylrY3cxM3VxYzt9f0FDhYeJv8uNj5GTlZeZia1fYaOvtqlrrbmbM7W3ubu9v4G DxcfJy83P5VOV7+9bne/PI+Xn6evt7/Hz9dfYein6Wfwz98MgAIDEhy4T946hg29vIMYcY1C ihUtXsSYUeNGjhgKcviII2SMkTBKvjjpImWLladadhThUOZMiTVtNgmQM0POnAd8/gQaVOhQ okWNHkWaVOlSpk2dPoUaVepUqlWtXsWaVetWrl29fgUbVuxYsmXNnkWbVu1atm3dvoUbV67Y Gy0BJqxxFyHeu331hvhbwS/eEYE9vuxgePDBEooXG2bBOApinDwtX94K4rLODzx9zATN0OZo iDA8c9gcYMNlDDz/576GHVv2bNq1bd/GnVv3bt69ff8GHlz4cOJC6xK+0Fck5ROOHyMHOfJ5 45OLqfN9fF3yc+YioDfpriT1Zq2dx3PWkJpHaPbSSL+/9sLy6vOqL3g+DcBycf79/f8HMEAB BySwQAMPRDBBBRes7TjJMggvBchUKom77yCscDrvqstuQ8K4KyxDEFm6cIkIkajPNaw0q48+ 9XRoL0Zb4KNxF/nya63F+3TKT0UGfwQySCGHJLJII49EMkkllyzSwSImJPHDEgET8bAHPYDM uSujk/LBCLOcMkoqTozCx6pYRK+C+XZCD8cbZISTkhrn3MQF1thMUz8c8eNsPyb/BDRQ/0EH JbRQQw9FNFFFs3JyCCgj43DLEJGLlEpKL5UUQ0w1tfRKMk34NIhQK+vJqhDcVDNPPe2zAFUa 4oQVEjpnhYcFM4VydU8e+yx1UV9/BTZYYYcltlhjjxW2USEe5adSCZ1NLkzBqtSAuQmhxRJb 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 JMESNMETRMEUVMEVZMEWdMEXhMEYlMEZpMEatMEbxMEc1MEd5MEe9MEfBMIgFMIhJMIiNMIj RMIkVMIlZMImdMInhMIolMIppMIqtMIrxMJ9MYAt5EIu9MBZ6MIw/MIxJMMyNMP/M0TDNFTD NWTDNnTDN4TDOJTDOaTDOrTDO8TDPNTDWgjDLoyTPjyXPvRCyBnELijEPSw/MbQFQByDQ0TE R4TESJTESaTESrTES8TETNTETeTETvREIRPELfxDRVwHAxCDUDRFPkRFR/wCVsQCUgyDVPzE mQjFRYTFVvTDWdTFXeTFXvTFXwTGYBTGYSTGYjTGY2wIV4QTRlQHUYwEZYSEVYTGLYDGW/QC Z0RGSkBFVczFWOzGbATHcBTHcSTHcjTHc0THdFTHdZzDaVxGbJQGdzREeNRGaZRFb7xHaqTH a9xHdryCbpRHMghIAbBGfzTIg0TIhFTIhWTIhnTIh4RI//obSPaYyGjsR3y0xXychIoEA44c R498hIEsyIgkyZI0yZNEyZRUyZVkyZZERJB0CJjEyGe8SIvUSEmQSX28SX/MyZnEx5p0yaAU yqEkyqI0yqNEyqQsyZ5sRqAEQ6ecx520yYyEBqY0RqvkR6nUgpFUyq70yq8Ey7AUy7Eky7Lc OY/8xqjExmqEyn9Myyywx0ZsS58UyFx0RWbkgrh8BkGMyrwESq6Ey7f0S6jkS1wETLfUSoLs x2kUScE0y8eEzMiUzMmkzMq0zJWsyFocTEBky8RUzMLcSmmUS888xbl8Rc5cTMDUS1oQzdC8 SWXcRrXkSs3USdoMzNi8Tdw8zf/X/EvTxMrLBM7gFM7hJM7iNM7jTETf1M3dXMWs7MjmdM3l dE5uDMnWjM7ehE7WtE7EHMzNxMvc/E7mDM/PlM7VRMzyTE2tnMjfRM72dM/3hM/4lM/5PM7G hEdW/EbVdEpHZEzTvM2MtM3/FE/DHM145M8D5U2NzE/8PMS3XFAFRdB8TMsJ3U7u1EkCLVD6 1NAN5dAO9dAPBdGWtM8LFdAS7cuslNDOxEn/RFHQNNHzxFC6pEoS3c3udE0ardEb1dEXvUt6 7FGpdMcfjVEZDdEiNdIjRdIkVdIlhcSAFNIX/cznVM/0nM6p5MYAtdAdtVEi1U7SzFIeVU4v jVIcHdP/0hRTKNXSHD1RM2XSNnXTN4XTOJXTOY0VJzXPMlXTNd1SNP3SujzTKuXS/vRS9oTR QPXRMPXT7GTO0fzTIKVSQJVSOpXUSaXUSrXUS1VSO61QBk1MQd3TNM3QLvXTTwVVPd1LFy1V BB1VRkXP8RRPTY1UMi3Va8TUWrXVW8XVXNVVr9RURSXP3IxVU+1TPg3WpxTTJxXWZL3SgkTW YYVUw/TV85xNLJ3VPLXWas3LXdXWbeXWbvXWb81GWE1UVyVWPL3Wc+VSmjzWR1VWWa1KVDXX Pl1PRFVX/STXeE1V7ATXfeXXfvXXfwXYJm3LzJROdz1XFVXXGWVTg3VWUm3K/31sVnxtV4Zl 1Ip91nyd0j8N2I3l2I712I8FWYocWBaF14mN2HK92IQN1XIdUdBQVTKd13XVWIdtV0dN0CEN 2ZzV2Z3l2Z71WZRFV5ot1tqMzpQd2o2kV2A1Wmxd0ZuFUgeF2KiF0KldWWs92aAdVsdsWKH9 2a712q8F27DtUPu8R6idWZvF1gYlTask2LLVWonFURYlWqVd1AEt2rql21+920LFW771W73l WsAlz4xlVbE13MNF3MRVXMiMWWotWHucWmoFT3Ht0mi9U8iF1rc108etUGkdyWj13Fu808Et WawNXdEdXbtd3NVl3dZ13ddlyLZ11U1N3YK9Tso1VsvQ5csItd3TXdbxrEXYlFzS7Uzg1V3Q NV3iNUXeHd7DhN3nhd7old7pxUS01NrLTV1pHddBlVvvlFxFZN7SfdV3tddBFNSR7dVOvVfi Tdfbldfs3Vrqld/5pd/6td8y7N3qTNCZbY/8vd//BeAAFuABJuDfZduLJNSHXd8CZuAGduAH huDX9d+qTd5AHN4IxuAM1uAN5mAJ5lT+7eAQFuERJuESdmD4NeEUVuEVZuEWdl0UduEYluEZ puEa5tcLtuEc1uEd5uEeHssIAAAh+QQFLgAIACwDAMcD7AapBAAE/xDJSau9OOvNu/9gKI5k aZ5oqq5s675wLM90bd94ru987//AoCSREBqPyKRyyWw6n9CodEqtWq/YrHbL7Xq/WCJ4TC6b z+i0es1uu9/wuHxOr+PE9rx+z+/7/4CBgoOEhYaHfEWIi4yNjo+QkZKTlJWWl3aKmJucnZ6f oKGio6SlpnenqaqrrK2ur7CxsrMpmrS3uLm6u7y9vr/AthcJAsXGx8IcycDMzc7P0NHS09RO yxXEx8XXG9zV3+Dh4uPk5eak3hnp6uft7u/w8fLz9FVE93jsFusI/PX/AAMKHEiw4DR8+fTt U2awocOHECNKnAgJobaLArit80exo8ePIP9DihyZg2M/EyZJqlzJsqXLlwRNpsQGs6bNmzhz 6mQmE+XOn0CDCh1KdFHPEjOLKl3KtKnTpz+OkkgKtarVq1izXpU6gqrWr2DDih3rMaVXr2TT ql3Lti01s0jdyp1Lt65dXTM5or3Lt6/fv4D9JPW3N7Dhw4gTK7YXt9vix5AjS55MubLly5gz a97MubPnz6BDix5NurTp06hTq17NurXr17Bjy55Nu7bt27hz697Nu7fv38CDCx9OvLjx48hp EFjOvLlz5hijG0tOvbr16zmea3cuXTr27+DDiwexvTyB7tHHq1/PHrv57egxtp9Pv77v99rj X7TPv79/1/g9p5//Nv8VaOCBngXI3YDTIejggxAqpmBzDF40wAARZqjhhmtNCF2Fx1zI4Ygk lviUh8uBGCKGJrbo4os3oXieihbCaOONOFIkI4015ujjj0DSsyOPIQZp5JFIgjMkkcWwmOST UEapy3IFVFkllVZemaKFF16on5NShinmmKZgaSUBWWa5pTFdtulld2CSKeecdE5iZpp4rimA m3zCWeefgAZaCHN4FnDnmm6y2aWfgjbq6KNyEJpmc2fOuOeiK76JUZyQdurpp1xIWil8l2qq qKnacArqqqy2uoSohprXJJ+0Sqeqq7jmqusNsL43K62JRnfrrsQWa6wJvcpaKrCYbnrs/7PQ RutBsuX9OgCNw0qr7ba7Uktqm9hyK+643R6qLLgqZkvuuuz+6W1+1qbb7rz0AvqugNZee6q+ ztbr779S3rtgvrWyCfDBCD8pMIWZFmxwwhBHjOPCH6YabKoSZ6xxiUsyuPHHIGfY8YAhl2zy fyPrd/LKLLOXcnwtxyzzdS+jN/PNOBNXc3c59+zzbjt79/PQRMcWdHpFJ600akfLt/TTUEct 9dRUV2311VhnrfXWXHft9ddghy322GSXbfbZaKet9tpst+3223DHLffcdNdt991456333nz3 7fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnlmGeu+f/mnHfu+eeghy766KSXbvrp qKeu+uqst+7667DHLvvstNdu++2456777rz37vvvwAcv/PDEF2/88cgnr/zyzDfv/PPQRy/9 9NRXb/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy37/778Mcv//z012///fjnr//+/Pfv //8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIygBCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHSMIS mvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISl8jE JjrxiVCMohSnSMUqWvGKWMyiFrfIxS7/evGLYAyjGMdIxjKa8YxoTKMa18jGNrrxjXCMoxzn SMc62vGOeMyjHvfIxz768Y+ADKQgB0nIQhrykIhMpCIXychGOvKRkIykJCdJyUpa8pKYzKQm N8nJTnryk6AMpShHScpSmvKUqEylKlfJyla68pWwjKUsZ0nLWtrylrjMpS53ycte+vKXwAym MIdJzGIa85jITKYyl8nMZjrzmdCMpjSnSc1qWvOa2MymNrfJzW5685vgDKc4x0nOcprznOhM pzrXyc52uvOd8IynPOdJz3ra8574zKc+98nPfvrznwANqEAHStCCGvSgCE2oQhfK0IY69KEQ jahEJ0rRilr0/6IYzahGN8rRjnr0oyANqUhHStKSmvSkKE2pSlfK0pa69KUwjalMZ0rTmtr0 pjjNqU53ytOe+vSnQA2qUIdK1KIqTURGDSRSk/rHpTJVqU8FpLqiSsepUlWOVr3qEdXFr359 IKtaLeJUu/qwEIA1rEM86wTUula0SpFWG1CVVdnq1h/yiQO3GmtdoXgxW2VAr3t14lnp2tbA NnGwJiCsYXOI2BIodrE3bCwJHgvZGkp2BJSt7AwvK4LMajaGalWsZz/7wtA6lrRb7exXUbtE umZ1tKyFoWjxGtva2va2uM2tbnfL29769rfADa5wh0vc4hr3uMhNrnKXy9zmOve50P+NrnSn S93qWve62M2udrfL3e5697vgDa94x0ve8pr3vOhNr3rXy972uve98I2vfOdL3/ra9774za9+ 98vf/vr3vwAOsIAHTOACG/jACE6wghfM4AY7+MEQjrCEJ0zhClv4whjOsIY3zOEOe/jDIA6x iEdM4hKb+MQoTrGKV8ziFrv4xTCOsYxnTOMa2/jGOM6xjnfM4x77+MdADrKQh0zkIhv5yEhO spKXzOQmO/nJUI6ylKdM5Spb+cpYzrKWt8zlLnv5y2AOs5jHTOYym/nMaE6zmtfM5ja7+c1w jrOc50znOtv5znjOs573zOc++/nPgA60oAdN6EIb+tCITrT/ohfN6EY7+tGQjrSkJ03pSlv6 0pjOtKY3zelOe/rToA61qEdN6lKb+tSoTrWqV83qVrv61bCOtaxnTeta2/rWuM61rnfN6177 +tfADrawh03sYhv72MhOtrKXzexmO/vZ0I62tKdN7Wpb+9rYzra2t83tbnv72+AOt7jHTe5y m/vc6E63utfN7na7+93wjre8503vetv73vjOt773ze9++/vfAA+4wAdO8IIb/OAIT7jCF87w hjv84RCPuMQnTvGKW/ziGM+4xjfO8Y57/OMgD7nIR07ykpv85ChPucpXzvKWu/zlMI+5zGdO 85rb/OY4z7nOd87znvv850APutCH/070ohv96EhPutKXzvSmO/3pUI+61KdO9apb/epYz7rW t871rnv962APu9jHTvaym/3saE+72tfO9ra7/e1wj7vc5073utv97njPu973zve++/3vgA+8 4AdP+MIb/vCIT7ziF8/4xjv+8ZCPvOQnT/nKW/7ymM+85jfP+c57/vOgD73oR0/60pv+9KhP vepXz/rWu/71sI+97GdP+9rb/va4z73ud8/73vv+98APvvCHT/ziG//4yE++8pfP/OY7//nQ j770p0/96lv/+tjPvva3z/3ue//74A+/+MdP/vKb//zoT7/618/+9rv//fCPv/znT//62//+ +M+//vfP///++///ABiAAjiABFiABniACJiACriADNiADviAEBiBEjiBFFiBFniBGJiBGriB HNiBHviBIBiCIjiCJFiCJniCKJiCKriCLNiCLviCMBiDMjiDNFiDNniDOJiDOriDPNiDPviD QBiEQjiERFiERniESJiESriETNiETviEUBiFUjiFVFiFVniFWJiFWriFXNiFXviFYBiGYjiG ZFiGZniGaJiGariGbNiGbviGcBiHcjiHdFiHdniHeJiHeriHfNiHfviHgBiIgjiIhFiIhniI iJiIiriIjNiIjviIkBiJkjiJlFiJlniJmJiJmriJnNiJnviJoBiKojiKpFiKpnj/iqiYiqq4 iqzYiq74irAYi7I4i7RYi7Z4i7iYi7q4i7zYi774i8AYjMI4jMRYjMZ4jMiYjMq4jMzYjM74 jNAYjdI4jdRYjdZ4jdiYjdq4jdzYjd74jeAYjuI4juRYjuZ4juiYjuq4juzYju74jvAYj/I4 j/RYj/Z4j/iYj/q4j/zYj/74jwAZkAI5kARZkAZ5kAiZkAq5kAzZkA75kBAZkRI5kRRZkRZ5 kRiZkRq5kRzZkR75kSAZkiI5kiRZkiZ5kiiZkiq5kizZki75kjAZkzI5kzRZkzZ5kziZkzq5 kzzZkz75k0AZlEI5lERZlEZ5lEiZlEq5lEzZlE75lFAZ/5VSOZVUWZVWeZVYmZVauZVc2ZVe +ZVgGZZiOZZkWZZmeZZomZZquZZs2ZZu+ZZwGZdyOZd0WZd2eZd4mZd6uZd82Zd+6UYBEJiB uYqCWZiDeYqGmZiIGZgA0JiNKZimKJiOOZmQSYqSOZmPeZiRWJl/2ZkX55iFuQGO2YmZyZiY WZqYGQCbCACFeZqgmZiaiYmt6ZqvqZiZOJu0SZmheZuXmZuj6Ym46Zu0KZmV2JvCOZyMOYms aZrHOZyXuJwB0Jy5SZyWKJ2uGZuUCJu22QEAUJzaGZy12ZqW+J3gWZrJ6ZnomZ7quZ7s2Z7u aV4HEJ/yOZ/0WZ/2eZ/4mZ/6uf+f/Nmf/vmfABqgAjqgBFqgAMokCJqgCrqgDNqgDvqgEBqh EjqhFFqhFnqhGJqhGrqhHNqhHvqhIBqiIjqiJFqiJnqiKJqiKrqiTGKgLvqiMBqjMjqjNFqj McqiOJqjOrqjPNqjPvqjQBqkQjqkRFqkRnqkSJqkSrqkJmqjTvqkUBqlUjqlL8qkVnqlWJql WrqlXNqlXvqlYBqmYjqmZFqmF0GlaJqmarqmbEqgZvqmcBqncjqndFqndnqneJqnerqnTdqm fvqngBqoT8qnhFqohnqoiJqoirqojNqojlqnghqpkjqplJqfj3qpmJqpmrqpnNqpnvqpoDqm lTqqpFr/qmwaqqiaqqq6qqzaqq76qrCaqGlqALRaq6bqp7aqn7Waq7c6oLyKn7EarMI6rMRa rMZ6rMiarCAyq7tqAL1aoM0arbR6n82qq9Uao9I6rTbqrPn5q/eprOAaruI6ruRaruZ6rkzK rLv6rASarddan+9KrfHqou6qrTJqr/LKrZaKrvzar/76rwAbsAIbsGzqrezqn/VqsPKpsPl6 rwnrsPrasPo5sBRbsRZ7sRibsRp7pwWLrweLsB67rSELrSHLsL46svNpsvK5sSzbsi77sjAb szK7oR0bsR/bnyqLrSh7sjYbnzn7nzn7szM7tERbtEZ7tEhLsTV7swD6sy/q/7Qg27MHALX8 GbQ7u7JJm7Vau7Vc27Ve66gLm6vzap/rWrVXy7Twerb0Ga1RG7VS67Mjq7DZmq/umrbcOq9f m7d6u7d827d+a6RhO63Sip9za61vi7Zkq7YpO7aEq7iFu7ZxW7L1ard1C7nO+rh/m7mau7mc 27meq6CBO7mUy7bdqrg827YQC7SMK7Gl+7iBm7g9+7CWW7mLK7oH8Lm4m7u6u7u8u7W1a69l +7u1a7gi67Sry7OuC7uo27j4arByK7mxu7NW+6tl27vWe73Ym73aa67CO7yWa7etW7yOG7xP a7usu5/TC77eu75me7jTG73cur3yO7/0W7/2i6nsG/++6nu+EDu+VNu+ybu/6Hu1z2uzCXu4 ysu/Avy6t3u/DvzAEBzBEtyl+cu85rvAqYuzpru8qovA32vBtAu3IQy7pJvAzJvAE5zCKrzC LNzCfSrCGiy7Coy4MzzAHlzBvzvCIzy6JYzBH/zBLhzEQjzERFzEy8rANnzBP0zD+tu0G6yy B2zAGzy1MuzDOJyrRpzFWrzFXBzBOGzCTnzDTPy/SGzDTWzGHAzDNVzGDNzFbvzGcBzHnPvF VozGTHzGaYzHS0y8MQzGe+zDWCzHgjzIhFzIMkvHf9zHd6zH7ZvHiJzIM2yy6au+hlzJlnzJ mHyuj7zJfpzBjezJHezInEz/xWKsxt3byYkcyJm8yqzcyq6MqqNMyhFLvnVsoMebw6Asyqh8 yrIMySSMy+frsQUcn69czMZ8zMhMqLEsy4ObwwHcrrRMt6WsyEmswwdMws3Mxoa7w84szJEb v8kczuI8zuS8pcvMzNEcxTprvNFMsqWszt3cw/EMvx1crVCczabsveW8z/zcz/6so+cswigL zzBKtWRsx9tszVU8umsMwvmMzfRMyf880RRd0RZdoYuc0RoNqBfd0R790SAdHxs90iRNpSF9 0iid0hNd0izd0jSq0jAd0zL9yi5d0zbtpjOd0zq903B80z790/vJ00I91ETdwkB91EiNtUW9 1EzdKNTam9RQ/dNOPdVUXdVzHNVY7dJWvdVc3dVam9VgXdJePdZkXdYsGwEAIfkEBVEABAAs AwDHA+wGqQQAA/9Iutz+MMpJq7046827/2AojmRpnmiqrmzrvnAsz3Rt33iuCILu/8CgcEgs Go/IpHLJbDqf0Kh0Sq1ar1Aedsvter/gsHhMLpvP6LR6zW7DtO64fE6v2+/4vH7P7/v/dD2A g4SFhoeIiYqLjI2Oj26CkJOUlZaXmJmam5ydnm+foaKjpKWmp6ipqqshkqyvsLGys7S1tre4 rg+6DbwTvrjBwsPExcbHyMlFwAy+zBLPytLT1NXW19jZm9EQ3N3a4OHi4+Tl5udNutHOFd7o 7/Dx8vP09ciu3MD59vz9/v8AAwpEJGnft18DEypcyLChw4dC3O3wIBGixYsYM2rcWK//YkUH HzmKHEmypMmTpjxSRMmypcuXMGMOUtkhpMybOHPq3MnzBk0ONnsKHUq0qFGiPzcEPcq0qdOn UBV+XLo0qtWrWLNqTTa15tavYMOKHSsrpMSqZNOqXcu2rR2b7tC6nUu3rt276bwixMu3r9+/ gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOrXs26tevX sGPLnk279goeuHPrzm27t+/fwI3sHq47uPHjyJOrIM5crvLn0KPXbk5cuvXr2I9TH569u/fv rbfvBk++vPnO4oufX8++PeP0vIE6d0+/vv2X8HHXnH+/v////xblB4dS/AFo4IEI2iOgcwUm 6OCDEF6zYCsRVmjhhehMCEKDGHbo4YelaPgBhyCWaOKJk+A2wIoD8MDiivH1kgGJKNZo441+ qMiiAC/uOOBEGtCI45BEFrmGjj0m+WNQQhrp5JNQYpFbj0i2WNAu7USp5ZZcHlmlbj4uoA8F TXZp5plo0jAljM0BieVeacYp55xHrGklc24qReeefPZpg53U5Rmkn4QWaqgJgLZJQFVlHuro o1smiueiK0Fq6aWYLopkoJTqlemnoPIpaXWdAhXqqaiiOSp3gmLQaKqwxlrfquO1esGrsuaq K3i0qmfrQbsGK+yHvcb4K0jDJqtshP/F6ocsnMtGK+19Ik5r7bXMCojtttweWG234Ia73rfi lmsuduSeq+662mnL7rvw/pZuvPTWq9q89uarL2j47uvvvwAHLPDABBds8MEIJ6zwwgw37PDD EEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds880456zz zjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZcd+3112CHLfbYZJdt 9tlop6322my37fbbcMct99x012333XjnrffefPft99+ABy744IQXbvjhiCeu+OKMN+7445BH LvnklFdu+eX/mGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y012777bjnrvvu vPfu++/ABy/88MQXb/zxyCev/PLMN+/889BHL/301Fdv/fXYZ6/99tx37/334Icv/vjkl2/+ +einr/767Lfv/vvwxy///PTXb//9+Oev//789+///wAMoAAHSMACGvCACEygAhfIwAY68IEQ jKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrrwhTCMoQxnSMMa2vCG OMyhDnfIwx768IdADKIQh0jEIhrxiEhMohKXyMQmOvGJUIyiFKdIxSpa8YpYzKIW/7fIxS56 8YtgDKMYx0jGMprxjGhMoxrXyMY2uvGNcIyjHOdIxzra8Y54zKMe98jHPvrxj4AMpCAHSchC GvKQiEykIhfJyEY68pGQjKQkJ0nJSlrykpjMpCY3yclOevKToAylKEdJylKa8pSoTKUqV8nK VrrylbCMpSxnScta2vKWuMylLnfJy1768pfADKYwh0nMYhrzmMhMpjKXycxmOvOZ0IymNKdJ zWpa85rYzKY2t8nNbnrzm+AMpzjHSc5ymvOc6EynOtfJzna6853wjKc850lPg/2oni28Jz5X qM995tOfL8QVQBEo0IEasKAG3d46oDGjhArQIDIalEMBCP8XU02UohGNADvIdFGMiomjb2Jo R/13JWhlVKMjJamrKpXS/SVFoi3V30sbGlOZrtRTNb3fTG+aU53yVE899elPaRrU+nXFokWl n1lulVSbwtSkTVUqToEV1apa9apYzapWt8rVrnr1q2ANq1jHStaymvWsaE2rWtfK1ra69a1w jatc50rXutr1rnjNq173yte++vWvgA2sYAdL2MIa9rCITaxiF8vYxjr2sZCNrGQnS9nKWvay mM2sZjfL2c569rOgDa1oR0va0pr2tKhNrWpXy9rWuva1sI2tbGdL29ra9ra4za1ud8vb3vr2 t8ANrnCHS9ziGve4yE2ucpfL3Ob/Ove50I2udKdL3epa97rYza52t8vd7nr3u+ANr3jHS97y mve86E2vetfL3va6973wja9850vf+tr3vvjNr373y9/++ve/AA6wgAdM4AIb+MAITrCCF8zg Bjv4wRCOsIQnTOEKW/jCGM6whjfM4Q57+MMgDrGIR0ziEpv4xChOsYpXzOIWu/jFMI6xjGdM 4xrb+MY4zrGOd8zjHvv4x0AOspCHTOQiG/nISE6ykpfM5CY7+clQjrKUp0zlKlv5yljOspa3 zOUue/nLYA6zmMdM5jKb+cxoTrOa18zmNrv5zXCOs5znTOc62/nOeM6znvfM5z77+c+ADrSg B03oQhv6/9CITrSiF83oRjv60ZCOtKQnTelKW/rSmM60pjfN6U57+tOgDrWoR03qUpv61KhO tapXzepWu/rVsI61rGdN61rb+ta4zrWud83rXvv618AOtrCHTexiG/vYyE62spfN7GY7+9nQ jra0p03talv72tjOtra3ze1ue/vb4A63uMdN7nKb+9zoTre6183udrv73fCOt7znTe962/ve +M63vvfN7377+98AD7jAB07wghv84AhPuMIXzvCGO/zhEI+4xCdO8Ypb/OIYz7jGN87xjnv8 4yAPuchHTvKSm/zkKE+5ylfO8pa7/OUwj7nMZ07zmtv85jjPuc53zvOe+/znQP8PutCHTvSi G/3oSE+60pfO9KY7/elQj7rUp071qlv96ljPuta3zvWue/3rYA+72MdO9rKb/exoT7va1872 trv97XCPu9znTve62/3ueM+73vfO9777/e+AD7zgB0/4whv+8IhPvOIXz/jGO/7xkI+85CdP +cpb/vKYz7zmN8/5znv+86APvehHT/rSm/70qE+96lfP+ta7/vWwj73sZ0/72tv+9rjPve53 z/ve+/73wA++8IdP/OIb//jIT77yl8/85jv/+dCPvvSnT/3qW//62M++9rfP/e57//vgD7/4 x0/+8pv//OhPv/rXz/72u//98I+//OdP//rb//74z7///vfP//77//8AGIACOIAEWIAGeIAI mIAKuIAM2IAO+IAQGIESOIEUWIEWeIEYmIEauIEc2IEe+IEgGIIiOIIkWIImeIIomIIquIIs 2IIu+IIwGIMyOIM0WIM2eIM4mIM6uIM82IM++INAGIRCOIREWIRGeIRImIRKuIRM2IRO+IRQ GIVSOIVUWIVWeIVYmIVauIVc2IVe+IVgGIZiOIZkWIZmeIZomIZquIZs2IZu+IZwGIdyOId0 WId2eId4mId6uId82Id++IeAGIiCOIiEWIiGeIiImIiKuIiM2IiO+IiQGImSOImUWImWeImY mImauImc2Ime+ImgGIqiOIqk/1iKpniKqJiKqriKrNiKrviKsBiLsjiLtFiLtniLuJiLuriL vNiLvviLwBiMwjiMxFiMxniMyJiMyriMzNiMzviM0BiN0jiN1FiN1niN2JiN2riN3NiN3viN 4BiO4jiO5FiO5niO6JiO6riO7NiO7viO8BiP8jiP9FiP9niP+JiP+riP/NiP/viPABmQAjmQ BFmQBnmQCJmQCrmQDNmQDvmQEBmREjmRFFmRFnmRGJmRGrmRHNmRHvmRIBmSIjmSJNlmAKAA AdAAKUkAJ0mELRkAK0kAMKkALTmEAHCSMJmSOcmSNWmTN5mTMHmTN2mEQ+kAQgmFRUmEO3mU K9mTQv+4kwzQlEUIlQzwklM5kw1glUqJlQtQlDH5lFxJkzj5lWDZlF55hGS5AGG5hGvpkjXZ liUZl3I5l3RZl3Z5l2C1IHq5l3zZl375l4AZmII5mO4idIR5mIiZmIq5mIzZmIpimI4ZmZI5 mZRZmYlJdJaZmZq5mZypmZjZmaAZmqI5mnr5maR5mqiZmqFpmqrZmq75morJmrA5m7RZm/kh m7aZm7qpm7i5m775m6rZm8A5nMTJmcJZnMiZnI55nMrZnM4pmMz5nNI5nYUZdNR5ndjZLzqX ndzZnZMCmd4Znt4ZneJZnslJnuaZnsCJnurZnrnJnu4Zn7AJn/JZn6lJn/ZxmZ+iiZ/62Z+b yZ/+GaCUCaACWqCNSaAGmqCIiaAK2qCByaAOGqF8CaESWqG3OXQWmqGMSaEa2qGsAp4eGqJ/ yaEiGqIkWqIdeqIomqEquqIV2qIuGqEwGqMNOqM0eqM4mqM6uqM82qM++qNAGqQumgAAIfkE BRQAAgAsHgPoA0sDVwQAA/8outz+MMpJq7046827/2AojmRpnmiqrmzrvnBDzHRt03Gu73zv /8CgcEgsGo/Am9KGbDqf0Kh0Sq1ar1jHckvIer/gsHhMLpvP3OV5zW673/C4HJtWzu/4vH7P 77/rN36Cg4SFhoeIHYBMiY2Oj5CRkleLNZOXmJmam5wclTidoaKjpKV8nzOmqqusra5PqF2v s7S1trcfsbi7vL2+rrq/wsPExYjBxsnKy8xlyM3Q0dLTQ8/U19jZ2iLW297f4OE0BeTl5uWp 4err7NHj5/AF6e309fa47/Hm8/f9/v+hugEcSLBgIYEGEypc6AYhw4cQI1rJp48cP4kYM2o0 QrH/4sWNIEOKdNFR38eRKFOqVIRqpcuXMCc4jEmzJsiZNnPqXIhzp8+f/XoCHUoUnNCiSJNK O6q0qVNiTJ9KnWorKtWrWE1Zzcq1a6atXsOKTQR2rNmzp1qiXcv2mNq2cOPKnUu3rt27ePPq 3cu3r9+/gAMLHky4sOHDiBMrXsy4sePHkCNLnky5suXLmDNr3sy5s+fPoEOLHk26tOnTqFOr Xs26tevXsGPLnk27tu3buHPr3s27t+/fwIMLH068uPHjyJMrX868ufPn0KNLn069uvXr2LNr 3869u/fv4MOLH0++vPnz6NOrX8++vfv38OPLn0+/vv37+PPr38+/v////wAGKOCABBZo4IEI Jqjgggw26OCDEEYo4YQUVmjhhRhmqOGGHHbo4YcghijiiCSWaOKJKKao4oostujiizDGKOOM NNZo44045qjjjjz26OOPQAYp5JBEFmnkkUgmqeSSTDbp5JNQRinllFRWaeWVWGap5ZZcdunl l2CGKeaYZJZp5plopqnmmmy26eabcMYp55x01mnnnXjmqeeefPbp55+ABirooIQWauihiCaq 6KKMNuroo5BGKumklFZq6aWYZqrpppx26umnoIYq6qiklmrqqaimquqqrLbq6quwxirrrLTW auutuOaq66689urrr8AGK+ywxBZr7LHIJqvssv/MNuvss9BGK+201FZr7bXYZqvtttx26+23 4IYr7rjklmvuueimq+667Lbr7rvwxivvvPTWa++9+Oar77789uvvvwAHLPDABBds8MEIJ6zw wgw37PDDEEcs8cQUV2zxxRhnrPHGHHfs8ccghyzyyCSXbPLJKKes8sost+zyyzDHLPPMNNds 880456zzzjz37PPPQAct9NBEF2300UgnrfTSTDft9NNQRy311FRXbfXVWGet9dZcd+3112CH LfbYZJdt9tlop6322my37fbbcMct99x012333XjnrffefPft99+ABy744IQXbvjhiCeu+OKM N+7445BHLvnklFdu+eX/mGeu+eacd+7556CHLvropJdu+umop6766qy37vrrsMcu++y01277 7bjnrvvuvPfu++/ABy/88MQXb/zxyCev/PLMN+/889BHL/301Fdv/fXYZ6/99tx37/334Icv /vjkl2/++einr/767Lfv/vvwxy///PTXb//9+Oev//789+///wAMoAAHSMACGvCACEygAhfI wAY68IEQjKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrrwhTCMoQxn SMMa2vCGOMyhDnfIwx768IdADKIQh0jEIhrxiEhMohKXyMQmOvGJUIyiFKdIxSpa8YpYzKIW /7fIxS568YtgDKMYx0jGMprxjGhMoxrXyMY2uvGNcIyjHOdIxzra8Y54zKMe98jHPvrxj4AM pCAHSchCGvKQiEykIhfJyEY68pGQjKQkJ0nJSlrykpjMpCY3yclOevKToAylKEdJylKa8pSo TKUqV8nKVrrylbCMpSxnScta2vKWuMylLnfJy1768pfADKYwh0nMYhrzmMhMpjKXycxmOvOZ 0IymNKdJzWpa85rYzKY2t8nNbnrzm+AMpzjHSc5ymvOc6EynOtfJzna6853wjKc850nPetrz nvjMpz73yc9++vOfAA2oQAdK0IIa9KAITahCF8rQhjr0oRCNqEQnSv/Rilr0ohjNqEY3ytGO evSjIA2pSEdK0pKa9KQoTalKV8rSlrr0pTCNqUxnStOa2vSmOM2pTnfK05769KdADapQh0rU ohr1qEhNqlKXytSmOvWpUI2qVKdK1apa9apYzapWt8rVrnr1q2ANq1jHStaymvWsaE2rWtfK 1ra69a1wjatc50rXutr1rnjNq173yte++vWvgA2sYAdL2MIa9rCITaxiF8vYxjr2sZCNrGQn S9nKWvaymM2sZjfL2c569rOgDa1oR0va0pr2tKhNrWpXy9rWuva1sI2tbGdL29ra9ra4za1u d8vb3vr2t8ANrnCHe7MAGPe4yD3u7pLLXONtLre5yeUdAKZLXeoqV3fVzW4AfJfd6h4XALvr 7nS/C97wdve7vTuvcafLXeoyoLy/s65zgSffAMA3vfVlL37zq1/zjne97vXvf+1bXQEDgLwB zp12AZxg3HmXwQ128ICzu18E99e8FibehXeXAAAh+QQFFQAFACwDAOgDZgaIBAAD/1i63P4w ykmrvTjrzbv/YCiOZGmeaKqubOu+cCzPdG3feK7vfO//QAdhSCwaiYKkcslUBp/QqHRKrVqv 2Kx2y+16v+CweEx2Hc/GpppZbrvf8Lh8Tq/b7/i8fs/vR9CABGuDAn6Gh4iJiouMjY6PkJGS kyOBaIRrlJqbnJ2en6ChoqOkpT+WZ5hqpqytrq+wsbKztLW2IKhHqk23vb6/wMHCw8TFxiW5 abtLx83Oz9DR0tPU1TsDF8lFy8zW3t/g4eLj5OWOhRHYFtpI3Enm8PHy8/T19vcu6hXsQ+7v +AADChxIsKDBX/oo8BPk76DDhxAjSpxIsUrCdNn4+UNXsf+jx48gQ4oMeRFCyT8aG45cybKl y5cwm510MPPBwo0xc+rcybOnzyk1OXqoaTIjO5w/kypdyrSpUwpEQ0SlaVQb0qdYs2rdyjXi VKoXvjIQW+Cmyq5o06pdyxbazJpvJ3yN28CsAAN48+rN+6+t37+AAwvuBDdD1LkYGdjdyxhv 38GQI0ueTLlMYQyHK1xesLjx3seVQ4seTbr0jM1FMWtOzDmlO9OwY8ueTVsua7CGV6duffRs 7d/Agwv3i3osB8S7FdjlNry58+fQexZfQPe2deOKXXv+LDS69+/gwxecXoA8dtvJy2rfzre7 +Pfw48unRt48dd0PLnZmbwD0/P//AAYoYCz1pZcffrgp5xpzAzbo4IMQSlJdA/pwRJYC6pRU 3HLLROjhhyCGOMeF5ZF43nX3ZdfbayK26OKLMEph4kkCmHhgehzuEuOOPPboYwtBpZNQIWK5 dyKFdS3Y4Y9MNunkk+hhkaMqUFZp5ZU72qjDlJhg6eWXYA6oZQ5cEhLmmWimCd2YOJQ5iJpw xilnaWze4GYmc+ap555t1WnDnavwKeighC7lZw2A8lLooow2Gl6ibDgq6aSUzgZpN5Vmqumm nHbq6aeghirqqKSWauqpqKaq6qqsturqq7DGKuustNZq66245qrrrrz26uuvwAYr7LDEFmvs scgmq+yy/8w26+yz0EYr7bTUVmvttdhmq+223Hbr7bfghivuuOSWa+656Kar7rrstuvuu/DG K++89NZr77345qvvvvz26++/AAcs8MAEF2zwwQgnrPDCDDfs8MMQRyzxxBRXbPHFGGes8cYc d+zxxyCHLPLIJJds8skop6zyyiy37PLLMMcs88w012zzzTjnrPPOPPfs889ABy300EQXbfTR SCet9NJMN+3001BHLfXUVFdt9dVYZ6311lx37fXXYIct9thkl2322WinrfbabLft9ttwxy33 3HTXbffdeOet99589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755f+YZ6755px3 7vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+7778AHL/zwxBdv/PHI J6/88sw37/zz0Ecv/fTUV2/99dhnr/323Hfv/ffghy/++OSXb/756Kev/vrst+/++/DHL//8 9Ndv//3456///vz37///AAygAAdIwAIa8IAITKACF8jABjrwgRCMoAQnSMEKWvCCGMygBjfI wQ568IMgDKEIR0jCEprwhChMoQpXyMIWuvCFMIyhDGdIwxra8IY4zKEOd8jDHvrwh0AMohCH SMQiGvGISEyiEpfIxCY68YlQjKIUp0jFKlrxiljMohb/t8jFLnrxi2AMoxjHSMYymvGMaEyj GtfIxja68Y1wjKMc50jHOtrxjnjMox73yMc++vGPgAykIAdJyEIa8pCITKQiF8nIRjrykZCM pCQnSclKWvKSmMykJjfJyU568pOgDKUoR0nKUprylKhMpSpXycpWuvKVsIylLGdJy1ra8pa4 zKUud8nLXvryl8AMpjCHScxiGvOYyEymMpfJzGY685nQjKY0p0nNalrzmtjMpja3yc1uevOb 4AynOMdJznKa85zoTKc618nOdrrznfCMpzznSc962vOe+MynPvfJz376858ADahAB0rQghr0 oAhNqEIXytCGOvShEI2oRCdK/9GKWvSiGM2oRjfK0Y569KMgDalIR0rSkpr0pChNqUpXytKW uvSlMI2pTGdK05ra9KY4zalOd8rTnvr0p0ANqlCHStSiGvWoSE2qUpfK1KY69alQjapUp0rV qlr1qljNqla3ytWuevWrYA2rWMdK1rKa9axoTata18rWtrr1rXCNq1znSte62vWueM2rXvfK 17769a+ADaxgB0vYwhr2sIhNrGIXy9jGOvaxkI2sZCdL2cpa9rKYzaxmN8vZznr2s6ANrWhH S9rSmva0qE2talfL2ta69rWwja1sZ0vb2tr2trjNrW53y9ve+va3wA2ucIdL3OIa97jITa5y l8vc5v8697nQja50p0vd6lr3utjNrna3y93ueve74A2veMdL3vKa97zoTa9618ve9rr3vfCN r3znS9/62ve++M2vfvfL3/76978ADrCAB0zgAhv4wAhOsIIXzOAGO/jBEI6whCdM4Qpb+MIY zrCGN8zhDnv4wyAOsYhHTOISm/jEKE6xilfM4ha7+MUwjrGMZ0zjGtv4xjjOsY53zOMe+/jH QA6ykIdM5CIb+chITrKSl8zkJjv5yVCOspSnTOUqW/nKWM6ylrfM5S57+ctgDrOYx0zmMpv5 zGhOs5rXzOY2u/nNcI6znOdM5zrb+c54zrOe98znPvv5z4AOtKAHTehCG/r/0IhOtKIXzehG O/rRkI60pCdN6Upb+tKYzrSmN83pTnv606AOtahHTepSm/rUqE61qlfN6la7+tWwjrWsZ03r Wtv61rjOta53zete+/rXwA62sIdN7GIb+9jITrayl83sZjv72dCOtrSnTe1qW/va2M62trfN 7W57+9vgDre4x03ucpv73OhOt7rXze52u/vd8I63vOdN73rb+974zre+983vfvv73wAPuMAH TvCCG/zgCE+4whfO8IY7/OEQj7jEJ07xilv84hjPuMY3zvGOe/zjIA+5yEdO8pKb/OQoT7nK V87ylrv85TCPucxnTvOa2/zmOM+5znfO8577/OdA/w+60IdO9KIb/ehIT7rSl870pjv96VCP utSnTvWqW/3qWM+61rfO9a57/etgD7vYx072spv97GhPu9rXzva2u/3tcI+73OdO97rb/e54 z7ve9873vvv974APvOAHT/jCG/7wiE+84hfP+MY7/vGQj7zkJ0/5ylv+8pjPvOY3z/nOe/7z oA+96EdP+tKb/vSoT73qV8/61rv+9bCPvexnT/va2/72uM+97nfP+977/vfAD77wh0/84hv/ +MhPvvKXz/zmO//50I++9KdP/epb//rYz772t8/97nv/++APv/jHT/7ym//86E+/+tfP/va7 //3wj7/850//+tv//vjPv//+98///vv//wAYgAI4gARYgAZ4gAiYgAq4gAzYgA74gBAYgRI4 gRRYgRZ4gRiYgRq4gRzYgR74gSAYgiI4giRYgiZ4giiYgiq4gizYgi74gjAYgzI4gzRYgzZ4 gziYgzq4gzzYgz74g0AYhEI4hERYhEZ4hEiYhEq4hEzYhE74hFAYhVI4hVRYhVZ4hViYhVq4 hVzYhV74hWAYhmI4hmRYhmZ4hmiYhmq4hmzYhm74hnAYh3I4h3RYh3Z4h3iYh3q4h3zYh374 h4AYiII4iIRYiIZ4iIiYiIq4iIzYiI74iJAYiZI4iZRYiZZ4iZiYiZq4iZzYiZ74iaD4TQAw iqT/2ACj6HmkCAAPcIqdV4qrqIqfFwCyKIsL4IqeN4sMkIqxiIu1yIq3SIu9CIu7GAC56Iud x4sKYIu/SIy8KIzLOIvEqADR+IzAWADIyHnQmIyjeI2bh4ylyI2Z14ysCI6YJ46wSI6XZ47S WI3dCIyuiI6Wh4u2CI/xKIvvyI7YWI3QOI2/uADZaHr4GIoCOZAEWZAGeZAIyTEHsJAM2ZAO +ZAQGZESOZEUWZEWeZEYmZEauZEc2ZEe+ZEgWZGLFpIkWZImeZIomZIquZIsyZAj2ZIwGZMy OZM0WZMn+ZI2mZM6uZM82ZMkiZM+GZRCOZREWZNAWZRImZRKuZQXeZRM//mUUBmVQumURJkX UimUVkmRjHGVHZmVE0mVM2kAWokXXEmS/EGWELkXY6kXJ7kdLCmWE+mVEgmWMYmWEimXZdmV ZxmRahmXfVmS/JGSdsmXgxmRdNmSePmQiZmXGnmWcJmWhemXj2mWgWmSi9mQl9mQh/mWkemQ mcmYFvmZltmZHpmYotmYpMmQp7mZKymapwmad5mabSmbG7mYr3mRrkmbB8CaKpmbkwmbGXmb ICmcodmZxLmWyEmROJmVfwmZW+mcbumZaNmcwEmYv7mWwpmdmWmbxtkY1hmdmDmdbKmZiqaa ZOmd0Ime4ckeinme6lmd7Xmdkqmd8hmf1LmQ3P95nZW5nuBpnmLpGS5Znvi5n/z5ngPKntKJ oKNZn86JksT5nMXJoP5poAeQn/ZJoXuZoOC5nON5oA2aoLEpoRXaoSOqmxh5n+k5m/35oRGK nesZnyzqnzBqndg5mePJoZFJnyHqoiAKmCQaoiZ6ogpKo7hJm6ZZmEcqoj0ao9A5ozjKpJK5 o1E6o5T5mihamkMKpVJKpEt6oCuanFr6ok4qoCUapiUKoVTKpWLqo0oqoyrKkToKpCtKoOn5 o2uqpm76pGk6oRTqplt6p/Dpp8EZpGUqpwBaoHaqoX3qoVPao3rapV56qGbKqJAaqIWKmm1K qXVqoA9Kp4C6p4z6qJ//mqR/qqXHKZWneqkV+ZlxWqT6mZq++aGiKqiqSqufWqm1aqmp2qqT iqt4qqm+aquFOqvAaqG/iqupCpW7SqisyqzOKp/baaTdCZc4+qq/maQMGqug+pG8WqVw+qxg Gq7ieqaluq1ZWa02mqNyeaWqiqTTuqAmyq7fmqnBuq38ea+3+p0F+qfuCq1oia59mqHf+aPG WqXxmqhYmqmOqaiSiqjU2alZyrD9KqtkapWLCqDNiqa5urF6aaUI27GumqULu6nqSq9nypYZ +7DvupsVK56+6bI1aq29iqlCarItGqEiK7ApOrMXCqwXKrNjmmjCaqlEW7RISaxGm7RKy5NI a7u0Tvu0MNm0UDu1VPuTLWuzVZu1WguRUru1Xvu1D9m1YDu2XsubZHu2W2u2aLu2U7sRbvu2 cBu3cju3dFu3dnu3eJu3eru3fNu3fvu3gBu4gju4hFu4hnu4iJu4iru4jNu4jvu4kBu5G5EA ACH5BAUWAAMALB4D6AM5A1cEAAP/OLrc/jDKSau9OOvNu/9gKI5kaZ5oqq5s674RIc90PQt4 ru857P/AoHBILBqPyKRyySzZnjWedNesWq/YrHbL7Xq/SKiYMC0LwOi0es1uu99w7hhqnsbv +Lx+z+/7w3M2dVJ/hYaHiImKi12BgoNUjJKTlJWWl5iOUZA6mJ6foKGio0syBacFgZydpK2u r7CxsgymqKqrOLO6u7y9vnG1p7e4v8XGx8jJP8Gpc7i5ytHS09TVDczDq9bb3N3epNjOz9/k 5ebnfOFjz2fo7u/w8VbhqMI07PL5+vv8Ktj19W6M60ewoMGDEJgBDCgDH8KHECO+U9iMAMCG AyVq3Mgx/5rCGgwddhxJsiQsdTNCZjTJsqVLSSjDiXxJs6ZNPDEt2iKz8qbPn0C35FRJLKjR o0iPDN05M6nTp1BPLLXXNKrVq1gtTG1WNavXr1m3YiwKtqxZqGJ5kj3Ltq3PtF3dyp3bEW5P unjzPrS7Vq/fv/s03bsLuLDhcoIF9j3MuHG1xGO1OZ5MWRlktZIra96863JczqBDe/JMWLTp 04xIL0bNuvUf1Zldy56dBzYn2rhz697Nu7fv38CDCx9OvLjx48iTK1/OvLnz59CjS59Ovbr1 69iza9/Ovbv37+DDix9Pvrz58+jTq1/Pvr379/Djy59Pv779+/jz69/Pv7////8ABijggAQW aOCBCCao4IIMNujggxBGKOGEFFZo4YUYZqjhhhx26OGHIIYo4ogklmjiiSimqOKKLLbo4osw xijjjDTWaOONOOao44489ujjj0AGKeSQRBZp5JFIJqnkkkw26eSTUEYp5ZRUVmnllVhmqeWW XHbp5ZdghinmmGSWaeaZaKap5ppstunmm3DGKeecdNZp55145qnnnnz26eefgAYq6KCEFmro oYgmquiijDbq6KOQRirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qmopqrqqqy26uqrsMYq 66y01mrrrbjmquuuvPbq66/ABivssMQWa+yxyCar7LL/zDbr7LPQRivttNRWa+212Gar7bbc duvtt+CGK+645JZr7rnopqvuuuy26+678MYr77z01mvvvfjmq+++/Pbr778AByzwwAQXbPDB CCes8MIMN+zwwxBHLPHEFFds8cUYZ6zxxhx37PHHIIcs8sgkl2zyySinrPLKLLfs8sswxyzz zDTXbPPNOOes88489+zzz0AHLfTQRBdt9NFIJ6300kw37fTTUEct9dRUV2311VhnrfXWXHft 9ddghy322GSXbfbZaKet9tpst+3223DHLffcdNdt991456333nz37fffgAcu+OCEF2744Ygn rvjijDfu+OOQRy755JRXbvnl/5hnrvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvs tNdu++2456777rz37vvvwAcv/PDEF2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/9 9+CHL/745Jdv/vnop6/++uy37/778Mcv//z012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhM oAIXyMAGOvCBEIygBCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUw jKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGK WMyiFv+3yMUuevGLYAyjGMdIxjKa8YxoTKMa18jGNrrxjXCMoxznSMc62vGOeMyjHvfIxz76 8Y+ADKQgB0nIQhrykIhMpCIXychGOvKRkIykJCdJyUpa8pKYzKQmN8nJTnryk6AMpShHScpS mvKUqEylKlfJyla68pWwjKUsZ0nLWtrylrjMpS53ycte+vKXwAymMIdJzGIa85jITKYyl8nM ZjrzmdCMpjSnSc1qWvOa2MymNrfJzW5685vgDKc4x0nOcprznOhMpzrXyc52uvOd8IynPOdJ z3ra8574zKc+98nPfvrznwANqEAHStCCGvSgCE2oQhfK0IY69KEQjahEJ0r/0Ypa9KIYzahG N8rRjnr0oyANqUhHStKSmvSkKE2pSlfK0pa69KUwjalMZ0rTmtr0pjjNqU53ytOe+vSnQA2q UIdK1KIa9ahITapSl8rUpjr1qVCNqlSnStWqWvWqWM2qVrfK1a569atgDatYx0rWspr1rGhN q1rXyta2uvWtcI2rXOdK17ra9a54zate98rXvvr1r4ANrGAHS9jCGvawiE2sYhfL2MY69rGQ jaxkJ0vZylr2spjNrGY3y9nOevazoA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2 uM2tbnfL29769rfADa5wh0vc4hr3uMhNrnKXy9zmpDr3udCNrnSnS93qWve62M2udrfL3e56 97vgDa94x0ve8pr3vOhNr3rXy972uve98I2vfOdL3/ra9774za9+98vf/vr3vwAOcPcCQOAC GzgA+DuwghOsYAMzOAAAiHD/CgwAAVZYwANycP4A0OAC44/DHSbw/UBM4AhH2MP2I7GJTYxi +q34xSROsYT/Z2IA1pjGM/bfjTHsHwTzOEA+FmCQ+ZcAACH5BAUVAAYALB4D6AMnA1cEAAP/ aLrc/jDKSau9OOvNu/9gKI5kaZ5oqq5s65pELM+0LNx4ruNv7//AoHBILBqPyKRyOao5abuo jkmtWq/YrHbL7XqFzzBBShZ8z+i0es1uu99U8bMshdvv+Lx+z+//5E50UX6EhYaHiImKTIA1 gjuLkZKTlJWWiY1QjzmXnZ6foKGiQJkzNwOoA4KjrK2ur7CjpTYCqap0sbm6u7y9a08FBXO1 qau+x8jJyssrTsHCgcSoxszV1tfY1zXP0I7St2XZ4uPk5aHbz8O21Obt7u/wdujB6sW48fj5 +vuMBNz/3Git+wbuBr+DCBMqPBEDoEOBxWwNNLOwosWLGBs0dPgP/6LEjzwyihxJEt68bppA nhpYsqXLl8tO1rOHgyXMmzhzyqIRMNrEmvZ0Ch1KVJFMnzSBTqNYtKnTp26Oevu5cinUq1iz ZpGaMmnVW1rDih0Lhmc6pEtz2CTLtq3bJmbpoS341eDbu3jzUuBq6tuOtXoDC77L1yNdv0wH K16s1dnZs3V1AGZMufJQxw/HIFYb1LLnzzCBZY7M2Sro06gxiukYg7RSsKljy+Y3q/WmkLNz 6zZXW/PtxLuDC49Z+7fd4ciT8+ptHLjy59DPFTcevbr1TsypX9/OHdP0393Di+eTHfz48+jb lL+dvr379/Djy59Pv779+/jz69/Pv7////8ABijggAQWaOCBCCao4IIMNujggxBGKOGEFFZo 4YUYZqjhhhx26OGHIIYo4ogklmjiiSimqOKKLLbo4oswxijjjDTWaOONOOao44489ujjj0AG KeSQRBZp5JFIJqnkkkw26eSTUEYp5ZRUVmnllVhmqeWWXHbp5ZdghinmmGSWaeaZaKap5pps tunmm3DGKeecdNZp55145qnnnnz26eefgAYq6KCEFmrooYgmquiijDbq6KOQRirppJRWauml mGaq6aacdurpp6CGKuqopJZq6qmopqrqqqy26uqrsMYq66y01mrrrbjmquuuvPbq66/ABivs sMQWa+yxyCar7LL/zDbr7LPQRivttNRWa+212Gar7bbcduvtt+CGK+645JZr7rnopqvuuuy2 6+678MYr77z01mvvvfjmq+++/Pbr778AByzwwAQXbPDBCCes8MIMN+zwwxBHLPHEFFds8cUY Z6zxxhx37PHHIIcs8sgkl2zyySinrPLKLLfs8sswxyzzzDTXbPPNOOes88489+zzz0AHLfTQ RBdt9NFIJ6300kw37fTTUEct9dRUV2311VhnrfXWXHft9ddghy322GSXbfbZaKet9tpst+32 23DHLffcdNdt991456333nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy755JRXbvnl/5hn rvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvstNdu++2456777rz37vvvwAcv/PDE F2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/99+CHL/745Jdv/vnop6/++uy37/77 8Mcv//z012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIygBCdIwQpa8IIY zKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjMoQ53yMMe+vCH QAyiEIdIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFv+3yMUuevGLYAyjGMdIxjKa 8YxoTKMa18jGNrrxjXCMoxznSMc62vGOeMyjHvfIxz768Y+ADKQgB0nIQhrykIhMpCIXychG OvKRkIykJCdJyUpa8pKYzKQmN8nJTnryk6AMpShHScpSmvKUqEylKlfJyla68pWwjKUsZ0nL WtrylrjMpS53ycte+vKXwAymMIdJzGIa85jITKYyl8nMZjrzmdCMpjSnSc1qWvOa2MymNrfJ zW5685vgDKc4x0nOcprznOhMpzrXyc52uvOd8IynPOdJz3ra8574zKc+98nPfvrznwANqEAH StCCGvSgCE2oQhfK0IY69KEQjahEJ0r/0Ypa9KIYzahGN8rRjnr0oyANqUhHStKSmvSkKE2p SlfK0pa69KUwjalMZ0rTmtr0pjjNqU53ytOe+vSnQA2qUIdK1KIa9ahITapSl8rUpjr1qVCN qlSnStWqWvWqWM2qVrfK1a569atgDatYx0rWspr1rGhNq1rXyta2uvWtcI2rXOdK17ra9a54 zate98rXvvr1r4ANrGAHS9jCGvawiE2sYhfL2MY69rGQjaxkJ0vZylr2spjNrGY3y9nOevaz oA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM2tbnfL29769rfADa5wh0vc4hr3 uMhNrnKXy9zm+Dr3udCNrnSnS93qWve62M2udrfL3e5697vgDa94x0ve8pr3vOhNr3rXy972 uve98I2vfOdL3/ra9774za9+98vf/vr3vwAOsIAHTOACG/jACE6wghfM4AY7+MEQjrCEJ0zh Clv4whjOsIY3zOEOe/jDIA6xiEdM4hKb+MQoTrGK6QqAFrsYAAGIMQA8+OIWx1jGNK7xjQMw 4w7qeMcffPGOYxxkFw85AEWGsYxvnOQbKxnJOXZyj0H4ZB4/ecobxLICnFxCKXdQyjaWsZYv COYwW5mDRwayB9PM5DWzGcpdFjMHa2xkOWeZzlfO8Y95rOcXk3DPHkwAACH5BAUUAAYALB4D 6AMVA1cEAAP/aLrc/jDKSau9OOvNu/9gKI5kaZ5oqq5s61JELM+0LNx4ruNv7//AoHBILBqP yKRyGak5abuojkmtWq/YrHbL7XpHzzBBShZ8z+i0es1uu98u8bMshdvv+Lx+z++D5E50UX6E hYaHiImKLYA1gjuLkZKTlJWWbY1QjzmXnZ6foKGiIZkzm5yjqaqrrK2GpTanN660tba3uEuw MVIDA3W5wcLDxMUZu2M7vr+Dxs7P0NGsyMrLwNLY2drbftQ6y8yQ3OPk5eZa3jng1+ft7u/w KzQF9PX0muD567Px/f7/AGHIsEfwHi8B+hLyCMiwocN2AwsSjJVQ38KHGDNqLBbR/2DHAgfV WWu2saTJk6kA2QuJY584lDBjylSksh7LGy6nzNzJs6edGhJtJhPpi53Po0iTXpkRdOXQliNf Kp1KtWqQj01vIoyq06rXr2BLfJwntFpRkmHTql0r0CnTst+4omJLty7bGG7HPsUp96Ldv4Cp 4hWKVWvOuYETK9452COBglq3nh25uLLlk42bGoxSkdnlz6AbYrXptJdCM6FTq3b31mlpMvn8 rp5NW1q6U7Vz6zZ2e9Pu38Bt9X4UvLjxUcMFHV/OvFJyOs2jSz/0vMz069jzVCeTvbv3NduN fh9P3kp4tOXTq1/Pvr379/Djy59Pv779+/jz69/Pv7////8ABijggAQWaOCBCCao4IIMNujg gxBGKOGEFFZo4YUYZqjhhhx26OGHIIYo4ogklmjiiSimqOKKLLbo4oswxijjjDTWaOONOOao 44489ujjj0AGKeSQRBZp5JFIJqnkkkw26eSTUEYp5ZRUVmnllVhmqeWWXHbp5ZdghinmmGSW aeaZaKap5ppstunmm3DGKeecdNZp55145qnnnnz26eefgAYq6KCEFmrooYgmquiijDbq6KOQ RirppJRWaumlmGaq6aacdurpp6CGKuqopJZq6qmopqrqqqy26uqrsMYq66y01mrrrbjmquuu vPbq66/ABivssMQWa+yxyCar7LL/zDbr7LPQRivttNRWa+212Gar7bbcduvtt+CGK+645JZr 7rnopqvuuuy26+678MYr77z01mvvvfjmq+++/Pbr778AByzwwAQXbPDBCCes8MIMN+zwwxBH LPHEFFds8cUYZ6zxxhx37PHHIIcs8sgkl2zyySinrPLKLLfs8sswxyzzzDTXbPPNOOes8848 9+zzz0AHLfTQRBdt9NFIJ6300kw37fTTUEct9dRUV2311VhnrfXWXHft9ddghy322GSXbfbZ aKet9tpst+3223DHLffcdNdt991456333nz37fffgAcu+OCEF2744YgnrvjijDfu+OOQRy75 5JRXbvnl/5hnrvnmnHfu+eeghy766KSXbvrpqKeu+uqst+7667DHLvvstNdu++2456777rz3 7vvvwAcv/PDEF2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/99+CHL/745Jdv/vno p6/++uy37/778Mcv//z012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhMoAIXyMAGOvCBEIyg BCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUwjKEMZ0jDGtrwhjjM oQ53yMMe+vCHQAyiEIdIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGKWMyiFv+3yMUuevGL YAyjGMdIxjKa8YxoTKMa18jGNrrxjXCMoxznSMc62vGOeMyjHvfIxz768Y+ADKQgB0nIQhry kIhMpCIXychGOvKRkIykJCdJyUpa8pKYzKQmN8nJTnryk6AMpShHScpSmvKUqEylKlfJyla6 8pWwjKUsZ0nLWtrylrjMpS53ycte+vKXwAymMIdJzGIa85jITKYyl8nMZjrzmdCMpjSnSc1q WvOa2MymNrfJzW5685vgDKc4x0nOcprznOhMpzrXyc52uvOd8IynPOdJz3ra8574zKc+98nP fvrznwANqEAHStCCGvSgCE2oQhfK0IY69KEQjahEJ0r/0Ypa9KIYzahGN8rRjnr0oyANqUhH StKSmvSkKE2pSlfK0pa69KUwjalMZ0rTmtr0pjjNqU53ytOe+vSnQA2qUIdK1KIa9ahITapS l8rUpjr1qVCNqlSnStWqWvWqWM2qVrfK1a569atgDatYx0rWspr1rGhNq1rXyta2uvWtcI2r XOdK17ra9a54zate98rXvvr1r4ANrGAHS9jCGvawiE2sYhfL2MY69rGQjaxkJ0vZylr2spjN rGY3y9nOevazoA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM2tbnfL29769rfA Da5wh0vc4hr3uMhNrnKXy9zm2zr3udCNrnSnS93qWve62M2udrfL3e5697vgDa94x0ve8pr3 vOhNr3rXy972uve98I2vfOdL3/ra9774za9+98vf/vr3vwAOsIAHTOACG/jACE6wghfM4AY7 +MEQjrCEJ0zhClv4whjOsIYXE4AOezgAAFjgh0fcYQWSeMQJ/DAAVrziDyPQwyyOsYdf3OEY s3jGC7QxAHCsQB3zGIE+LnGPWyzkBt5YxTk+cgAcqGMiLxnITXYylKOcZCoP2coprnGQn2xA GG+ZxlpWMpe7fOIfk7nMYwYzkhOYAAAh+QQFFAAGACweA+gDAwNXBAAD/2i63P4wykmrvTjr zbv/YCiOZGmeaKqubIsScCzPsWDfeH67fO//wKBwSCwaj8ik8kFrznTQ3HJKrVqv2Kx2y+12 nGBCdCzwms/otHrNbrtNYSc5+q7b7/i8fs+/xJtzUH2DhIWGh4iJI380gTqKkJGSk5SVW4xP jjiWnJ2en6ChFpgympuiqKmqq6x1pDWmNq2ztLW2tz+vMLGyuL6/wMHCDbpivMPIycrLlsW8 ZczR0tPUbc7H1dna29xG17Hd4eLj5CEwBegF5+mNOAPv8O9S5fT19vbr6ATp/KU38QDl9bpH sKDBaPn4KVS3y0bAgDsOSpxIsVZCfQlhCYiXg/8jtIogQ4qsdHFGP2NkPI5cybJln4wm2aEc o9KlzZs4z8CUcVLHQ3gDcwodSvTIzhg9//0E+rGo06dQVRyFqXSpwKhYs2r9sk8mT5lVB3Rk urWs2bPEumL8itEhU3dk0cqdC3WqWoZuBcK9Srev35sl2eLd+DYv37+IE1e8yPAuLI+GDyue TLke44WNIy8NWrmzZ20ZMfsjDLHm59OomcE8OZo0U9OpY8v2ZbcduNm4c7eqnem27t/APfFu rSm48eOShms0hby5c0LKG/p+Tr26m+gzi1vfzl2n4zjPuosfj+Ubc/Lo0xvVFV69+/fw48uf T7++/fv48+vfz7+/////AAYo4IAEFmjggQgmqOCCDDbo4IMQRijhhBRWaOGFGGao4YYcdujh hyCGKOKIJJZo4okopqjiiiy26OKLMMYo44w01mjjjTjmqOOOPPbo449ABinkkEQWaeSRSCap 5JJMNunkk1BGKeWUVFZp5ZVYZqnlllx26eWXYIYp5phklmnmmWimqeaabLbp5ptwxinnnHTW aeedeOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEYq6aSUVmrppZhmqummnHbq6aeg hirqqKSWauqpqKaq6qqsturqq7DGKuustNZq66245qrrrrz26uuvwAYr7LDEFmvsscgmq+yy /8w26+yz0EYr7bTUVmvttdhmq+223Hbr7bfghivuuOSWa+656Kar7rrstuvuu/DGK++89NZr 77345qvvvvz26++/AAcs8MAEF2zwwQgnrPDCDDfs8MMQRyzxxBRXbPHFGGes8cYcd+zxxyCH LPLIJJds8skop6zyyiy37PLLMMcs88w012zzzTjnrPPOPPfs889ABy300EQXbfTRSCet9NJM N+3001BHLfXUVFdt9dVYZ6311lx37fXXYIct9thkl2322WinrfbabLft9ttwxy333HTXbffd eOet99589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755f+YZ6755px37vnnoIcu +uikl2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+7778AHL/zwxBdv/PHIJ6/88sw3 7/zz0Ecv/fTUV2/99dhnr/323Hfv/ffghy/++OSXb/756Kev/vrst+/++/DHL//89Ndv//34 56///vz37///AAygAAdIwAIa8IAITKACF8jABjrwgRCMoAQnSMEKWvCCGMygBjfIwQ568IMg DKEIR0jCEprwhChMoQpXyMIWuvCFMIyhDGdIwxra8IY4zKEOd8jDHvrwh0AMohCHSMQiGvGI SEyiEpfIxCY68YlQjKIUp0jFKlrxiljMohb/t8jFLnrxi2AMoxjHSMYymvGMaEyjGtfIxja6 8Y1wjKMc50jHOtrxjnjMox73yMc++vGPgAykIAdJyEIa8pCITKQiF8nIRjrykZCMpCQnSclK WvKSmMykJjfJyU568pOgDKUoR0nKUprylKhMpSpXycpWuvKVsIylLGdJy1ra8pa4zKUud8nL Xvryl8AMpjCHScxiGvOYyEymMpfJzGY685nQjKY0p0nNalrzmtjMpja3yc1uevOb4AynOMdJ znKa85zoTKc618nOdrrznfCMpzznSc962vOe+MynPvfJz376858ADahAB0rQghr0oAhNqEIX ytCGOvShEI2oRCdK/9GKWvSiGM2oRjfK0Y569KMgDalIR0rSkpr0pChNqUpXytKWuvSlMI2p TGdK05ra9KY4zalOd8rTnvr0p0ANqlCHStSiGvWoSE2qUpfK1KY69alQjapUp0rVqlr1qljN qla3ytWuevWrYA2rWMdK1rKa9axoTata18rWtrr1rXCNq1znSte62vWueM2rXvfK17769a+A DaxgB0vYwhr2sIhNrGIXy9jGOvaxkI2sZCdL2cpa9rKYzaxmN8vZznr2s6ANrWhHS9rSmva0 qE2talfL2ta69rWwja1sZ0vb2tr2trjNrW53y9ve+va3wA2ucIdL3OIa97jITa5yl8vc5rY6 97nQja50p0vd6lr3utjNrna3y93ueve74A2veMdL3vKa97zoTa9618ve9rr3vfCNr3znS9/6 2ve++M2vfvfL3/76978ADrCAB0zgAhv4wAhOsIIXzOAGO/jBEI6whCdM4QpbNQAYtvBAAcBh DGdYgB32MAEB4OEAAICAJebwiQOYYhWv2H8tdvH/YixjGGPYxTXeH4lvjGMV92/HJu4xhwEo ZB/zr8RILnH/kszkJTMZyf1LAAAh+QQFFQAFACwDAOgDPQaIBAAD/1i63P4wykmrvTjrzbv/ YCiOZGmeaKqubOu+cCzPdG3feK7vfO+PhKBwSBQKjsikEvlrOp/QqHRKrVqv2Kx2y+16v+Cw eFYsE5do5XjNbrvf8Lh8Tq/b7/i8fs8w+wlpgQJ8hIWGh4iJiouMjY6PkJEYf2aCaZKYmZqb nJ2en6ChoqMwlGWWaKSqq6ytrq+wsbKztA+mRahLtbu8vb6/wMHCw8QSt2e5ScXLzM3Oz9DR 0tM2x0PJ2Nmo1Nzd3t/g4eLjXtZG2uiBA5bk7e7v8PHy8+TmQegug/T7/P3+/wADIrIHSFs+ gQgTKlzIsKFDFwTTSVRGQd/DixgzatzI8f9dxIkTK1jsSLKkyZMoU376CDKdSJUwY8qcSbNm OXtIBug8orOnmg0jX9ocSrSo0aNIP7D02bMpRQ1BKyadSrWq1asllzbdulPXhagTwGIdS7as 2bPTtPrM2fWnA7EL4DIQKxet3bt48+p9pHadkrW5wgp9UHev4cOIEyveohYN4G0SCheAK3mx 5cuYM2tG0XjJY7cWJFPeTLq06dOoI3T+2/YpBtERKqeeTbu27aSrk3yW3QA2BN63gwsfTvxi brZ+Xc8VLPV38efQo0sXeJxn69GRB7+dzr279+/Uqgv4HJu5+e3g06tfzx5WX8/XnZ8vL7+9 /fv48zPqm3z8df//rWWg3GT06WfggQgmyAZ/XPXHBAeFYafghBRWaOEPjTWYRoPrhCDhhSCG KOKIJXS2lSUnVjZAdvWR6OKLMMbYB07WOZiKjDjmqOOOJogHGo9ABinkkAr4OCCRSCappIVG Prjkk1BGeV+TR0hp5ZVYRkclcFl26eWXeW0J5phklqkXS9iYqeaabE6FZjJtxinnnHTWaeed eOap55589unnn4AGKuighBZq6KGIJqrooow26uijkEYq6aSUVmrppZhmqummnHbq6aeghirq qKSWauqpqKaq6qqsturqq7DGKuustNZq66245qrrrrz26uuvwAYr7LDEFmvsscgmq+yy/8w2 6+yz0EYr7bTUVmvttdhmq+223Hbr7bfghivuuOSWa+656Kar7rrstuvuu/DGK++89NZr7734 5qvvvvz26++/AAcs8MAEF2zwwQgnrPDCDDfs8MMQRyzxxBRXbPHFGGes8cYcd+zxxyCHLPLI JJds8skop6zyyiy37PLLMMcs88w012zzzTjnrPPOPPfs889ABy300EQXbfTRSCet9NJMN+30 01BHLfXUVFdt9dVYZ6311lx37fXXYIct9thkl2322WinrfbabLft9ttwxy333HTXbffdeOet 99589+3334AHLvjghBdu+OGIJ6744ow37vjjkEcu+eSUV2755f+YZ6755px37vnnoIcu+uik l2766ainrvrqrLfu+uuwxy777LTXbvvtuOeu++689+7778AHL/zwxBdv/PHIJ6/88sw37/zz 0Ecv/fTUV2/99dhnr/323Hfv/ffghy/++OSXb/756Kev/vrst+/++/DHL//89Ndv//3456// /vz37///AAygAAdIwAIa8IAITKACF8jABjrwgRCMoAQnSMEKWvCCGMygBjfIwQ568IMgDKEI R0jCEprwhChMoQpXyMIWuvCFMIyhDGdIwxra8IY4zKEOd8jDHvrwh0AMohCHSMQiGvGISEyi EpfIxCY68YlQjKIUp0jFKlrxiljMohb/t8jFLnrxi2AMoxjHSMYymvGMaEyjGtfIxja68Y1w jKMc50jHOtrxjnjMox73yMc++vGPgAykIAdJyEIa8pCITKQiF8nIRjrykZCMpCQnSclKWvKS mMykJjfJyU568pOgDKUoR0nKUprylKhMpSpXycpWuvKVsIylLGdJy1ra8pa4zKUud8nLXvry l8AMpjCHScxiGvOYyEymMpfJzGY685nQjKY0p0nNalrzmtjMpja3yc1uevOb4AynOMdJznKa 85zoTKc618nOdrrznfCMpzznSc962vOe+MynPvfJz376858ADahAB0rQghr0oAhNqEIXytCG OvShEI2oRCdK/9GKWvSiGM2oRjfK0Y569KMgDalIR0rSkpr0pChNqUpXytKWuvSlMI2pTGdK 05ra9KY4zalOd8rTnvr0p0ANqlCHStSiGvWoSE2qUpfK1KY69alQjapUp0rVqlr1qljNqla3 ytWuevWrYA2rWMdK1rKa9axoTata18rWtrr1rXCNq1znSte62vWueM2rXvfK17769a+ADaxg B0vYwhr2sIhNrGIXy9jGOvaxkI2sZCdL2cpa9rKYzaxmN8vZznr2s6ANrWhHS9rSmva0qE2t alfL2ta69rWwja1sZ0vb2tr2trjNrW53y9ve+va3wA2ucIdL3OIa97jITa5yl8vc5v8697nQ ja50p0vd6lr3utjNrna3y93ueve74A2veMdL3vKa97zoTa9618ve9rr3vfCNr3znS9/62ve+ +M2vfvfL3/76978ADrCAB0zgAhv4wAhOsIIXzOAGO/jBEI6whCdM4Qpb+MIYzrCGN8zhDnv4 wyAOsYhHTOISm/jEKE6xilfM4ha7+MUwjrGMZ0zjGtv4xjjOsY53zOMe+/jHQA6ykIdM5CIb +chITrKSl8zkJjv5yVCOspSnTOUqW/nKWM6ylrfM5S57+ctgDrOYx0zmMpv5zGhOs5rXzOY2 u/nNcI6znOdM5zrb+c54zrOe98znPvv5z4AOtKAHTehCG/r/0IhOtKIXzehGO/rRkI60pCdN 6Upb+tKYzrSmN83pTnv606AOtahHTepSm/rUqE61qlfN6la7+tWwjrWsZ03rWtv61rjOta53 zete+/rXwA62sIdN7GIb+9jITrayl83sZjv72dCOtrSnTe1qW/va2M62trfN7W57+9vgDre4 x03ucpv73OhOt7rXze52u/vd8I63vOdN73rb+974zre+983vfvv73wAPuMAHTvCCG/zgCE+4 whfO8IY7/OEQj7jEJ07xilv84hjPuMY3zvGOe/zjIA+5yEdO8pKb/OQoT7nKV87ylrv85TCP ucxnTvOa2/zmOM+5znfO8577/OdA/w+60IdO9KIb/ehIT7rSl870pjv96VCPutSnTvWqW/3q WM+61rfO9a57/etgD7vYx072spv97GhPu9rXzva2u/3tcI+73OdO97rb/e54z7ve9873vvv9 74APvOAHT/jCG/7wiE+84hfP+MY7/vGQj7zkJ0/5ylv+8pjPvOY3z/nOe/7zoA+96EdP+tKb /vSoT73qV8/61rv+9bCPvexnT/va2/72uM+97nfP+977/vfAD77wh0/84hv/+MhPvvKXz/zm O//50I++9KdP/epb//rYz772t8/97nv/++APv/jHT/7ym//86E+/+tfP/va7//3wj7/850// +tv//vjPv//+98///vv//wAYgAI4gARYgAZ4gAiYgAq4gAzYgA74gBAYgRI4gRRYgRZ4gRiY gRq4gRzYgR74gSAYgiI4giRYgiZ4giiYgiq4gizYgi74gjAYgzI4gzRYgzZ4gziYgzq4gzzY gz74g0AYhEI4hERYhEZ4hEiYhEq4hEzYhE74hFAYhVI4hVRYhVZ4hViYhVq4hVzYhV74hWAY hmJIPwBQhmUYAGgYdWZohmiIhgAAdWsIAG3ohk8Xh3Pohm/YdGt4h3jodGzYhnLYh3oYiHgI iHnYdHP4hwFQhk9niGdIh1l3iFMniVX3iAFQiZZIdXuYhlJnh5wIh554iWoYiqP/SIqgaIp+ GIeZWIeqSIiMOIiqaIipGIuCOIa2eIu4mIu6uIu8KDMH8IvAGIzCOIzEWIzGeIzImIzKuIzM 2IzO+IzQGI3SOI3UWI3VeGHWmI3auI3c2I3e+I3gGI7ciI3iWI7meI7omI7quI7MSI7s+I7w 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 EUmae8z/Hi7qSLKkyZMV9GC8hrKly5cYPn7DJRKmzZs4ze1xRyynz58RZTZUUxOo0aNIY+0k yDKp06fahNJ8CLWq1auDlr5rirWrV1pSQ1L9SrasWSpae55dy5ZSWKJj28qdS1dFWq518+qV 8zaHyJF7AwsOfJfP4MOIufTNpy+x48deC2OBTLnymR0gxTa2zLmzTa1bJ3seTRpUDoaiipZe zTqhpYGhMbWeTVvC6cxTN9fezbvcJdhbegvnfBtf6rjDkysv9nul7OXQBevArXlc9OvYlYKO nb27XDTGqzfzTr58QJU8DZtff3WxQ9Xs48vvIzn4/PtA3SOCj7+/fzH1WfHf/4Av6fcXgQgm CEWAzynoIEUG8vfghBS+wGCFGBoUIXIZduhhCBd+KGI6G+o24okoroNebPal6KI0JVr34owe hkjjjcYINRRjMuLoo4Irsijgj0TWo+NM73FY5JLyXZQeXkxGicpCuB0o5ZXmOckUlFh2qYk3 4Vnp5ZjQOQkPmWhOsgxcJqbpJm3WqPfmnIKs6ZeEdObJWZyi6ennHXbyON6fhFLGZ4uFJmpG oEm2qeijeR06JKSUgsHofkpWqqlZkja46adPXComqKR21WmpqKaq6qqsturqq7DGKuustNZq 66245qrrrrz26uuvwAYr7LDEFmvsscgmq+yyzDbr7P+z0EYr7bTUVmvttdhmq+223Hbr7bfg hivuuOSWa+656Kar7rrstuvuu/DGK++89NZr77345qvvvvz26++/AAcs8MAEF2zwwQgnrPDC DDfs8MMQRyzxxBRXbPHFGGes8cYcd+zxxyCHLPLIJJds8skop6zyyiy37PLLMMcs88w012zz zTjnrPPOPPfs889ABy300EQXbfTRSCet9NJMN+3001BHLfXUVFdt9dVYZ6311lx37fXXYIct 9thkl2322WinrfbabLft9ttwxy333HTXbffdeOet99589+3334AHLvjghBdu+OGIJ6744ow3 7vjjkEcu+eSUV2755Zhnrvn/5px37vnnoIcu+uikl2766ainrvrqrLfu+uuwxy777LTXbvvt uOeu++689+7778AHL/zwxBdv/PHIJ6/88sw37/zz0Ecv/fTUV2/99dhnr/323Hfv/ffghy/+ +OSXb/756Kev/vrst+/++/DHL//89Ndv//3456///vz37///AAygAAdIwAIa8IAITKACF8jA BjrwgRCMoAQnSMEKWvCCGMygBjfIwQ568IMgDKEIR0jCEprwhChMoQpXyMIWuvCFMIyhDGdI wxra8IY4zKEOd8jDHvrwh0AMohCHSMQiGvGISEyiEpfIxCY68YlQjKIUp0jFKlrxiljMoha3 yMUu/3rxi2AMoxjHSMYymvGMaEyjGtfIxja68Y1wjKMc50jHOtrxjnjMox73yMc++vGPgAyk IAdJyEIa8pCITKQiF8nIRjrykZCMpCQnSclKWvKSmMykJjfJyU568pOgDKUoR0nKUprylKhM pSpXycpWuvKVsIylLGdJy1ra8pa4zKUud8nLXvryl8AMpjCHScxiGvOYyEymMpfJzGY685nQ jKY0p0nNalrzmtjMpja3yc1uevOb4AynOMdJznKa85zoTKc618nOdrrznfCMpzznSc962vOe +MynPvfJz376858ADahAB0rQghr0oAhNqEIXytCGOvShEI2oRCdK0Ypa9P+iGM2oRjfK0Y56 9KMgDalIR0rSkpr0pChNqUpXytKWuvSlMI2pTGdK05ra9KY4zalOd8rTnvr0p0ANqlCHStSi GvWoSE2qUpfK1KY69alQjapUp0rVqlr1qljNqla3ytWuevWrYA2rWMdK1rKa9axoTata18rW trr1rXCNq1znSte62vWueM2rXvfK17769a+ADaxgB0vYwhr2sIhNrGIXy9jGOvaxkI2sZCdL 2cpa9rKYzaxmN8vZznr2s6ANrWhHS9rSmva0qE2talfL2ta69rWwja1sZ0vb2tr2trjNrW53 y9ve+va3wA2ucIdL3OIa97jITa5yl8vc5jr3udD/ja50p0vd6lr3utjNrna3y93ueve74A2v eMdL3vKa97zoTa9618ve9rr3vfCNr3znS9/62ve++M2vfvfL3/76978ADrCAB0zgAhv4wAhO sIIXzOAGO/jBEI6whCdM4Qpb+MIYzrCGN8zhDnv4wyAOsYhHTOISm/jEKE6xilfM4ha7+MUw jrGMZ0zjGtv4xjjOsY53zOMe+/jHQA6ykIdM5CIb+chITrKSl8zkJjv5yVCOspSnTOUqW/nK WM6ylrfM5S57+ctgDrOYx0zmMpv5zGhOs5rXzOY2u/nNcI6znOdM5zrb+c54zrOe98znPvv5 z4AOtKAHTehCG/rQiE60/6IXzehGO/rRkI60pCdN6Upb+tKYzrSmN83pTnv606AOtahHTepS m/rUqE61qlfN6la7+tWwjrWsZ03rWtv61rjOta53zete+/rXwA62sIdN7GIb+9jITrayl83s Zjv72dCOtrSnTe1qW/va2M62trfN7W57+9vgDre4x03ucpv73OhOt7rXze52u/vd8I63vOdN 73rb+974zre+983vfvv73wAPuMAHTvCCG/zgCE+4whfO8IY7/OEQj7jEJ07xilv84hjPuMY3 zvGOe/zjIA+5yEdO8pKb/OQoT7nKV87ylrv85TCPucxnTvOa2/zmOM+5znfO8577/OdAD7rQ h/9O9KIb/ehIT7rSl870pjv96VCPutSnTvWqW/3qWM+61rfO9a57/etgD7vYx072spv97GhP u9rXzva2u/3tcI+73OdO97rb/e54z7ve9873vvv974APvOAHT/jCG/7wiE+84hfP+MY7/vGQ j7zkJ0/5ylv+8pjPvOY3z/nOe/7zoA+96EdP+tKb/vSoT73qV8/61rv+9bCPvexnT/va2/72 uM+97nfP+977/vfAD77wh0/84hv/+MhPvvKXz/zmO//50I++9KdP/epb//rYz772t8/97nv/ ++APv/jHT/7ym//86E+/+tfP/va7//3wj7/850//+tv//vjPv/73z////vv//wAYgAI4gARY gAZ4gAiYgAq4gAzYgA74gBAYgRI4gRRYgRZ4gRiYgRq4gRzYgR74gSAYgiI4giRYgiZ4giiY giq4gizYgi74gjAYgzI4gzRYgzZ4gziYgzq4gzzYgz74g0AYhEI4hERYhEZ4hEiYhEq4hEzY hE74hFAYhVI4hVRYhVZ4hViYhVq4hVzYhV74hWAYhmI4hmRYhmZ4hmiYhmq4hmzYhm74hnAY h3I4h3RYh3Z4h3iYh3q4h3zYh374h4AYiII4iIRYiIZ4iIiYiIq4iIzYiI74iJAYiZI4iZRY iZZ4iZiYiZq4iZzYiZ74iaAYiqI4ihroDgBwioqYNxATAACXp4qbZ4qomIrtcIq0KAEBUHnt MAC1yIoDcIuTl4u1qIusmIuS54uxKIy96IuRZ4wUgIrEuIzECIvJ+IvROIvDqIyQ5w62aI3T WIzVGADOiI2Pp43JCI7XSI3iGI7oWAHq6I3peI7ruIq2iIvPqIvzSI/iKIuumHmwIQG8qI/B OHkRAAAh+QQFJgADACwDAOgDWgmIBAAE/3DISau9OOvNu/9gKI5kaZ5oqq5s675wLM90bd94 ru987//AoHBIxBCOyKQSKWg6n9CodEqtWq/YrHbL7Xq/4LB4TC6bz+i0es1uu9/wuHxOr9vv xbx+z+/7/4CBgoOEhYaHiImKi4yCS49Kd5KTlJWWl5iZmpucnZ6foKGiko2lpqeoqaqrrK2u r7CxsrOskLYEo7m6u7y9vr/AwcLDxMVqtMjJysvMzc7P0NHS09Qzt5DG2drb3N3e3+Dh4uNX 1ebn6Onq6+zt7u/wi9eP5PX29/j5+vv8/bvxAAMKHEiwoMGDCBPqmbfEn8OHECNKnEixojCF GDNq3Mixo8ePIP8VMYz00IBJAxZTqlzJsqVLiCdRUglJs6bNmzhz6tyZCEEHBD5djExCi0pM k054Kl3KtOnBJ0dlRnFKtarVq1izal0V9EQVoC+GIik6JWrSrWjTql3bB+rRKWzjyp1Lt67d pV1NfM27QuwRslFiTr1LuLDhwlIEDz7MuLHjx5AjI+ILgvIGyyX8EgAM5aQUyaBDi9ZYFuni 0ahTq17NGjTmF69HaObsVuqT1rhz66btxPPp3cCDCx9OvGDsFsdDzJ5V2vbZ4tCjSwfS/PP0 69iza99OKPkK7x+Wy6r+m7v58+grkIeSvr379/DjWwA/AewI+hJii4+1/rb8/wDm1t//cwEW aOCBCD6G3wD2iUBfcvvBMmATCVZo4V0TCnDhhhx26CFOCzYYAnjeRfhKhh+mqKJSKK7o4osw xijNghSE+NMFlJnoSmK+sSfjj0AW1JxzGgZp5JFIJgkIjfWNeCOOFejYSmeKlafklVgqY1SV RWbp5ZdghkkCk/k5eVkGfEnJSm2mWSfmm3AyUsVbFMZp5514Gkkmg2ZqQJ+aq7BJJIF5Fmqo EHNWeeiijDb63542nukBoKpQ2aaVjmaqqQpb9tjlpqCGKmprkPaJZnh+8SaAp/6N6uqrGgyJ Kay01mrrVqVWxsGfqTLH46C3Bjtqi8IWa+yxN+X6QXK8iqXq/6qXEorstHYSS+212GYbj7Ie MIuqs74GFm2d2pabpbXmpqvuushw+6SkHFCaCrrs1usivfbmq+++3ZUQKbwbyIsKvvwWfCDB Bies8MI34PevrvH2Ot6vbjJsMXwIX6zxxhx3C/GyY0YM7sTiAtvxydpljPLKLDPssKkOaiDw KbL62PLNwv1qMs489+yzDzOb0mmPPxetmqCDfmr00kw3TULQpQzdptNUN4Y0XFVnrbXWUDdi haJbhy0Xm1WIbfbZOHctJxdot51VF27HLbfCai8C99x483R33nz3nW3diuzt9+AeCU744Yi7 CngihifuuJBsPy755Idq9tLlmGeu+f/mnHd+CeWghw6n5Z6XbvrpqKeu+kuit+7667DHLvvs tNdu++2456777rz37vvvwAcv/PDEF2/88cgnr/zyzDfv/PPQRy/99NRXb/312Gev/fbcd+/9 9+CHL/745Jdv/vnop6/++uy37/778Mcv//z012///fjnr//+/Pfv//8ADKAAB0jAAhrwgAhM oAIXyMAGOvCBEIygBCdIwQpa8IIYzKAGN8jBDnrwgyAMoQhHSMISmvCEKEyhClfIwha68IUw jKEMZ0jDGtrwhjjMoQ53yMMe+vCHQAyiEIdIxCIa8YhITKISl8jEJjrxiVCMohSnSMUqWvGK WMyiFrfIxS7/evGLYAyjGMdIxjKa8YxoTKMa18jGNrrxjXCMoxznSMc62vGOeMyjHvfIxz76 8Y+ADKQgB0nIQhrykIhMpCIXychGOvKRkIykJCdJyUpa8pKYzKQmN8nJTnryk6AMpShHScpS mvKUqEylKlfJyla68pWwjKUsZ0nLWtrylrjMpS53ycte+vKXwAymMIdJzGIa85jITKYyl8nM ZjrzmdCMpjSnSc1qWvOa2MymNrfJzW5685vgDKc4x0nOcprznOhMpzrXyc52uvOd8IynPOdJ z3ra8574zKc+98nPfvrznwANqEAHStCCGvSgCE2oQhfK0IY69KEQjahEJ0rRilr0/6IYzahG N8rRjnr0oyANqUhHStKSmvSkKE2pSlfK0pa69KUwjalMZ0rTmtr0pjjNqU53ytOe+vSnQA2q UIdK1KIa9ahITapSl8rUpjr1qVCNqlSnStWqWvWqWM2qVrfK1a569atgDatYx0rWspr1rGhN q1rXyta2uvWtcI2rXOdK17ra9a54zate98rXvvr1r4ANrGAHS9jCGvawiE2sYhfL2MY69rGQ jaxkJ0vZylr2spjNrGY3y9nOevazoA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2 uM2tbnfL29769rfADa5wh0vc4hr3uMhNrnKXy9zmOve50P+NrnSnS93qWve62M2udrfL3e56 97vgDa94x0ve8pr3vOhNr3rXy972uve98I2vfOdL3/ra9774za9+98vf/vr3vwAOsIAHTOAC G/jACE6wghfM4AY7+MEQjrCEJ0zhClv4whjOsIY3zOEOe/jDIA6xiEdM4hKb+MQoTrGKV8zi Frv4xTCOsYxnTOMa2/jGOM6xjnfM4x77+MdADrKQh0zkIhv5yEhOspKXzOQmO/nJUI6ylKdM 5Spb+cpYzrKWt8zlLnv5y2AOs5jHTOYym/nMaE6zmtfM5ja7+c1wjrOc50znOtv5znjOs573 zOc++/nPgA60oAdN6EIb+tCITrT/ohfN6EY7+tGQjrSkJ03pSlv60pjOtKY3zelOe/rToA61 qEdN6lKb+tSoTrWqV83qVrv61bCOtaxnTeta2/rWuM61rnfN6177+tfADrawh03sYhv72MhO trKXzexmO/vZ0I62tKdN7Wpb+9rYzra2t83tbnv72+AOt7jHTe5ym/vc6E63utfN7na7+93w jre8503vetv73vjOt773ze9++/vfAA+4wAdO8IIb/OAIT7jCF87whjv84RCPuMQnTvGKW/zi GM+4xjfO8Y57/OMgD7nIR07ykpv85ChPucpXzvKWu/zlMI+5zGdO85rb/OY4z7nOd87znvv8 50APutCH/070ohv96EhPutKXzvSmO/3pUI+61KdO9apb/epYz7rWt871rnv962APu9jHTvay m/3saE+72tfO9ra7/e1wj7vc5073utv97njPu973zve++/3vgA+84AdP+MIb/vCIT7ziF8/4 xjv+8ZCPvOQnT/nKW/7ymM+85jfP+c57/vOgD73oR0/60pv+9KhPvepXz/rWu/71sI+97GdP +9rb/va4z73ud8/73vv+98APvvCHT/ziG//4yE++8pfP/OY7//nQj770p0/96lv/+tjPvva3 z/3ue//74A+/+MdP/vKb//zoT7/618/+9rv//fCPv/znT//62//++M+//vfP///++///ABiA AjiABFiABniACJiACriADNiADviAEBiBEjiBFFiBFniBGJiBGriBHNiBHviBIBiCIjiCJFiC JniCKJiCKriCLNiCLviCMBiDMjiDNFiDNniDOJiDOriDPNiDPviDQBiEQjiERFiERniESJiE SriETNiETviEUBiFUjiFVFiFVniFWJiFWriFXNiFXviFYBiGYjiGZFiGZniGaJiGariGbNiG bviGcBiHcjiHdFiHdniHeJiHeriHfNiHfviHgBiIgjiIhFiIhniIiJiIiriIjNiIjviIkBiJ kjiJlFiJlniJmJiJmriJnNiJnviJoBiKojiKpFiKpnj/iqiYiqq4iqzYiq74irAYi7I4i7RY i7Z4i7iYi7q4i7zYi774i8AYjMI4jMRYjMZ4jMiYjMq4jMzYjM74jNAYjdI4jdRYjdZ4jdiY jdq4jdzYjd74jeAYjuI4juRYjuZ4juiYjuq4juzYju74jvAYj/I4j/RYj/Z4j/iYj/q4j/zY j/74jwAZkAI5kARZkAZ5kAiZkAq5kAzZkA75kBAZkRI5kRRZkRZ5kRiZkRq5kRzZkR75kSAZ kiI5kiRZkiZ5kiiZkiq5kizZki75kjAZkzI5kzRZkzZ5kziZkzq5kzzZkz75k0AZlEI5lERZ lEZ5lEiZlEq5lEzZlE75lFAZ/5VSOZVUWZVWeZVYmZVauZVc2ZVe+ZVgGZZiOZZkWZZmeZZo mZZquZZs2ZZu+ZZwGZdyOZd0WZd2eZd4mZd6uZd82Zd++ZeAGZiCOZiEWZiGeZiImZiKuZiM 2ZiO+ZiQGZmSOZmUWZmWeZmYmZmauZmc2Zme+ZmgGZqiOZqkWZqmeZqomZqquZqs2Zqu+Zqw GZuyOZu0WZu2eZu4mZu6uZu82Zu++ZvAGZzCOZzEWZzGeZzImZzKuZzM2ZzO+ZzQGZ3SOZ3U WZ3WeZ3YmZ3auZ3c2Z3e+Z3gGZ7iOZ7kWZ7meZ7omZ7quZ7s2Z7u+Z7wGZ/yOZ/0WZ/2eZ/4 mZ/6uf+f/Nmf/vmfABqgAjqgBFqgBnqgCJqgCrqgDNqgDvqgEBqhEjqhFFqhFnqhGJqhGrqh HNqhHvqhIBqiIjqiJFqiJnqiKJqiKrqiLNqiLvqiMBqjMjqjNFqjNnqjOJqjOrqjPNqjPvqj QBqkQjqkRFqkRnqkSJqkSrqkTNqkTvqkUBqlUjqlVFqlVnqlWJqlWrqlXNqlXvqlYBqmYjqm ZFqmZnqmaJqmarqmbNqmbvqmcBqncjqndFqndnqneJqnerqnfNqnfvqngBqogjqohFqohnqo iJqoirqojNqojvqokBqpkjqplFqplnqpmJqpmrqpnNqpnvqpoBqqojqqpFr/qqZ6qqiaqqq6 qqzaqq76qrAaq7I6q7Raq7Z6q7iaq7q6q7zaq776q8AarMI6rMRarMZ6rMiarMq6rMzarM76 rNAardI6rdRardZ6rdiardq6rdzard76reAaruI6ruRaruZ6ruiaruq6ruzaru76rvAar/I6 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 qEylKlfJyla68pWwjKUsZ0nLWtrylrjMpS53ycte+vKXwAymMIdJzGIa85jITKYyl8nMZjrz mdCMpjSnSc1qWvOa2MymNrfJzW5685vgDKc4x0nOcprznOhMpzrXyc52uvOd8IynPOdJz3ra 8574zKc+98nPfvrznwANqEAHStCCGvSgCE2oQhfK0IY69KEQjahEJ0rRilr0/6IYzahGN8rR jnr0oyANqUhHStKSmvSkKE2pSlfK0pa69KUwjalMZ0rTmtr0pjjNqU53ytOe+vSnQA2qUIdK 1KIa9ahITapSl8rUpjr1qVCNqlSnStWqWvWqWM2qVrfK1a569atgDatYx0rWspr1rGhNq1rX yta2uvWtcI2rXOdK17ra9a54zate98rXvvr1r4ANrGAHS9jCGvawiE2sYhfL2MY69rGQjaxk J0vZylr2spjNrGY3y9nOevazoA2taEdL2tKa9rSoTa1qV8va1rr2tbCNrWxnS9va2va2uM2t bnfL29769rfADa5wh0vc4hr3uMhNrnKXy9zmOve50P+NrnSnS93qWve62M2udrfL3e5697vg Da94x0ve8pr3vOhNr3rXy972uve98I2vfOdL3/ra9774za9+98vf/vr3vwAOsIAHTOACG/jA CE6wghfM4AY7+MEQjrCEJ0zhClv4whjOsIY3zOEOe/jDIA6xiEdM4hKb+MQoTrGKV8ziFrv4 xTCOsYxnTOMa2/jGOM6xjnfM4x77+MdADrKQh0zkIhv5yEhOspKXzOQmO/nJUI6ylKdM5Spb +cpYzrKWt8zlLnv5y2AOs5jHTOYym/nMaE6zmtfM5ja7+c1wjrOc50znOtv5znjOs573zOc+ +/nPgA60oAdN6EIb+tCITrT/ohfN6EY7+tGQjrSkJ03pSlv60pjOtKY3zelOe/rToA61qEdN 6lKb+tSoTrWqV83qVrv61bCOtaxnTeta2/rWuM61rnfN6177+tfADrawh03sYhv72MhOtrKX zexmO/vZ0I62tKdN7Wpb+9rYzra2t83tbnv72+AOt7jHTe5ym/vc6E63utfN7na7+93wjre8 503vetv73vjOt773ze9++/vfAA+4wAdO8IIb/OAIT7jCF87whjv84RCPuMQnTvGKW/ziGM+4 xjfO8Y57/OMgD7nIR07ykpv85ChPucpXzvKWu/zlMI+5zGdO85rb/OY4z7nOd87znvv850AP utCH/070ohv96EhPutKXzvSmO/3pUI+61KdO9apb/epYz7rWt871rnv962APu9jHTvaym/3s aE+72tfO9ra7/e1wj7vc5073utv97njPu973zve++/3vgA+84AdP+MIb/vCIT7ziF8/4xjv+ 8ZCPvOQnT/nKW/7ymM+85jfP+c57/vOgD73oR0/60pv+9KhPvepXz/rWu/71sI+97GdP+9rb /va4z73ud8/73vv+98APvvCHT/ziG//4yE++8pfP/OY7//nQj770p0/96lv/+tjPvva3z/3u e//74A+/+MdP/vKb//zoT7/618/+9rv//fCPv/znT//62//++M+//vfP///++///ABiAAjiA BFiABniACJiACriADNiADviAEBiBEjiBFFiBFniBGJiBGriBHNiBHviBIBiCIjiCJFiCJniC KJiCKriCLNiCLviCMBiDMjiDNFiDNniDOJiDOriDPNiDPviDQBiEQjiERFiERniESJiESriE TNiETviEUBiFUjiFVFiFVniFWJiFWriFXNiFXviFYBiGYjiGZFiGZniGaJiGariGbNiGbviG cBiHcjiHdFiHdniHeJiHeriHfNiHfviHgBiIgjiIhFiIhniIiJiIiriIjNiIjviIkBiJkjiJ lFiJlniJmJiJmriJnNiJnviJoBiKojiKpFiKpnj/iqiYiqq4iqzYiq74irAYi7I4i7RYi7Z4 i7iYi7q4i7zYi774i8AYjMI4jMRYjMZ4jMiYjMq4jMzYjM74jNAYjdI4jdRYjdZ4jdiYjdq4 jdzYjd74jeAYjuI4juRYjuZ4juiYjuq4juzYju74jvAYj/I4j/RYj/Z4j/iYj/q4j/zYj/74 jwAZkAI5kARZkAZ5kAiZkAq5kAzZkA75kBAZkRI5kRRZkRZ5kRiZkRq5kRzZkR75kSAZkiI5 kiRZkiZ5kiiZkiq5kizZki75kjAZkzI5kzRZkzZ5kziZkzq5kzzZkz75k0AZlEI5lERZlEZ5 lEiZlEq5lEzZlE75lFAZ/5VSOZVUWZVWeZVYmZVauZVc2ZVe+ZVgGZZiOZZkWZZmeZZomZZq uZZs2ZZu+ZZwGZdyOZd0WZd2eZd4mZd6uZd82Zd++ZeAGZiCOZiEWZiGeZiImZiKuZiM2ZiO +ZiQGZmSOZmUWZmWeZmYmZmauZmc2Zme+ZmgGZqiOZqkWZqmeZqomZqquZqs2Zqu+ZqwGZuy OZu0WZu2eZu4mZu6uZu82Zu++ZvAGZzCOZzEWZzGeZzImZzKuZzM2ZzO+ZzQGZ3SOZ3UWZ3W eZ3YmZ3auZ3c2Z3e+Z3gGZ7iOZ7kWZ7meZ7omZ7quZ7s2Z7u+Z7wGZ/yOZ/0WZ/2eZ/4mZ/6 uf+f/Nmf/vmfABqgAjqgBFqgBnqgCJqgCrqgDNqgDvqgEBqhEjqhFFqhFnqhGJqhGrqhHNqh HvqhIBqiIjqiJFqiJnqiKJqiKrqiLNqiLvqiMBqjMjqjNFqjNnqjOJqjOrqjPNqjPvqjQBqk QjqkRFqkRnqkSJqkSrqkTNqkTvqkUBqlUjqlVFqlVnqlWJqlWrqlXNqlXvqlYBqmYjqmZFqm ZnqmaJqmarqmbNqmbvqmcBqncjqndFqndnqneJqnerqnfNqnfvqngBqogjqohFqohnqoiJqo irqojNqojvqokBqpkjqplFqplnqpmJqpmrqpnNqpnvqpoBqqojqqpFr/qqZ6qqiaqqq6qqza qq76qrAaq7I6q7Raq7Z6q7iaq7q6q7zaq776q8AarMI6rMRarMZ6rMiarMq6rMzarM76rNAa rdI6rdRardZ6rdiardq6rdzard76reAaruI6ruRarubaAzUiAQCwAeuqrueqCDUSABQgrxfQ rhVgr+8KCOk6r/WaAfiar3gAEwMAAATbrhNhAQY7AfT6rwBrBxQxsAVLsANwsBSQsPw6sA2b BxQRsRA7sfQ6ARarsO6asXdwsAWrrutKsSRLCRyLsh67spVwsiArAR8Ls5xQsxfwsDZ7CDhb AQvrsfLKsDvrsD9rAQtrrxI7tBprskLLtCAr/7RKGwcwIbM+a7IzG7VEy7RNq7JYG7A6S7Xz yrUj27NdqwY6C7Fb27MhW7ZrcLZoiwFuC7VsKwZxm7RGy7VrO7dh4LZvC7dOq7duEK8qK7Ya QLaA2wWC+7GEi7E+e7htK7gKS7Yya7iOW7mWe7mYm7mau7mc27mrcBegG7qiO7qkW7qme7qo m7qqu7qs27qu+7qwG7uyO7u0W7u2e7uli4W4u7u827u++7vAG7zCO7zEW7zGe7zIm7tXmLzM 27zO+7zQG73SO73UW73Wew26e73au73c273e+73gG77im7rZO77me77om77qu77s274OQ4Xu G7/yO7/0W7/2e7+vW/+++Lu//Nu//vu/AKy9+hvABFzABnzACJzAojvACtzADvzAEBzB7cvA ElzBFnzBGJzBwkvBGtzBHvzBIBzCprK8IlzCJnzCKFzBHJzCLNzCLvzC67vCMDzDNFzDNty8 MnzDOrzDPNzD+UvCPhzEQjzERNwuUVjESJzESjzEObzETvzEUOzBTRzFVFzFVnzAU3zFWrzF XCy/WdzFYBzGYty9XzzGZnzGaIy8ZZzGbNzGbly7a/zGcjzHdEy6cVzHeJzHevwOQLzHfvzH gFwQVhjIhFzIenzHhpzIigzFiLzIjvzIQtzIkDzJlEzDklzJmJzJJnzJmtzJnozBnPzJojxC ygocyqR8yqjsv6acyqzcyl7cx64cy7IcwKs8y7Z8y9tby7i8y7z8vLrcy8AczMP7y8JczMZ8 zMiczMq8zMwMzBEAADs= --------------GJN5oDb0aW0nJ7zJh0m0tAhd--
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.Received: (at 79374) by debbugs.gnu.org; 20 Sep 2025 18:18:01 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 20 14:18:01 2025 Received: from localhost ([127.0.0.1]:47539 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1v029o-0004PH-LJ for submit <at> debbugs.gnu.org; Sat, 20 Sep 2025 14:18:01 -0400 Received: from purple.birch.relay.mailchannels.net ([23.83.209.150]:52025) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <me@HIDDEN>) id 1v029f-0004Ov-5r for 79374 <at> debbugs.gnu.org; Sat, 20 Sep 2025 14:17:52 -0400 X-Sender-Id: hostingeremailsmtpin|x-authuser|lua@HIDDEN Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 263E28E0F73; Sat, 20 Sep 2025 18:17:49 +0000 (UTC) Received: from fr-int-smtpout12.hostinger.io (100-106-202-179.trex-nlb.outbound.svc.cluster.local [100.106.202.179]) (Authenticated sender: hostingeremailsmtpin) by relay.mailchannels.net (Postfix) with ESMTPA id D12218E0D3A; Sat, 20 Sep 2025 18:17:47 +0000 (UTC) ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1758392268; a=rsa-sha256; cv=none; b=iDEsxY0e4Rk0pzP6e9VngYd/km5H4XtA692Co/+4fsgpmU/YL4hY/AmWrOI3+Q/Yv91zSk qp3KPKVzgD7cRyxRaBsOillZdviVN0nibRYJ6J/d14Wq5m+ASi4OGM3AV5swuyKFUKJUdz NUYcnt0G9jhSA0noNpBAONrPdYqVKX5ueggYoxNmi3yvvKug9n8gaGJ/oK9rndGPmGUcNr vabLhRXGnh0P9YOit6gAHmZtPl0sd4JuIThngy3NvyXURxSYxJzzWjqsyOSbaMMrqEgU11 zb5nR/yule0ujWW5mg5Zo/9TlEveMZIzZB1Y6ie9bBoXq5lmGV/DHQe9mw9VRg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1758392268; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=kEBAcXYXFLtzyrRdHu0sVQwL2X2HbMNfIs7LNN0+Uqg=; b=7DBVPEYhuO/KGawivjwRbQOSs8jXrcuOnb3+sQyU4mQpvdPquxRg2mRXlxDE/9EZg9pKDq PNQ0G1c2PYopoOQV3IUzKlASwiEOPKhx1V8ByaZGson2zG7mcqb4RbsRQhByemcbdGNRMM Ym6ypSdr9qySs9vehF3T89VjNKRdt3reho2pwVsgVpEjUqfuQK9GN4wBqdCqc2/Y/sKnTk 9IpCnIzR3uWC0U8m55hsQ5w6TILLIkMwV71PRAoxQ8xlOFBz7jayNSXCaqBFGCIg4ItvA5 dOfbK2tMKYP26opE4/d5LUVbV4eH4BJt4kiJbeqwsjAqFaQz/ahyc9vJsmVdtA== ARC-Authentication-Results: i=1; rspamd-59b854cb4c-8jkmb; auth=pass smtp.auth=hostingeremailsmtpin smtp.mailfrom=me@HIDDEN X-Sender-Id: hostingeremailsmtpin|x-authuser|lua@HIDDEN X-MC-Relay: Neutral X-MailChannels-SenderId: hostingeremailsmtpin|x-authuser|lua@HIDDEN X-MailChannels-Auth-Id: hostingeremailsmtpin X-Power-Versed: 315c5e8f4d5ef573_1758392269024_3666275129 X-MC-Loop-Signature: 1758392269024:3977058828 X-MC-Ingress-Time: 1758392269024 Received: from fr-int-smtpout12.hostinger.io (fr-int-smtpout12.hostinger.io [148.222.54.46]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.106.202.179 (trex/7.1.3); Sat, 20 Sep 2025 18:17:49 +0000 Received: from [IPV6:2804:14d:8084:9f01::1001] (unknown [IPv6:2804:14d:8084:9f01::1001]) (Authenticated sender: lua@HIDDEN) by smtp.hostinger.com (smtp.hostinger.com) with ESMTPSA id 4cTczs01sZz1xqt; Sat, 20 Sep 2025 18:17:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lua.blog.br; s=hostingermail-a; t=1758392266; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=kEBAcXYXFLtzyrRdHu0sVQwL2X2HbMNfIs7LNN0+Uqg=; b=n2uBjSsn5BoIl+4J37X0rf9rwA6Xfg5AKX0xLbhZHCEG/CEPvNYjOsTc8am5Q8+iPS6bsI NTGQ2s7Wgwx+UmA4ek5RU+GIUDuG+ZAr5dNY+Oo14f1j3eEDUhupftTScCqpljahXK/3iO gOOsV836Fw1oR15LALXbmZ9cZBK7+zNavYrbp/V1Aa/mEzSk2RpqWtBuNNZwmSxRMxb7T0 o6Onxj80FYq6xowOJMBdS5v9Y/u4sqdvn63JZ/MXXAdx7gbZfRWFjJv8Z5GVb8QisRr0TP dlunEidKDymswDQUF+D8bEfTSTxEY+/g8L0GEahz5iYCIrVpt/Ix9P3A2yTfig== Message-ID: <b9ac7040-db29-4ff0-974d-be647f1dc466@HIDDEN> MIME-Version: 1.0 User-Agent: Betterbird (Linux) Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens To: "J.D. Smith" <jdtsmith@HIDDEN> References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN> <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> <87ecsoc6cz.fsf@HIDDEN> <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> <m2o6r5vxmz.fsf@HIDDEN> Content-Language: en-US, pt-BR From: Lua Viana Reis <me@HIDDEN> In-Reply-To: <m2o6r5vxmz.fsf@HIDDEN> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Sat, 20 Sep 2025 18:17:44 +0000 (UTC) X-CM-Envelope: MS4xfJnyOMMHIQctbZEqJiCSUVW/xHPE0WodYkjnJI/LV8nKPfLmDYUiQj3d8JPXJWKTrmGAFN/bBsRGpkAOZL9B2dT9W5r1UW39goNB9C2SNUAt0Gq1JTqx aQNiPWiK1E+WBnGPUAND3gpOuJqT3/W21AzFpHd9c8NefzgzM9WSH7qk1XLz1aRUjYHJ0OZCSy1LOyQO87auRN4PDVyBJTyXARd7hDC5iqIYvhkefHgyEhVx HKmi3cJnOzb1NlyNjtWVm+Dv+s4ddIyBFsDDl7t8fviIrQYzp6WSDxbJVITxoOr0MlxnxhsQWcPDaJXCVdbSxU/1QyVtwMHe1WZXVDmjg2A= X-CM-Analysis: v=2.4 cv=DJTd4DNb c=1 sm=1 tr=0 ts=68ceefca a=a7fqfHw7GlYXtyy7Q6Sjnw==:617 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=JtP_H48LXAlkbaxfLnIA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-AuthUser: lua@HIDDEN X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79374 Cc: Philip Kaludercic <philipk@HIDDEN>, 79374 <at> debbugs.gnu.org, =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Reply-To: me@HIDDEN Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) > Congrats on a clean and performant implementation! Thanks for testing it! It has been working reasonably well for me too. > One good approach to avoid this hard-coded precedence: create your own > property alias (see `char-property-alias-alist'), > e.g. `eglot-semtok-face', instead of re-using font-lock's > (`font-lock-face'). This is very good to know. While implementing this, I wondered how on earth did emacs treat the `font-lock-face` property specially in regard to fontification, and found no clue about that in font-lock.el. So I thought it was something hard-coded in C, perhaps reminiscent of older days, perhaps even discouraged or deprecated (because I don't see font-lock-face being used in the wild that much). I will surely look into that. > One small thing I noticed: > > When a semantic category is missing a face, the warning mentions, e.g. > > ⛔ Warning (eglot-semtok): No face has been associated to the semantic > token ‘selfParameter’: consider adding a corresponding definition to > eglot--semtokfaces I also noticed this after submitting! It used to be a package "eglot-semtok" and I adapted it into a patch without paying too much attention. I believe we could improve this warning in other aspects too, like using the less intrusive `eglot--message`. > Thanks for your contribution. Will continue to test, but so far, so > good! Thanks again! Em 20/09/2025 14:31, J.D. Smith escreveu: > I've been testing this patch against eglot-1.18.0.20250906.134233 with > success using the basedpyright language server. Impressions thus far: > > Congrats on a clean and performant implementation! I haven't looked in > detail at the core algorithm, but I made some timing tests of > refontification of a very large python buffer with and without semtok, > and the difference was relatively small. This is with `python-ts-mode' > with `treesit-font-lock-level=3'. > > Your jit-lock function works well. (BTW, this is in contrast with the > advice to `font-lock-fontify-region' that LSP applies, which doesn't > play well with other packages, e.g. returning a region of (0 . 0) when > it doesn't have any semantic info, and not calling the underlying > function it wraps). So a real advance. > > I wonder about face priority: since your function comes before > `font-lock-fontify-region' on the `jit-lock-functions' list, I believe > it always overrides underlying major-mode fontification (e.g. via > tree-sitter). > > One good approach to avoid this hard-coded precedence: create your own > property alias (see `char-property-alias-alist'), > e.g. `eglot-semtok-face', instead of re-using font-lock's > (`font-lock-face'). The user-configurable /order/ of the `face' alias > in this alist will then determine priority, if both properties are > applied to the same text (you could obviously provide a convenience > custom variable to simplify this for the user). > > + (remove-list-of-text-properties beg end '(font-lock-face)) > > This would normally be `font-lock-unfontify-buffer', but if you use your > own alias instead of re-using font-lock's, you can also simply remove it > from the alias alist (see `font-lock-default-function'). > > One small thing I noticed: > > When a semantic category is missing a face, the warning mentions, e.g. > > ⛔ Warning (eglot-semtok): No face has been associated to the semantic > token ‘selfParameter’: consider adding a corresponding definition to > eglot--semtokfaces > > rather than `eglot-semantic-tokens-faces' or > `eglot-semantic-tokens-modifier-faces'. > > Thanks for your contribution. Will continue to test, but so far, so > good!
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.Received: (at 79374) by debbugs.gnu.org; 20 Sep 2025 18:17:46 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 20 14:17:46 2025 Received: from localhost ([127.0.0.1]:47535 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1v029a-0004Od-5O for submit <at> debbugs.gnu.org; Sat, 20 Sep 2025 14:17:46 -0400 Received: from mail-yx1-xb12d.google.com ([2607:f8b0:4864:20::b12d]:45354) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <jdtsmith@HIDDEN>) id 1v029S-0004O9-LP for 79374 <at> debbugs.gnu.org; Sat, 20 Sep 2025 14:17:43 -0400 Received: by mail-yx1-xb12d.google.com with SMTP id 956f58d0204a3-635355713d9so271404d50.3 for <79374 <at> debbugs.gnu.org>; Sat, 20 Sep 2025 11:17:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758392252; x=1758997052; darn=debbugs.gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=mOeeSacTWdSeWMatHhM4GjgRYouphKIReKbYPMMVeog=; b=XW9RnWeGqHpoD4lFCZiNrURt0M9MPavc4DFufV4hGTSP3I72BjdGFlOmGSrOryio5t lEJu+x7Cw6xHzBOwbaQaRGzRYoM89HpSKABI73fXJHNERSJeioucmLwSQsUCE6NK76LH hJGpgrzHC9yUUGiCXtgWXsoejN6JJTZzpj6K9uPtKUAwCMEF6tehRw7Lc4kbI0s6ACli 01nzuX4tlu0MfVPb9ToBCtppsTGJ9lkpH+ILGVNfjPRq2xQTwo8n7p3CLEjUWnM/L9Nn N1Rh37753TaqbYs22P2kwFTyknO7uXmwvqQRabZDJAfq57IlKcEgRqNp7JsZblXKkgZU 8YKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758392252; x=1758997052; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=mOeeSacTWdSeWMatHhM4GjgRYouphKIReKbYPMMVeog=; b=qcjyRVvG8ZytSfVQ+SdQD81aFDJvjxK1Co5qN1yZ+na/a2Zz3KrVFMyTJBmwn9B6Lc 9jEV40+AsEfXaFMIEZQ4Gq313pzK5Y+xghsyV5OKLCpwgL8oUk1SqlVlpwUOgxalc3ny fxNrKqsdQx2bblDR+nDHNgqcUdRAhj2vUKcQFmbh/gPw9uu8oah8LdauA+y1FyP3WxVE cVPbI6p/rr8kUtONUUqOyuB20acHtbAkyHpOEkTzt/Y+AjA2R9HI/qa4dzRS6IsCmzK7 n5Qlb6lN6ODRpVRr+i767CoWdhNnGiijuHCRjaQij7fJiRYK7HPZv4UMOPtUvuVTvwK4 hVew== X-Gm-Message-State: AOJu0Yz+fzrD0WsKso7b4EBGlYWiI+gkfIYSZ7Xvslkfwu5ABQ/zZjSl YPBM4QjgruDPkq7EUg9+7BKiDUScN868UQ/avhX8GPopjp6zU+acqa0AqfPZAw== X-Gm-Gg: ASbGncvaV6tmwpzMST8Yjt2UCJd0/gfmxZ5FuzeCBOpPVLQV165ngsdhXM2MXPIjdnt 8ovoXyvgOdpQ8LqyKA0pm2DyPfR6jnzuykCzomMWzF25cbm9ATYtcnsg9BxtDFfhnPwWj8v53a7 cLu/Wp1+vqdRSrrFEHNTp1HqrE8hgceANY0uN8iaUSmWl0b2BaZPacsEno/Fse6tkgYSPGnbrjY eOO2hpbSpVJv2MNI2NGprCreaMALxZugz+HIliPR9hy732Q8KRdm2WAQmrDTruhl7QmbVr/70ks 1PaRPUYSxGw8df/+oyw0WEe8feqbJYbAxeX+lpUDlVzOXk2fylxUl6Tx+nDr/6Kq3npc3TwTR5q HZASDEBWllFwOuoSGoYX+wE13nVF4z86wl/BISfHX+Mfw7su4uwSWk+yA X-Google-Smtp-Source: AGHT+IG8sMnXIUlg1W6/VMXywyxasVnQ+sMdOJ596eYwima5/XiMhf5JYNOd3jPnDYp43liMIQGULg== X-Received: by 2002:a05:690e:4316:b0:635:2cdd:4ba9 with SMTP id 956f58d0204a3-6352cdd4f9emr2414974d50.34.1758392252404; Sat, 20 Sep 2025 11:17:32 -0700 (PDT) Received: from moss-6 (cm-24-53-143-223.buckeyecom.net. [24.53.143.223]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-ea5ce728fb8sm2734496276.10.2025.09.20.11.17.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 11:17:31 -0700 (PDT) From: "J.D. Smith" <jdtsmith@HIDDEN> To: "Lua V. R." <me@HIDDEN> Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens In-Reply-To: <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> (Lua V. R.'s message of "Tue, 2 Sep 2025 23:18:35 +0000 (UTC)") References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN> <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> Date: Sat, 20 Sep 2025 14:17:31 -0400 Message-ID: <m2frchvvic.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79374 Cc: Eshel Yaron <me@HIDDEN>, 79374 <at> debbugs.gnu.org, =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) "Lua V. R." <me@HIDDEN> writes: BTW, since semantic highlighting may be coming to elisp too (see https://git.sr.ht/~eshel/semel), perhaps it makes sense to deploy a small set of new face names for a subset of semantic categories. These could then be used consistently in eglot, semel, and elsewhere.
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.Received: (at 79374) by debbugs.gnu.org; 20 Sep 2025 18:06:42 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 20 14:06:42 2025 Received: from localhost ([127.0.0.1]:47439 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1v01yr-0003Zf-Rl for submit <at> debbugs.gnu.org; Sat, 20 Sep 2025 14:06:42 -0400 Received: from mail-yw1-x112c.google.com ([2607:f8b0:4864:20::112c]:53601) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <jdtsmith@HIDDEN>) id 1v01yj-0003Yc-Sl for 79374 <at> debbugs.gnu.org; Sat, 20 Sep 2025 14:06:38 -0400 Received: by mail-yw1-x112c.google.com with SMTP id 00721157ae682-749399349ddso2646487b3.3 for <79374 <at> debbugs.gnu.org>; Sat, 20 Sep 2025 11:06:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758391583; x=1758996383; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=L+7gsF9QvBBJ8DPMdThY9F+fkzMZsEC9PU5QyZtpIsU=; b=CL5ZIQPHqzUGRG1dw+ONflQPKwhNo8XRQX2Tr8uegKRNNEjl3XZu3f+DJWHs0y3kFJ EM90LFCgkEHmae/dlfUXEpky09wbK34lER76r2K5J+7VYRtep1imjzY10NcrM2ape189 mkmbeWKCZWcPszf4triaqK7pdOZv9zUhlhGfCFMOppwE5eH1KTRSYaD1NGCIsHNsyLb8 MSl6xPEzrN+5zOSNPa/yZc6YNvdcL1JQK1yryw7z1ZCVBNtwkE7HYc8KPok+4x102r5d Nq+PJi93r9IMOx5WLbPJp9lPMvgQ4Lmv9ay7ZE9ESifbUy+ocL8fUdP9bRO9s3CVIB+m ulcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758391583; x=1758996383; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=L+7gsF9QvBBJ8DPMdThY9F+fkzMZsEC9PU5QyZtpIsU=; b=PFgvb3ovIPIe3od7wuUhp5reBAgMVo1FyPa81FmfFlMnXqyGmhTyfSuYvftJ7PT4+f nWmScQQZH0xH15DfLBSycoZM1Sj4P4I2BLaAIxfFAvD9uu/0bYMa8c3k4q4SLdKmrwH5 jmJInzVt6dvR9TmZ4xQcxeRuv/l1zgetiehadcKYikERpuO/xkkKmBNNf0MHCwWjE6rj QYdO05Ey54fgIcQGRpqhePJTGFRBoSIrrWYVAy6j8b2TzsLBmZZp3LCeM0IpYT+5RM6n A1ZeXoBi7KQiTFpJJR9Rxu7iR2S6fin3JIdK6PMhJIylPokCMtjCsRqAMfPMU47iLuYq 01eA== X-Forwarded-Encrypted: i=1; AJvYcCWoKJVAs1MZxBPFejAoFX8u/PXEWGSKNsynkJDOqHM5UVXBl4BsGePFzGaLcsKiIyqj792Gww==@debbugs.gnu.org X-Gm-Message-State: AOJu0YxPeISlzTXEM9mPAdOrQNj/Vhd6ZjKzESgvx5kCCzo2XZUEBlKg 5x/m9e+LxhNjVtz47M2fMsx7rabWC7mEqUwKVibnaP910tdULlmWwlHRZ8AGJQ== X-Gm-Gg: ASbGncuaZx/GWAWyNAnk3fYPH6PKcalD4owa3nn8OmfEQqTNJumxmJXcLi2WLyu6T8/ a0wslzP5kEkZ6qWndrUpd4PxrrZAstXwo99b4wUsqANZBizE1xuhM+Z9hN6hXuuj9OlC/WA/xXU Y8YeyoCvf9NNKPRsPoiHPWqrvTf8ib0mqJoC1bFkGHldY+Rgq8rEbuKB9w8kWNPhXyYeYg/hL+j XcvZvOwenTKDyWbr+M1oDNJq4t2CHamhjRtMWpFvxtdz7G5owPdE/xbLp4Jv2B2ON9Mj6+pIRmS mBMEsiYmwhVp9ndiRHQzPpe2TjOwRu406Dfv86ZFRym0KMP4VVSz5V0GFeqOWIc56tVCe8N4dvw pt+G87uptMW37WwfCCz6w+RbkjQPJlDseCURX93C53OFZ2aVldESFVWDO X-Google-Smtp-Source: AGHT+IEl7J8/nT27vjDCNbrSLyX+XMSWnyycPdqgtARMvYx8in3poGOGZQwceVsjRD3y9Y16zLxgsw== X-Received: by 2002:a05:690c:6f90:b0:742:a0be:e3fd with SMTP id 00721157ae682-742a0beeec4mr45218907b3.17.1758391582611; Sat, 20 Sep 2025 11:06:22 -0700 (PDT) Received: from moss-6 (cm-24-53-143-223.buckeyecom.net. [24.53.143.223]) by smtp.gmail.com with ESMTPSA id 00721157ae682-739716bddf2sm22196457b3.15.2025.09.20.11.06.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 11:06:22 -0700 (PDT) From: "J.D. Smith" <jdtsmith@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens In-Reply-To: <CALDnm523KVxY_UTOmRx25ETWnyUV=i-kVQh6+stU_8kecgggaQ@HIDDEN> (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vora=22's?= message of "Sat, 20 Sep 2025 18:52:26 +0100") References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN> <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> <87ecsoc6cz.fsf@HIDDEN> <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> <m2o6r5vxmz.fsf@HIDDEN> <CALDnm523KVxY_UTOmRx25ETWnyUV=i-kVQh6+stU_8kecgggaQ@HIDDEN> Date: Sat, 20 Sep 2025 14:06:21 -0400 Message-ID: <m2jz1tvw0y.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79374 Cc: "Lua V. R." <me@HIDDEN>, Philip Kaludercic <philipk@HIDDEN>, 79374 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes: > Thanks for the testing, JD. Are you using in conjunction with inlay hints= ? Lua reported some misinteractions... > I typically disable inlay-hints unless I need them. I've re-enabled and haven't noticed any issues in a few minutes of testing. I'd be surprised they interact from a display POV, since one uses overlays and the other text properties.
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.Received: (at 79374) by debbugs.gnu.org; 20 Sep 2025 17:52:52 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 20 13:52:52 2025 Received: from localhost ([127.0.0.1]:47312 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1v01lT-0002JK-BT for submit <at> debbugs.gnu.org; Sat, 20 Sep 2025 13:52:52 -0400 Received: from mail-ot1-x32e.google.com ([2607:f8b0:4864:20::32e]:52603) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1v01lK-0002IV-Vn for 79374 <at> debbugs.gnu.org; Sat, 20 Sep 2025 13:52:48 -0400 Received: by mail-ot1-x32e.google.com with SMTP id 46e09a7af769-758a28587e5so3909123a34.1 for <79374 <at> debbugs.gnu.org>; Sat, 20 Sep 2025 10:52:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758390757; x=1758995557; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=uH23Bv3pdBKH9y7XhMKw2wCyJxHD64QS1oPyhbLqF/Q=; b=IKtbfr6jLpG7kRaf28p8QysqbX1l5TFD5+QfZJW2aw+dOTIjgVADaA4+JLAegEbDvS 21zljjR0uyoUP4uJ4ttbIcFjjvOVaS916y8tAvqIKklaNFxLwRYNU1PJnfow5T3FUTly lWnmoNQ3wXSrd0NXO1+KIaxaiZ/Y1Xz/XgtY9uAvmzSn8hFE1eq+N1wN3O7mUj1pKXXd gXWFO8xI2WJGZdJZHQgS4BFvjZgr6wSbBAU85544nS2U0T9UnkYeuyFSym5LINymo3Og HgjX+Xmpz0rRyqSZkk15rcJcKwEVsQhxrjcN3nKJtcDttGcgxcrbK2tg136cVfn/lqQx 4vCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758390757; x=1758995557; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=uH23Bv3pdBKH9y7XhMKw2wCyJxHD64QS1oPyhbLqF/Q=; b=JIhBAjiypqWV5IXq7McjY4x7K0IGHW80afpGKPejAwG2EjP7llIhUVo+Y6eJjoEZ36 Ed5dxiic+giCoq1pt/R34pNwxttojOuX/J8wWiz33600ekkCwLU+qqMOEZlVFwmnX4Pi cZvq0RG0xmO+muTztnknTew4AYG3xdlA84FGETkctUc+3wAMRm2pZNMEPK/nEa5qLrAN LHBqhDXitdrdEmi/iQg4vabkN/T0HoJk6WihKE+WChoevbh+UHD8RzX7aGEM0/oJB4sU BntOUbT9suShZnXdz/3S+tEL7BT3/syMQNu94at9+jPPQLc9G3R9HMBOgMDKYbvUKUiY BHQQ== X-Forwarded-Encrypted: i=1; AJvYcCVsWDS88/rktc0WLJ42MY4qCCh55NrczjkMvhUqU9NbbkYs05Zvd7T/VASRjcn/R9cwfGNgyA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YyWjGrq0jPpe7r8HWHmKGg37U7PVaXLx5Yv+CGU++UbeYFT4ZZH j5rdSTYE2x19LXB+PYCJ1PUvZo4pi9R/EyVoVV74urDlUAv/vea0TCQYv25CAhCXObi3nNlOh39 QiA+6ZVcq4Okbcpm50qxW+lMElmG6To4= X-Gm-Gg: ASbGnctfRvOqoHajMH2//VpK1Vu0SPVEdiE0u4Vw5hyRTNuXdrkAUnpE+sUNo0baO3E KUvJkY0XEIq37SfefCxro1sKAUMu61KcrmvTQ1RwQuiau+9zpBbE4am+oE+fDr8mp5lhPpXXTX5 Wyp757yj7N2d+X0tJd9PX/SYYcFjkv2mENdceKF+HiflbcnckmE6g8HcO0DSwxKNvLys5dKjfcZ TJ1NDw= X-Google-Smtp-Source: AGHT+IH4VvS5QPB2W1Sk8Tyy8p1+MwgwYtNxywdLvKeJBao4z1cuL8Xa0VXisir29LFlY6pcyS+QexfYvDmsC50N0tE= X-Received: by 2002:a05:6808:2212:b0:43d:220f:a695 with SMTP id 5614622812f47-43d6c2a0c1fmr3623283b6e.41.1758390756709; Sat, 20 Sep 2025 10:52:36 -0700 (PDT) MIME-Version: 1.0 References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN> <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> <87ecsoc6cz.fsf@HIDDEN> <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> <m2o6r5vxmz.fsf@HIDDEN> In-Reply-To: <m2o6r5vxmz.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Sat, 20 Sep 2025 18:52:26 +0100 X-Gm-Features: AS18NWCzuTEaK-V0UKZfUv0K5wyrAhIXwpWj1NubEL9uBuMiXHf2yYdF-aRvTws Message-ID: <CALDnm523KVxY_UTOmRx25ETWnyUV=i-kVQh6+stU_8kecgggaQ@HIDDEN> Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens To: "J.D. Smith" <jdtsmith@HIDDEN> Content-Type: multipart/alternative; boundary="0000000000006e1b55063f3f405c" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79374 Cc: "Lua V. R." <me@HIDDEN>, Philip Kaludercic <philipk@HIDDEN>, 79374 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --0000000000006e1b55063f3f405c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the testing, JD. Are you using in conjunction with inlay hints? Lua reported some misinteractions... Jo=C3=A3o T=C3=A1vora On Sat, Sep 20, 2025, 18:31 J.D. Smith <jdtsmith@HIDDEN> wrote: > "Lua V. R." <me@HIDDEN> writes: > > > Hi Philip, > > > > Em 03/09/2025 05:01, Philip Kaludercic escreveu: > >> As mentioned on Emacs-devel, shouldn't this be > `eglot-semantic-tokens-mode'. > > Thanks for catching this :) I fixed it among other things, and I > > apologize for being unfamiliar with the e-mail git workflow. I don't > > know if I should send a patch on top of the previous patch, but I'm > > sending a squashed one. > > > > In this new patch I also removed a "hash" I used in attempt to avoid a > > burst of requests, because it was not working in some particular > > situations (I can explain if you want). Now, due to how jit-lock > > works, Eglot may send two requests after a didChange if the server > > does not support delta requests. But this was also the case in the > > version with the hash, so alas, it was just complicating things. > > I've been testing this patch against eglot-1.18.0.20250906.134233 with > success using the basedpyright language server. Impressions thus far: > > Congrats on a clean and performant implementation! I haven't looked in > detail at the core algorithm, but I made some timing tests of > refontification of a very large python buffer with and without semtok, > and the difference was relatively small. This is with `python-ts-mode' > with `treesit-font-lock-level=3D3'. > > Your jit-lock function works well. (BTW, this is in contrast with the > advice to `font-lock-fontify-region' that LSP applies, which doesn't > play well with other packages, e.g. returning a region of (0 . 0) when > it doesn't have any semantic info, and not calling the underlying > function it wraps). So a real advance. > > I wonder about face priority: since your function comes before > `font-lock-fontify-region' on the `jit-lock-functions' list, I believe > it always overrides underlying major-mode fontification (e.g. via > tree-sitter). > > One good approach to avoid this hard-coded precedence: create your own > property alias (see `char-property-alias-alist'), > e.g. `eglot-semtok-face', instead of re-using font-lock's > (`font-lock-face'). The user-configurable /order/ of the `face' alias > in this alist will then determine priority, if both properties are > applied to the same text (you could obviously provide a convenience > custom variable to simplify this for the user). > > + (remove-list-of-text-properties beg end '(font-lock-face)) > > This would normally be `font-lock-unfontify-buffer', but if you use your > own alias instead of re-using font-lock's, you can also simply remove it > from the alias alist (see `font-lock-default-function'). > > One small thing I noticed: > > When a semantic category is missing a face, the warning mentions, e.g. > > =E2=9B=94 Warning (eglot-semtok): No face has been associated to the sema= ntic > token =E2=80=98selfParameter=E2=80=99: consider adding a corresponding de= finition to > eglot--semtokfaces > > rather than `eglot-semantic-tokens-faces' or > `eglot-semantic-tokens-modifier-faces'. > > Thanks for your contribution. Will continue to test, but so far, so > good! > --0000000000006e1b55063f3f405c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto"><div>Thanks for the testing, JD. Are you using in conjunc= tion with inlay hints? Lua reported some misinteractions...</div><div><br><= /div><div data-smartmail=3D"gmail_signature">Jo=C3=A3o T=C3=A1vora</div></d= iv><br><div class=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" cl= ass=3D"gmail_attr">On Sat, Sep 20, 2025, 18:31 J.D. Smith <<a href=3D"ma= ilto:jdtsmith@HIDDEN">jdtsmith@HIDDEN</a>> wrote:<br></div><blockq= uote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1p= x solid rgb(204,204,204);padding-left:1ex">"Lua V. R." <<a hre= f=3D"mailto:me@HIDDEN" target=3D"_blank" rel=3D"noreferrer">me@HIDDEN= g.br</a>> writes:<br> <br> > Hi Philip,<br> ><br> > Em 03/09/2025 05:01, Philip Kaludercic escreveu:<br> >> As mentioned on Emacs-devel, shouldn't this be `eglot-semantic= -tokens-mode'.<br> > Thanks for catching this :) I fixed it among other things, and I<br> > apologize for being unfamiliar with the e-mail git workflow. I don'= ;t<br> > know if I should send a patch on top of the previous patch, but I'= m<br> > sending a squashed one.<br> ><br> > In this new patch I also removed a "hash" I used in attempt = to avoid a<br> > burst of requests, because it was not working in some particular<br> > situations (I can explain if you want). Now, due to how jit-lock<br> > works, Eglot may send two requests after a didChange if the server<br> > does not support delta requests. But this was also the case in the<br> > version with the hash, so alas, it was just complicating things.<br> <br> I've been testing this patch against eglot-1.18.0.20250906.134233 with<= br> success using the basedpyright language server.=C2=A0 Impressions thus far:= <br> <br> Congrats on a clean and performant implementation!=C2=A0 I haven't look= ed in<br> detail at the core algorithm, but I made some timing tests of<br> refontification of a very large python buffer with and without semtok,<br> and the difference was relatively small.=C2=A0 This is with `python-ts-mode= '<br> with `treesit-font-lock-level=3D3'.<br> <br> Your jit-lock function works well.=C2=A0 (BTW, this is in contrast with the= <br> advice to `font-lock-fontify-region' that LSP applies, which doesn'= t<br> play well with other packages, e.g. returning a region of (0 . 0) when<br> it doesn't have any semantic info, and not calling the underlying<br> function it wraps).=C2=A0 So a real advance.<br> <br> I wonder about face priority: since your function comes before<br> `font-lock-fontify-region' on the `jit-lock-functions' list, I beli= eve<br> it always overrides underlying major-mode fontification (e.g. via<br> tree-sitter).<br> <br> One good approach to avoid this hard-coded precedence: create your own<br> property alias (see `char-property-alias-alist'),<br> e.g. `eglot-semtok-face', instead of re-using font-lock's<br> (`font-lock-face').=C2=A0 The user-configurable /order/ of the `face= 9; alias<br> in this alist will then determine priority, if both properties are<br> applied to the same text (you could obviously provide a convenience<br> custom variable to simplify this for the user).<br> <br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (remove-list-of-text-properties beg end= '(font-lock-face))<br> <br> This would normally be `font-lock-unfontify-buffer', but if you use you= r<br> own alias instead of re-using font-lock's, you can also simply remove i= t<br> from the alias alist (see `font-lock-default-function').<br> <br> One small thing I noticed:<br> <br> When a semantic category is missing a face, the warning mentions, e.g.<br> <br> =E2=9B=94 Warning (eglot-semtok): No face has been associated to the semant= ic<br> token =E2=80=98selfParameter=E2=80=99: consider adding a corresponding defi= nition to<br> eglot--semtokfaces<br> <br> rather than `eglot-semantic-tokens-faces' or<br> `eglot-semantic-tokens-modifier-faces'.<br> <br> Thanks for your contribution.=C2=A0 Will continue to test, but so far, so<b= r> good!<br> </blockquote></div> --0000000000006e1b55063f3f405c--
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.Received: (at 79374) by debbugs.gnu.org; 20 Sep 2025 17:31:51 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 20 13:31:51 2025 Received: from localhost ([127.0.0.1]:47092 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1v01R8-0007vD-9r for submit <at> debbugs.gnu.org; Sat, 20 Sep 2025 13:31:51 -0400 Received: from mail-yw1-x1133.google.com ([2607:f8b0:4864:20::1133]:55661) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <jdtsmith@HIDDEN>) id 1v01Qx-0007sX-VR for 79374 <at> debbugs.gnu.org; Sat, 20 Sep 2025 13:31:44 -0400 Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-74109e2ed70so9910677b3.3 for <79374 <at> debbugs.gnu.org>; Sat, 20 Sep 2025 10:31:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1758389494; x=1758994294; darn=debbugs.gnu.org; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BRSNTuAEWrnfLUwptCXn8vGWQD3nL2CLrdKP2d9sMHY=; b=avxkVRlgzUX4FMV6GAYNHd4fO9gpQ8EWGxB7RofQWg1acYPF/PY7vqTHc75vRVErso zM7Z9p+sZ3HBFUN9RqgRcYzQKJ9Z5YAkBLU+1SLqkh1WGTEoG+dkVu1SZ9pRWk0X6wV8 VyWa2MmOuDoBJF2RmcZSUIro1oosY5saLMXM3izk8tZ8kwAO2MkB2RsJrOhI99QSzQSd PcPgvNNRebfTsSxtNmAnNh3/mq2ElB66tfL25CLtsg0/JGRhezauDDGcuD3fv8ksgdAQ Dkk5bKl5Zi5ZWRcygdQay4QYNWW7KSQNIF62UkFMomgL1rPn6gHcNczS/v7RtonUlFgD LPUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1758389494; x=1758994294; h=content-transfer-encoding:mime-version:user-agent:message-id:date :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=BRSNTuAEWrnfLUwptCXn8vGWQD3nL2CLrdKP2d9sMHY=; b=jaS/1Ak8sQ3Ohxl1MM2BpvDTYwuWoZ9NiQcn1S/6eOiNi5hULMAZdqKm1vwg+v1k0w XkDzYW4dB50atRaPgWOkFhljlglF2dqZtHdPnX73AvS2nzxBuRwEM10SB1CouU8bdAMV 1NbRi+Abg5gj/H963sOdDX+KafQnXWB43anybJ4MAaLrFPdTr9JRL1Wf3t4Lzia3LYh7 AAX392/F1nNaPFYCvL/4LjaY8Xtr4zcXflMY0DjgoXWUyK4sVigngVFWQPn+MyZXhXzv 7brQav6kjmUssMZGPiTC6PLQ/cjCMKIa/VnsZPpEYhGx8saelwMchnG8Yo7R4IcFnZmT jmEA== X-Forwarded-Encrypted: i=1; AJvYcCUf/fLQFSat96ngaX0XlhVdbZN2AwxgKV59OddLcSCiSgSXG0SD4SxzcEWAZ85QdWc4/IB+FA==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzqHmvIj36B25DQD2F74MUwN44ICBIOCWgvrrjaCF/yMJ3FlIi+ m6J2FS68nn1xUmo4NWUFKG1qmFR3wRWGnMGlAXhl3hyKcSi6F/Jq25BB X-Gm-Gg: ASbGncvs1VwnDyY3A/XtBFKnVIZtKgHrzE8qOWSZJkpv6sDV1WslVUuOxo4+KGJ2Vm4 ekcZrxYGLyTYBR2Bgg/Gwtnl8Z+lh2fGxvR7NJ25gqmqwCyJZecuDQH4ZFJDDNx5hDRSN0UKJJ/ v7xE6qRM2EqUv2SyphFFEZx2LItgmq9hCNC7BGleyriSqeGKTrZTWQKWcGZTng06+Y6w/yyLbex 1DrpnbzhitRmD+qPJH7MLlRnHSFBDqxrYbF30IlOeZ8gQOzXnWc9brlZeN9GoA8+h2yyXuJhoFY A5zJRBWoKe1vGF/HFypLogQJuoXicX1t7hL+v4FNSkzVrl2fOKPNYd13cp4pqDOrEJ1RE3RNUOe lXRVcZCW9jF5XBjyGgXsaa9sjZ8QQVJhE/AwjpHUWGaHDDTPmtulLxsI3 X-Google-Smtp-Source: AGHT+IHhSgbuFKBlNfgbJC9ZWiFPPynw7EvDY/cJ2g6m901u5PwNKe/GoBnh9ozcMqrz0My22XF4GA== X-Received: by 2002:a05:690c:c81:b0:71c:bf3:afb0 with SMTP id 00721157ae682-73d3c013ca7mr57518477b3.40.1758389493623; Sat, 20 Sep 2025 10:31:33 -0700 (PDT) Received: from moss-6 (cm-24-53-143-223.buckeyecom.net. [24.53.143.223]) by smtp.gmail.com with ESMTPSA id 00721157ae682-7397186ac2dsm22441617b3.42.2025.09.20.10.31.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Sep 2025 10:31:33 -0700 (PDT) From: "J.D. Smith" <jdtsmith@HIDDEN> To: "Lua V. R." <me@HIDDEN> Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens In-Reply-To: <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> (Lua V. R.'s message of "Thu, 4 Sep 2025 00:02:51 +0000 (UTC)") References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN> <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> <87ecsoc6cz.fsf@HIDDEN> <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> Date: Sat, 20 Sep 2025 13:31:32 -0400 Message-ID: <m2o6r5vxmz.fsf@HIDDEN> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79374 Cc: Philip Kaludercic <philipk@HIDDEN>, 79374 <at> debbugs.gnu.org, =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) "Lua V. R." <me@HIDDEN> writes: > Hi Philip, > > Em 03/09/2025 05:01, Philip Kaludercic escreveu: >> As mentioned on Emacs-devel, shouldn't this be `eglot-semantic-tokens-mo= de'. > Thanks for catching this :) I fixed it among other things, and I > apologize for being unfamiliar with the e-mail git workflow. I don't > know if I should send a patch on top of the previous patch, but I'm > sending a squashed one. > > In this new patch I also removed a "hash" I used in attempt to avoid a > burst of requests, because it was not working in some particular > situations (I can explain if you want). Now, due to how jit-lock > works, Eglot may send two requests after a didChange if the server > does not support delta requests. But this was also the case in the > version with the hash, so alas, it was just complicating things. I've been testing this patch against eglot-1.18.0.20250906.134233 with success using the basedpyright language server. Impressions thus far: Congrats on a clean and performant implementation! I haven't looked in detail at the core algorithm, but I made some timing tests of refontification of a very large python buffer with and without semtok, and the difference was relatively small. This is with `python-ts-mode' with `treesit-font-lock-level=3D3'. Your jit-lock function works well. (BTW, this is in contrast with the advice to `font-lock-fontify-region' that LSP applies, which doesn't play well with other packages, e.g. returning a region of (0 . 0) when it doesn't have any semantic info, and not calling the underlying function it wraps). So a real advance. I wonder about face priority: since your function comes before `font-lock-fontify-region' on the `jit-lock-functions' list, I believe it always overrides underlying major-mode fontification (e.g. via tree-sitter). One good approach to avoid this hard-coded precedence: create your own property alias (see `char-property-alias-alist'), e.g. `eglot-semtok-face', instead of re-using font-lock's (`font-lock-face'). The user-configurable /order/ of the `face' alias in this alist will then determine priority, if both properties are applied to the same text (you could obviously provide a convenience custom variable to simplify this for the user). + (remove-list-of-text-properties beg end '(font-lock-face)) This would normally be `font-lock-unfontify-buffer', but if you use your own alias instead of re-using font-lock's, you can also simply remove it from the alias alist (see `font-lock-default-function'). One small thing I noticed: When a semantic category is missing a face, the warning mentions, e.g. =E2=9B=94 Warning (eglot-semtok): No face has been associated to the semant= ic token =E2=80=98selfParameter=E2=80=99: consider adding a corresponding defi= nition to eglot--semtokfaces rather than `eglot-semantic-tokens-faces' or `eglot-semantic-tokens-modifier-faces'. Thanks for your contribution. Will continue to test, but so far, so good!
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.Received: (at 79374) by debbugs.gnu.org; 13 Sep 2025 11:17:33 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 13 07:17:33 2025 Received: from localhost ([127.0.0.1]:54022 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uxOG5-0003rN-33 for submit <at> debbugs.gnu.org; Sat, 13 Sep 2025 07:17:33 -0400 Received: from mail-ot1-x331.google.com ([2607:f8b0:4864:20::331]:57468) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1uxOG1-0003qx-9b for 79374 <at> debbugs.gnu.org; Sat, 13 Sep 2025 07:17:30 -0400 Received: by mail-ot1-x331.google.com with SMTP id 46e09a7af769-750b77699b4so2186476a34.2 for <79374 <at> debbugs.gnu.org>; Sat, 13 Sep 2025 04:17:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757762243; x=1758367043; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=RaqjOMNfQd8B8FPtEiHmF+xaqEV9gM0GwfSsVkCDY64=; b=KXh8f+vgh88WxObo1RIIIW6ymek1zgE6JUHPadwWkfqqUBJ/PVmvb31FQf4EHYqW05 ukLnrkAOOlWMWexdpuqFVQXzOcaRA5EgX83gwCnNWDndwDNdrWCr2ZAAzgCVQIS/CqRF ez9pNHPcOT7vuFCf2vsroarhPIDox3pKhO3mtfUwP7KVk1ajrkcocZ5QgZTE9ewncWqs gm1SxxtGleo0vqPvNdDQJ6u78UfuiZqwyzWmXE6Wju2lLyQxv2MvSoQGeoKu5YvtYOvV 4STTxTrkIsykN0IHvDOIu5GWVdodROqDlrnJGiS8EGPY1FcevYscEonBlDQxN0Kws8gb n8tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757762243; x=1758367043; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RaqjOMNfQd8B8FPtEiHmF+xaqEV9gM0GwfSsVkCDY64=; b=NmDrCVZHsE1dxR+obZZyNqlgAGDYwQL0hPKycA1t5aw/kX6WzuuqJi2jNwYorvg13l Ou/LYvHMLKS7ozOPALo9ezVxoAsvaUaZcd7+fu9dhbppCTHpmO/b+Lkpy5nJpE0wcd4b YdPLOcK2RtiISRIPDLYpd+hJ81IfozebiuuOpC7VlLsRBXrT60ntJqJq+ANWjS/SltMH aNfXyWOsASMDdOIG/xhrmm3zgd35VnX1SlLBaj9QhnICDkQN6SiiSxwZPlrVhlvGj70o LzGLZXYHhzZiBKcJ+DLEBYFrI2vaQIVDEVH8K6JKdrR6yB+EGaFiOcdpK81HFp4ZQxFp stIw== X-Forwarded-Encrypted: i=1; AJvYcCXZvS3T3QAtt08S9dQXtqrnAYT3w1kWWTfjtp0xzxdOhIuJl1Q7D7cIOUlU8/Jz9AwExUA8cQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YyOns4iUTFIDF/RrJboDQ9nT2FC7wh/JYJdNxaxhCgTruwv3fhB tCoTfjftt/1AWpf5kqoRPBwvg6r3tMAmN5auGk/r/4GKRFjulI0Rg0j+CJ8TbMh8usJL4xjc1MJ lxnufmjokYabywG3LyatqNRo3xFfKJjw= X-Gm-Gg: ASbGncslj9u1a5Ftz5ikOUrtjMDmTspS9UmQgSQB6c11dpmbeZ5fnIwQTdwQmxBYdjK eNNvWFpcKsYsgYh/S4NWuFoWc3vTKElhPT3tIyf7pDnSbGkjmVeVQCaXfRQVXKOhOvAbDBeSz/3 Le9T6AnpQ6uz0+nZD9sHpXOyiW+LhObkw5ez/vhj9NASYaD620YIo1iZS6AF+JXfeVYcU4MioVQ HZVyns= X-Google-Smtp-Source: AGHT+IH6XBDr8Ne+/D10CZYRMXef2ZU7K1R/5G47Cnxld8Ath2GxLhUG5N1RXhi40Fvas6e02+VXbH40EWOCdpV7c0U= X-Received: by 2002:a05:6830:4d93:10b0:756:a322:2f8 with SMTP id 46e09a7af769-756a32206a2mr259813a34.5.1757762243264; Sat, 13 Sep 2025 04:17:23 -0700 (PDT) MIME-Version: 1.0 References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN> <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> <87ecsoc6cz.fsf@HIDDEN> <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> <86348qss28.fsf@HIDDEN> <CALDnm53cba7uWDOrWSX5H7qGcGdxV9wRh=x0=Rxxnvb3U+F5Sg@HIDDEN> <864it6r588.fsf@HIDDEN> In-Reply-To: <864it6r588.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Sat, 13 Sep 2025 12:18:23 +0100 X-Gm-Features: Ac12FXwVVTUJrBCo75QIFCZ2f0m1NMUD9JXNXsX6DnKe57raEUFLg5rWi7FyQkE Message-ID: <CALDnm50OXd8MKtyXhSMD2bhD0sz1fCOemjRV+YTrQjsNX=7F+g@HIDDEN> Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens To: Eli Zaretskii <eliz@HIDDEN> Content-Type: multipart/alternative; boundary="0000000000001c0703063eacea1a" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 79374 Cc: me@HIDDEN, philipk@HIDDEN, 79374 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --0000000000001c0703063eacea1a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Sep 13, 2025 at 11:56=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote= : > > From: Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> > > Date: Sat, 13 Sep 2025 10:12:38 +0100 > > Cc: me@HIDDEN, philipk@HIDDEN, 79374 <at> debbugs.gnu.org > > > > On Sat, Sep 13, 2025 at 8:57=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wr= ote: > > > > Jo=C3=A3o, any comments on the patch? Should I install it? > > > > No, don't . This is a significant feature which is missing testing, > > documentations and a much more thorough review. I don't > > have time for that right now. > > > > I can say that, from a very cursory review, it is the best version > > of this feature ever proposed to Eglot. > > OK, thanks. Should I ping you about this at some later date? > Yes, that is fine. I'll try to take a look at it this week. --0000000000001c0703063eacea1a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div class=3D"gmail_quote gmail_quote_container"><div dir= =3D"ltr" class=3D"gmail_attr">On Sat, Sep 13, 2025 at 11:56=E2=80=AFAM Eli = Zaretskii <<a href=3D"mailto:eliz@HIDDEN">eliz@HIDDEN</a>> wrote:<b= r></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex= ;border-left:1px solid rgb(204,204,204);padding-left:1ex">> From: Jo=C3= =A3o T=C3=A1vora <<a href=3D"mailto:joaotavora@HIDDEN" target=3D"_bla= nk">joaotavora@HIDDEN</a>><br> > Date: Sat, 13 Sep 2025 10:12:38 +0100<br> > Cc: <a href=3D"mailto:me@HIDDEN" target=3D"_blank">me@HIDDEN= </a>, <a href=3D"mailto:philipk@HIDDEN" target=3D"_blank">philipk@poste= o.net</a>, <a href=3D"mailto:79374 <at> debbugs.gnu.org" target=3D"_blank">79374= @debbugs.gnu.org</a><br> > <br> > On Sat, Sep 13, 2025 at 8:57=E2=80=AFAM Eli Zaretskii <<a href=3D"m= ailto:eliz@HIDDEN" target=3D"_blank">eliz@HIDDEN</a>> wrote:<br> > <br> >=C2=A0 Jo=C3=A3o, any comments on the patch?=C2=A0 Should I install it?= <br> > <br> > No, don't . This is a significant feature which is missing testing= , <br> > documentations and a much more thorough review.=C2=A0 I don't<br> > have time for that right now.<br> > <br> > I can say that, from a very cursory review, it is the best version <br= > > of this=C2=A0 feature ever proposed to Eglot.<br> <br> OK, thanks.=C2=A0 Should I ping you about this at some later date?<br> </blockquote></div><div><br clear=3D"all"></div>Yes, that is fine.=C2=A0 I&= #39;ll try to take a look at it this week.</div> --0000000000001c0703063eacea1a--
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.Received: (at 79374) by debbugs.gnu.org; 13 Sep 2025 10:56:18 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 13 06:56:18 2025 Received: from localhost ([127.0.0.1]:53927 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uxNvW-0001ze-1I for submit <at> debbugs.gnu.org; Sat, 13 Sep 2025 06:56:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57044) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uxNvU-0001yq-5B for 79374 <at> debbugs.gnu.org; Sat, 13 Sep 2025 06:56:16 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1uxNvN-0000VW-JX; Sat, 13 Sep 2025 06:56:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=l3OumHPs+PI43Tw2owbpMgZgWVZygzttjftg+t6SJ4w=; b=ouXA4tDLVhdD8yt7MiiA gzNnfFzx570h3BuZXhLnMoxH+8qb6TJEINHoSyWU08lDLwwX2TGtN87gWunBXbPGt/R1hNPDxYYqH 5cxsNx48KKO0EiCM6zSk6m/fiq4vwDkTEidFnnmhAJyntUrFheoKVnKQGIVFyOkNmN+P9Bjai+Irc TbgACtDcaaog4gV8PPY+6awyKr16bfO0HhpYSE1SBAPAtP0dfKsSoXELE/JBbF1R0KyRoqjRGHkbw H+jAl9aCi5N4/gg/OzQasIl6S5MN3TZsxYaq0dcZbKu/jZpJr/uL5NDvkYsRL9ZxO7xtU2LHmhxbr +2vqpOex3EdZSA==; Date: Sat, 13 Sep 2025 13:56:07 +0300 Message-Id: <864it6r588.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CALDnm53cba7uWDOrWSX5H7qGcGdxV9wRh=x0=Rxxnvb3U+F5Sg@HIDDEN> (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Sat, 13 Sep 2025 10:12:38 +0100) Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN> <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> <87ecsoc6cz.fsf@HIDDEN> <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> <86348qss28.fsf@HIDDEN> <CALDnm53cba7uWDOrWSX5H7qGcGdxV9wRh=x0=Rxxnvb3U+F5Sg@HIDDEN> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 79374 Cc: me@HIDDEN, philipk@HIDDEN, 79374 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > From: João Távora <joaotavora@HIDDEN> > Date: Sat, 13 Sep 2025 10:12:38 +0100 > Cc: me@HIDDEN, philipk@HIDDEN, 79374 <at> debbugs.gnu.org > > On Sat, Sep 13, 2025 at 8:57 AM Eli Zaretskii <eliz@HIDDEN> wrote: > > João, any comments on the patch? Should I install it? > > No, don't . This is a significant feature which is missing testing, > documentations and a much more thorough review. I don't > have time for that right now. > > I can say that, from a very cursory review, it is the best version > of this feature ever proposed to Eglot. OK, thanks. Should I ping you about this at some later date?
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.
Received: (at 79374) by debbugs.gnu.org; 13 Sep 2025 09:11:53 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 13 05:11:53 2025
Received: from localhost ([127.0.0.1]:53467 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1uxMIQ-00080t-Kl
for submit <at> debbugs.gnu.org; Sat, 13 Sep 2025 05:11:52 -0400
Received: from mail-ot1-x333.google.com ([2607:f8b0:4864:20::333]:53529)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
(Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>)
id 1uxMIK-00080M-V2
for 79374 <at> debbugs.gnu.org; Sat, 13 Sep 2025 05:11:48 -0400
Received: by mail-ot1-x333.google.com with SMTP id
46e09a7af769-74542b1b2bcso2946381a34.3
for <79374 <at> debbugs.gnu.org>; Sat, 13 Sep 2025 02:11:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=20230601; t=1757754698; x=1758359498; darn=debbugs.gnu.org;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:from:to:cc:subject:date:message-id:reply-to;
bh=HEDRX0W6eL1TPCOWlcnQCFTzXoeHUqymXd3YwPb4+4c=;
b=OoujEUzQMY6tp/+HfNnmgrTcfbu/fAJDYDW0wrY28e3OorUMMi6fxhL+S52/ZvQLXE
KZbs3R8t29CfOzKAkBFphHF00QVTu2mL+DhvC3/XzBg3miWAYouykKpV56qjFXQKVGPW
NyFUMTHZ9dgHLS76wUmVipZjAy0Z8Aksq32AeYoEI8ttEe2DOptIAQQBaCpRWoOsRhEF
XWcpBMULuodDQB7wXeYEaR/KgLMmQzdTA11T+Ta4iEeN3CjHHpfcosFYhf+H4XafHDt3
GzwB1OdgZUalrj2P5ozIeuyThPK2rL7jIHQ9u2pR9DzuSpU6PSMYRjEX7YgT3zoceIM6
pK+g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20230601; t=1757754698; x=1758359498;
h=cc:to:subject:message-id:date:from:in-reply-to:references
:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
:reply-to;
bh=HEDRX0W6eL1TPCOWlcnQCFTzXoeHUqymXd3YwPb4+4c=;
b=lwsNtctpyj/qgGCr9zztwWkboY0nviWxn0Iv5ZT3ZSeOj9ERe0kUPELRO57iLifG4o
EhGhLaEILEGl2KK31q5/1ydjdnb8lv3bWB0vSndUT1FxFrzTh2wMlALuc5t/RwABhvK0
9PFVaKUITDO/sPnKoVCwbZYbEA2PdSyBA09Z4MTVw3zr8hAKaWZZQx2dG8SLwi19eS6a
hJoRXNNkKSl7qVfW2QEH8mJdPh/QeB4cend/XZKDj1OFdUu2W0zcB9Mc9+ppk/xlCnrz
iSpinlDhdYFXj1eMFkkF8jJ+CgMhygUxXmOdDaWRBXhXd5wk62og5q7/vmXHI+JkivL8
ofxg==
X-Forwarded-Encrypted: i=1;
AJvYcCXz0byugG1hzICXx9AUFfkfwTFGqdu5LCLOWO47xXgATnzygIZNN5BjV520jkeckL0AABXofQ==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yx+XChR1oCU5cwCeyz4XPDj2O5ov6lAsZNs6JCELlhyUv3Nvo3t
ruQFipA0HIu/aMC3eU8cSRXad76JMOLgapxgiKiM9t6zAHog6B0r4PQibM46WD3BoOkMMu+7J3t
XpKZjNrZHrMBvufUAZ2y+MAYYbGidIK4=
X-Gm-Gg: ASbGncsJ/Qrpb3+AYXf9+Az5pUuWM072z4Z1Vnz+gJeQMH8bMNZTtB8R75Xn4nMX9zy
Y/Q9ToAjUq8AN8ufrLy8ms1XzwCtwCZyVsikWJY9bqbujyTUjJSgbjZ/XmJVciYNbWHvIRyb7ga
XVmsoX9ynWlWjau5HgyJo/iPJUE6ERDQ5pha6zNwwxt7aeFdxm4db68wa38pMcTL+9p6teFZujD
2jONU4xXxpjyWSx0Q==
X-Google-Smtp-Source: AGHT+IE1fS0Goohsd0vv/dggZocJU38sIyLea4DTVQwfB4/d4FqSQoczgCUe4Laa4fBrgRhCwX1XvySMXhFux+6FgT4=
X-Received: by 2002:a05:6830:698e:b0:745:6528:3d52 with SMTP id
46e09a7af769-75353875b51mr3408872a34.14.1757754698332; Sat, 13 Sep 2025
02:11:38 -0700 (PDT)
MIME-Version: 1.0
References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN>
<2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> <87ecsoc6cz.fsf@HIDDEN>
<ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> <86348qss28.fsf@HIDDEN>
In-Reply-To: <86348qss28.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Sat, 13 Sep 2025 10:12:38 +0100
X-Gm-Features: Ac12FXxYn004JjrojK3ievJhePUwURb0Jeyu-Uo7oOs16UGFfUOb3EJUeU_-TB8
Message-ID: <CALDnm53cba7uWDOrWSX5H7qGcGdxV9wRh=x0=Rxxnvb3U+F5Sg@HIDDEN>
Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000657d5a063eab28d8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 79374
Cc: me@HIDDEN, philipk@HIDDEN, 79374 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)
--000000000000657d5a063eab28d8
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Sat, Sep 13, 2025 at 8:57=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:
> Jo=C3=A3o, any comments on the patch? Should I install it?
>
No, don't . This is a significant feature which is missing testing,
documentations and a much more thorough review. I don't
have time for that right now.
I can say that, from a very cursory review, it is the best version
of this feature ever proposed to Eglot.
Jo=C3=A3o
> > Cc: 79374 <at> debbugs.gnu.org,
> > Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN>
> > From: "Lua V. R." <me@HIDDEN>
> > Date: Thu, 4 Sep 2025 00:02:51 +0000 (UTC)
> >
> > Hi Philip,
> >
> > Em 03/09/2025 05:01, Philip Kaludercic escreveu:
> > > As mentioned on Emacs-devel, shouldn't this be
> `eglot-semantic-tokens-mode'.
> > Thanks for catching this :) I fixed it among other things, and I
> > apologize for being unfamiliar with the e-mail git workflow. I don't
> > know if I should send a patch on top of the previous patch, but I'm
> > sending a squashed one.
> >
> > In this new patch I also removed a "hash" I used in attempt to avoid a
> > burst of requests, because it was not working in some particular
> > situations (I can explain if you want). Now, due to how jit-lock works,
> > Eglot may send two requests after a didChange if the server does not
> > support delta requests. But this was also the case in the version with
> > the hash, so alas, it was just complicating things.
> >
> > From 32471c4a0fc9ca80ae8d3c299a3bd55581f8cb04 Mon Sep 17 00:00:00 2001
> > From: Lua Viana Reis <me@HIDDEN>
> > Date: Tue, 2 Sep 2025 19:03:52 -0300
> > Subject: [PATCH] add semantic tokens support for eglot
> >
> > ---
> > lisp/progmodes/eglot.el | 316 +++++++++++++++++++++++++++++++++++++++-
> > 1 file changed, 313 insertions(+), 3 deletions(-)
> >
> > diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
> > index 475b5e13f1..1d9fb7905d 100644
> > --- a/lisp/progmodes/eglot.el
> > +++ b/lisp/progmodes/eglot.el
> > @@ -141,6 +141,8 @@
> > (defvar company-tooltip-align-annotations)
> > (defvar tramp-ssh-controlmaster-options)
> > (defvar tramp-use-ssh-controlmaster-options)
> > +(defvar eglot-semantic-tokens-faces)
> > +(defvar eglot-semantic-tokens-modifier-faces)
> >
> >
> > ;;; Obsolete aliases
> > @@ -1017,6 +1019,7 @@ object."
> > `(:dynamicRegistration
> > ,(if (eglot--trampish-p s) :json-false t))
> > :symbol `(:dynamicRegistration :json-false)
> > + :semanticTokens '(:refreshSupport t)
> > :configuration t
> > :workspaceFolders t)
> > :textDocument
> > @@ -1079,6 +1082,13 @@ object."
> > :formatting `(:dynamicRegistration :json-false)
> > :rangeFormatting `(:dynamicRegistration :json-false)
> > :rename `(:dynamicRegistration :json-false)
> > + :semanticTokens `(:dynamicRegistration :json-false
> > + :requests '(:range t :full (:delta
> t))
> > + :tokenModifiers [,@(mapcar #'car
> eglot-semantic-tokens-modifier-faces)]
> > + :overlappingTokenSupport t
> > + :multilineTokenSupport t
> > + :tokenTypes [,@(mapcar #'car
> eglot-semantic-tokens-faces)]
> > + :formats ["relative"])
> > :inlayHint `(:dynamicRegistration :json-false)
> > :callHierarchy `(:dynamicRegistration :json-false)
> > :typeHierarchy `(:dynamicRegistration :json-false)
> > @@ -1149,7 +1159,16 @@ object."
> > :accessor eglot--managed-buffers)
> > (saved-initargs
> > :documentation "Saved initargs for reconnection purposes."
> > - :accessor eglot--saved-initargs))
> > + :accessor eglot--saved-initargs)
> > + (semtok-faces
> > + :initform nil
> > + :documentation "Semantic tokens faces.")
> > + (semtok-modifier-faces
> > + :initform nil
> > + :documentation "Semantic tokens modifier faces.")
> > + (semtok-modifier-cache
> > + :initform (make-hash-table)
> > + :documentation "A hashmap of modifier values to the selected
> faces."))
> > :documentation
> > "Represents a server. Wraps a process for LSP communication.")
> >
> > @@ -1211,6 +1230,11 @@ If optional MARKERS, make markers instead."
> > (end (eglot--lsp-position-to-point (plist-get range :end)
> markers)))
> > (cons beg end)))
> >
> > +(defun eglot-region-range (beg end)
> > + "Return a LSP range representing region BEG to END."
> > + (list :start (eglot--pos-to-lsp-position beg)
> > + :end (eglot--pos-to-lsp-position end)))
> > +
> > (defun eglot-server-capable (&rest feats)
> > "Determine if current server is capable of FEATS."
> > (unless (cl-some (lambda (feat)
> > @@ -1576,7 +1600,8 @@ Use current server's or first available Eglot
> events buffer."
> > (jsonrpc-forget-pending-continuations server))
> >
> > (defvar eglot-connect-hook
> > - '(eglot-signal-didChangeConfiguration)
> > + '(eglot-signal-didChangeConfiguration
> > + eglot--semtok-initialize)
> > "Hook run after connecting to a server.
> > Each function is passed an `eglot-lsp-server' instance
> > as argument.")
> > @@ -2291,6 +2316,7 @@ If it is activated, also signal
> textDocument/didOpen."
> > ;; Run user hook after 'textDocument/didOpen' so server knows
> > ;; about the buffer.
> > (eglot-inlay-hints-mode 1)
> > + (eglot-semantic-tokens-mode 1)
> > (run-hooks 'eglot-managed-mode-hook))))
> >
> > (add-hook 'after-change-major-mode-hook
> #'eglot--maybe-activate-editing-mode)
> > @@ -4494,6 +4520,288 @@ If NOERROR, return predicate, else erroring
> function."
> > (jit-lock-unregister #'eglot--update-hints)
> > (remove-overlays nil nil 'eglot--inlay-hint t))))
> >
> > +
> > +;;; Semantic tokens
> > +
> > +(defcustom eglot-semantic-tokens-faces
> > + '(("namespace" . font-lock-keyword-face)
> > + ("type" . font-lock-type-face)
> > + ("class" . font-lock-type-face)
> > + ("enum" . font-lock-type-face)
> > + ("interface" . font-lock-type-face)
> > + ("struct" . font-lock-type-face)
> > + ("typeParameter" . font-lock-type-face)
> > + ("parameter" . font-lock-variable-name-face)
> > + ("variable" . font-lock-variable-name-face)
> > + ("property" . font-lock-property-use-face)
> > + ("enumMember" . font-lock-constant-face)
> > + ("event" . font-lock-variable-name-face)
> > + ("function" . font-lock-function-name-face)
> > + ("method" . font-lock-function-name-face)
> > + ("macro" . font-lock-preprocessor-face)
> > + ("keyword" . font-lock-keyword-face)
> > + ("modifier" . font-lock-function-name-face)
> > + ("comment" . font-lock-comment-face)
> > + ("string" . font-lock-string-face)
> > + ("number" . font-lock-constant-face)
> > + ("regexp" . font-lock-string-face)
> > + ("operator" . font-lock-function-name-face)
> > + ("decorator" . font-lock-type-face))
> > + "Alist of faces to use to highlight semantic tokens.
> > +Each element is a cons cell whose car is a token type name and cdr is
> > +the face to use."
> > + :type `(alist :key-type (string :tag "Token name")
> > + :value-type (choice (face :tag "Face")
> > + (plist :tag "Face Attributes"
> > + :key-type
> > + (choice
> > + ,@(mapcar
> > + (lambda (cell)
> > + `(const :tag
> ,(capitalize
> > + (cdr
> cell))
> > + ,(car cell)))
> > +
> face-attribute-name-alist))))))
> > +
> > +(defcustom eglot-semantic-tokens-modifier-faces
> > + '(("declaration" . font-lock-function-name-face)
> > + ("definition" . font-lock-function-name-face)
> > + ("readonly" . font-lock-constant-face)
> > + ("static" . font-lock-keyword-face)
> > + ("deprecated" . eglot-diagnostic-tag-deprecated-face)
> > + ("abstract" . font-lock-keyword-face)
> > + ("async" . font-lock-preprocessor-face)
> > + ("modification" . font-lock-function-name-face)
> > + ("documentation" . font-lock-doc-face)
> > + ("defaultLibrary" . font-lock-builtin-face))
> > + "List of face to use to highlight tokens with modifiers.
> > +Each element is a cons cell whose car is a modifier name and cdr is
> > +the face to use."
> > + :type `(alist :key-type (string :tag "Token name")
> > + :value-type (choice (face :tag "Face")
> > + (plist :tag "Face Attributes"
> > + :key-type
> > + (choice
> > + ,@(mapcar
> > + (lambda (cell)
> > + `(const :tag
> ,(capitalize
> > + (cdr
> cell))
> > + ,(car cell)))
> > +
> face-attribute-name-alist))))))
> > +
> > +(defvar-local eglot--semtok-idle-timer nil
> > + "Idle timer to request full semantic tokens.")
> > +
> > +(defvar-local eglot--semtok-cache nil)
> > +
> > +(defsubst eglot--semtok-put-cache (k v)
> > + "Set key K of `eglot-semantic-tokens--cache' to V."
> > + (setq eglot--semtok-cache
> > + (plist-put eglot--semtok-cache k v)))
> > +
> > +;; Process response
> > +
> > +(defun eglot--semtok-ingest-range-response (response)
> > + "Handle RESPONSE to semanticTokens/range request."
> > + (eglot--semtok-put-cache :response response)
> > + (cl-assert (plist-get eglot--semtok-cache :region)))
> > +
> > +(defun eglot--semtok-ingest-full-response (response)
> > + "Handle RESPONSE to semanticTokens/full request."
> > + (eglot--semtok-put-cache :response response)
> > + (cl-assert (not (plist-get eglot--semtok-cache :region))))
> > +
> > +(defsubst eglot--semtok-apply-delta-edits (old-data edits)
> > + "Apply EDITS obtained from full/delta request to OLD-DATA."
> > + (let* ((old-token-count (length old-data))
> > + (old-token-index 0)
> > + (substrings))
> > + (cl-loop for edit across edits do
> > + (when (< old-token-index (plist-get edit :start))
> > + (push (substring old-data old-token-index (plist-get edit
> :start)) substrings))
> > + (push (plist-get edit :data) substrings)
> > + (setq old-token-index (+ (plist-get edit :start) (plist-get edit
> :deleteCount)))
> > + finally do (push (substring old-data old-token-index
> old-token-count) substrings))
> > + (apply #'vconcat (nreverse substrings))))
> > +
> > +(defun eglot--semtok-ingest-full/delta-response (response)
> > + "Handle RESPONSE to semanticTokens/full/delta request."
> > + (if-let* ((edits (plist-get response :edits)))
> > + (progn
> > + (cl-assert (not (plist-get eglot--semtok-cache :region)))
> > + (when-let* ((old-data (plist-get (plist-get eglot--semtok-cach=
e
> :response) :data)))
> > + (eglot--semtok-put-cache
> > + :response
> > + (plist-put response :data (eglot--semtok-apply-delta-edits
> old-data edits)))))
> > + ;; server decided to send full response instead
> > + (eglot--semtok-ingest-full-response response)))
> > +
> > +(defun eglot--semtok-request (region &optional fontify)
> > + "Send semantic tokens request to the language server.
> > +A full/delta request will be sent if delta requests are supported by t=
he
> > +language server and a full set of tokens had previously been received.
> > +Otherwise, a ranged request will be dispatched if REGION is non-nil an=
d
> > +ranged requests are supported by the language server. In all other
> > +cases, a full tokens request will be dispatched.
> > +
> > +If FONTIFY is non-nil, refontify after the request completes."
> > + (let* ((method :textDocument/semanticTokens/full)
> > + (params (list :textDocument (eglot--TextDocumentIdentifier)))
> > + (response-handler #'eglot--semtok-ingest-full-response)
> > + (final-region nil)
> > + (buf (current-buffer)))
> > + (cond
> > + ((and (eglot-server-capable :semanticTokensProvider :full :delta)
> > + (let ((response (plist-get eglot--semtok-cache :response)))
> > + (and (plist-get response :resultId) (plist-get response
> :data)
> > + (not (plist-get eglot--semtok-cache :region)))))
> > + (setq method :textDocument/semanticTokens/full/delta)
> > + (setq response-handler #'eglot--semtok-ingest-full/delta-respons=
e)
> > + (setq params
> > + (plist-put params :previousResultId
> > + (plist-get (plist-get eglot--semtok-cache
> :response) :resultId))))
> > + ((and region (eglot-server-capable :semanticTokensProvider :range=
))
> > + (setq method :textDocument/semanticTokens/range)
> > + (setq final-region region)
> > + (setq params
> > + (plist-put params :range (eglot-region-range
> > + (car final-region) (cdr
> final-region))))
> > + (setq response-handler #'eglot--semtok-ingest-range-response)))
> > + (eglot--async-request
> > + (eglot--current-server-or-lose) method params
> > + :success-fn
> > + (lambda (response)
> > + (eglot--when-live-buffer buf
> > + (eglot--semtok-put-cache :documentVersion
> eglot--versioned-identifier)
> > + (eglot--semtok-put-cache :region final-region)
> > + (funcall response-handler response)
> > + (when fontify (jit-lock-refontify (car-safe region) (cdr-safe
> region)))
> > + (when final-region (eglot--semtok-request-full-on-idle))))
> > + :hint #'eglot--semtok-request)))
> > +
> > +(defun eglot--semtok-fontify (beg end)
> > + "Apply the cached semantic tokens from BEG to END."
> > + (with-slots ((modifier-cache semtok-modifier-cache)
> > + (faces semtok-faces)
> > + (modifier-faces semtok-modifier-faces))
> > + (eglot-current-server)
> > + (cond
> > + ((not (and faces
> > + eglot--semtok-cache
> > + (plist-get eglot--semtok-cache :response)
> > + (eq eglot--versioned-identifier (plist-get
> eglot--semtok-cache :documentVersion))))
> > + (eglot--semtok-request (cons beg end) t))
> > + (t
> > + ;; if we're using the response to a ranged request, we'll only b=
e
> able to fontify within
> > + ;; that range (and hence shouldn't clear any highlights outside
> of that range)
> > + (when-let* ((token-region (plist-get eglot--semtok-cache
> :region)))
> > + (progn
> > + (when (or (< beg (car token-region))
> > + (> end (cdr token-region)))
> > + ;; truncated! continue, but request again
> > + (eglot--semtok-request (cons beg end) t))
> > + (setq beg (max beg (car token-region)))
> > + (setq end (min end (cdr token-region)))))
> > + (eglot--widening
> > + (with-silent-modifications
> > + (remove-list-of-text-properties beg end '(font-lock-face))
> > + (let* ((inhibit-field-text-motion t)
> > + (data (plist-get (plist-get eglot--semtok-cache
> :response) :data))
> > + (i-max (length data))
> > + (beg-bol (and (goto-char beg)
> (line-beginning-position)))
> > + (property-beg)
> > + (property-end))
> > + (goto-char (point-min))
> > + (cl-do ((i 0 (+ i 5)) (column 0)) ((>=3D i i-max))
> > + (when (> (aref data i) 0)
> > + (setq column 0)
> > + (forward-line (aref data i)))
> > + (unless (< (point) beg-bol)
> > + (setq column (+ column (aref data (+ i 1))))
> > + (funcall eglot-move-to-linepos-function column)
> > + (when (> (point) end) (cl-return))
> > + (setq property-beg (point))
> > + (funcall eglot-move-to-linepos-function (+ column (are=
f
> data (+ i 2))))
> > + (setq property-end (point))
> > + (when-let* ((face (aref faces (aref data (+ i 3)))))
> > + (put-text-property property-beg property-end
> 'font-lock-face face))
> > + (let* ((code (aref data (+ i 4)))
> > + (faces (gethash code modifier-cache 'not-found)=
))
> > + (when (eq faces 'not-found)
> > + (setq faces nil)
> > + (cl-loop for j from 0 below (length modifier-faces=
)
> > + if (> (logand code (ash 1 j)) 0)
> > + if (aref modifier-faces j)
> > + collect (aref modifier-faces j) into face=
s)
> > + (puthash code faces modifier-cache))
> > + (dolist (face faces)
> > + (put-text-property property-beg property-end
> 'font-lock-face face))))))))
> > + `(jit-lock-bounds ,beg . ,end)))))
> > +
> > +(defun eglot--semtok-request-full-on-idle ()
> > + "Make a full semantic tokens request after an idle timer."
> > + (let* ((buf (current-buffer))
> > + (fun (lambda ()
> > + (eglot--when-live-buffer buf
> > + (eglot--semtok-request nil)))))
> > + (when eglot--semtok-idle-timer (cancel-timer
> eglot--semtok-idle-timer))
> > + (setq eglot--semtok-idle-timer (run-with-idle-timer (* 3
> eglot-send-changes-idle-time) nil fun))))
> > +
> > +(defun eglot--semtok-on-refresh (server)
> > + "Clear semantic tokens within all buffers of SERVER."
> > + (cl-loop for buffer in (eglot--managed-buffers server) do
> > + (with-current-buffer buffer
> > + (setq eglot--semtok-cache nil)
> > + (jit-lock-refontify))))
> > +
> > +(let ((debounce-timer nil))
> > + (cl-defmethod eglot-handle-request
> > + (server (_method (eql workspace/semanticTokens/refresh)))
> > + "Handle a semanticTokens/refresh request from SERVER."
> > + (when debounce-timer (cancel-timer debounce-timer))
> > + (setq debounce-timer (run-with-timer 5 nil
> #'eglot--semtok-on-refresh server))
> > + nil))
> > +
> > +;; Initialization
> > +(defun eglot--semtok-build-face-map (identifiers faces category varnam=
e)
> > + "Build map of FACES for IDENTIFIERS using CATEGORY and VARNAME."
> > + (vconcat
> > + (mapcar (lambda (id)
> > + (let ((maybe-face (cdr (assoc id faces))))
> > + (when (not maybe-face)
> > + (display-warning
> > + 'eglot-semtok
> > + (format-message "No face has been associated to the
> %s `%s': consider adding a corresponding definition to %s"
> > + category id varname)))
> > + maybe-face))
> > + identifiers)))
> > +
> > +(defun eglot--semtok-initialize (server)
> > + "Initialize SERVER for semantic tokens."
> > + (cl-destructuring-bind (&key tokenTypes tokenModifiers
> &allow-other-keys)
> > + (plist-get (plist-get (eglot--capabilities server)
> > + :semanticTokensProvider)
> > + :legend)
> > + (oset server semtok-faces
> > + (eglot--semtok-build-face-map
> > + tokenTypes eglot-semantic-tokens-faces
> > + "semantic token" "eglot--semtokfaces"))
> > + (oset server semtok-modifier-faces
> > + (eglot--semtok-build-face-map
> > + tokenModifiers eglot-semantic-tokens-modifier-faces
> > + "semantic token modifier" "eglot--semtokmodifier-faces"))))
> > +
> > +(define-minor-mode eglot-semantic-tokens-mode
> > + "Minor mode for fontifying buffer with LSP server's semantic tokens.=
"
> > + :global nil
> > + (cond (eglot-semantic-tokens-mode
> > + (if (eglot-server-capable :semanticTokensProvider)
> > + (jit-lock-register #'eglot--semtok-fontify 'contextual)
> > + (eglot-semantic-tokens-mode -1)))
> > + (t
> > + (jit-lock-unregister #'eglot--semtok-fontify)
> > + (with-silent-modifications
> > + (remove-list-of-text-properties (point-min) (point-max)
> '(font-lock-face))))))
> > +
> >
> > ;;; Call and type hierarchies
> > (require 'button)
> > @@ -4728,7 +5036,8 @@ If NOERROR, return predicate, else erroring
> function."
> > ;; harder. For now, use `with-eval-after-load'. See also github#1183.
> > (with-eval-after-load 'desktop
> > (add-to-list 'desktop-minor-mode-handlers '(eglot--managed-mode .
> ignore))
> > - (add-to-list 'desktop-minor-mode-handlers '(eglot-inlay-hints-mode .
> ignore)))
> > + (add-to-list 'desktop-minor-mode-handlers '(eglot-inlay-hints-mode .
> ignore))
> > + (add-to-list 'desktop-minor-mode-handlers
> '(eglot-semantic-tokens-mode . ignore)))
> >
> >
> > ;;; Misc
> > @@ -4757,6 +5066,7 @@ If NOERROR, return predicate, else erroring
> function."
> > eglot-format
> > eglot-format-buffer
> > eglot-inlay-hints-mode
> > + eglot-semantic-tokens-mode
> > eglot-reconnect
> > eglot-rename
> > eglot-signal-didChangeConfiguration
> > --
> > 2.51.0
> >
>
--=20
Jo=C3=A3o T=C3=A1vora
--000000000000657d5a063eab28d8
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div class=3D"gmail_quote gmail_quote_container"><div dir=
=3D"ltr" class=3D"gmail_attr">On Sat, Sep 13, 2025 at 8:57=E2=80=AFAM Eli Z=
aretskii <<a href=3D"mailto:eliz@HIDDEN">eliz@HIDDEN</a>> wrote:<br=
></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex">Jo=C3=A3o, any comments on the patch?=
=C2=A0 Should I install it?<br></blockquote><div><br></div><div>No, don'=
;t . This is a significant feature which is missing testing,=C2=A0</div><di=
v>documentations and a much more thorough review.=C2=A0 I don't</div><d=
iv>have time for that right now.</div><div><br></div><div>I can say that, f=
rom a very cursory review, it is the best version=C2=A0</div><div>of this=
=C2=A0 feature ever proposed to Eglot.</div><div><br></div><div>Jo=C3=A3o</=
div><div><br></div><div><br></div><blockquote class=3D"gmail_quote" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
> Cc: <a href=3D"mailto:79374 <at> debbugs.gnu.org" target=3D"_blank">79374@d=
ebbugs.gnu.org</a>,<br>
>=C2=A0 Jo=C3=A3o T=C3=A1vora <<a href=3D"mailto:joaotavora@HIDDEN=
" target=3D"_blank">joaotavora@HIDDEN</a>><br>
> From: "Lua V. R." <<a href=3D"mailto:me@HIDDEN" targ=
et=3D"_blank">me@HIDDEN</a>><br>
> Date: Thu,=C2=A0 4 Sep 2025 00:02:51 +0000 (UTC)<br>
> <br>
> Hi Philip,<br>
> <br>
> Em 03/09/2025 05:01, Philip Kaludercic escreveu:<br>
> > As mentioned on Emacs-devel, shouldn't this be `eglot-semanti=
c-tokens-mode'.<br>
> Thanks for catching this :) I fixed it among other things, and I <br>
> apologize for being unfamiliar with the e-mail git workflow. I don'=
;t <br>
> know if I should send a patch on top of the previous patch, but I'=
m <br>
> sending a squashed one.<br>
> <br>
> In this new patch I also removed a "hash" I used in attempt =
to avoid a <br>
> burst of requests, because it was not working in some particular <br>
> situations (I can explain if you want). Now, due to how jit-lock works=
, <br>
> Eglot may send two requests after a didChange if the server does not <=
br>
> support delta requests. But this was also the case in the version with=
<br>
> the hash, so alas, it was just complicating things.<br>
> <br>
> From 32471c4a0fc9ca80ae8d3c299a3bd55581f8cb04 Mon Sep 17 00:00:00 2001=
<br>
> From: Lua Viana Reis <<a href=3D"mailto:me@HIDDEN" target=3D"_=
blank">me@HIDDEN</a>><br>
> Date: Tue, 2 Sep 2025 19:03:52 -0300<br>
> Subject: [PATCH] add semantic tokens support for eglot<br>
> <br>
> ---<br>
>=C2=A0 lisp/progmodes/eglot.el | 316 ++++++++++++++++++++++++++++++++++=
+++++-<br>
>=C2=A0 1 file changed, 313 insertions(+), 3 deletions(-)<br>
> <br>
> diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el<br>
> index 475b5e13f1..1d9fb7905d 100644<br>
> --- a/lisp/progmodes/eglot.el<br>
> +++ b/lisp/progmodes/eglot.el<br>
> @@ -141,6 +141,8 @@<br>
>=C2=A0 (defvar company-tooltip-align-annotations)<br>
>=C2=A0 (defvar tramp-ssh-controlmaster-options)<br>
>=C2=A0 (defvar tramp-use-ssh-controlmaster-options)<br>
> +(defvar eglot-semantic-tokens-faces)<br>
> +(defvar eglot-semantic-tokens-modifier-faces)<br>
>=C2=A0 <br>
>=C2=A0 <br>
>=C2=A0 ;;; Obsolete aliases<br>
> @@ -1017,6 +1019,7 @@ object."<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 `(:dynamicRegistration<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ,(if (eglot--trampish-p s) :json-false t))<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 :symbol `(:dynamicRegistration :json-false)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 :semanticTokens '(:refreshSupport t)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 :configuration t<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 :workspaceFolders t)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 :textDocument<br>
> @@ -1079,6 +1082,13 @@ object."<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:formatting=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0`(:dynamicRegistration :json-false)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:rangeFormatting=
=C2=A0 =C2=A0 `(:dynamicRegistration :json-false)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:rename=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0`(:dynamicRegistration :json-false=
)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:semanticTokens=C2=A0=
=C2=A0 =C2=A0`(:dynamicRegistration :json-false<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:requests '(:ra=
nge t :full (:delta t))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:tokenModifiers [,@=
(mapcar #'car eglot-semantic-tokens-modifier-faces)]<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:overlappingTokenSu=
pport t<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:multilineTokenSupp=
ort t<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:tokenTypes [,@(map=
car #'car eglot-semantic-tokens-faces)]<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:formats ["rel=
ative"])<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:inlayHint=C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 `(:dynamicRegistration :json-false)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:callHierarchy=
=C2=A0 =C2=A0 =C2=A0 `(:dynamicRegistration :json-false)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:typeHierarchy=
=C2=A0 =C2=A0 =C2=A0 `(:dynamicRegistration :json-false)<br>
> @@ -1149,7 +1159,16 @@ object."<br>
>=C2=A0 =C2=A0 =C2=A0 :accessor eglot--managed-buffers)<br>
>=C2=A0 =C2=A0 =C2=A0(saved-initargs<br>
>=C2=A0 =C2=A0 =C2=A0 :documentation "Saved initargs for reconnecti=
on purposes."<br>
> -=C2=A0 =C2=A0 :accessor eglot--saved-initargs))<br>
> +=C2=A0 =C2=A0 :accessor eglot--saved-initargs)<br>
> +=C2=A0 =C2=A0(semtok-faces<br>
> +=C2=A0 =C2=A0 :initform nil<br>
> +=C2=A0 =C2=A0 :documentation "Semantic tokens faces.")<br>
> +=C2=A0 =C2=A0(semtok-modifier-faces<br>
> +=C2=A0 =C2=A0 :initform nil<br>
> +=C2=A0 =C2=A0 :documentation "Semantic tokens modifier faces.&qu=
ot;)<br>
> +=C2=A0 =C2=A0(semtok-modifier-cache<br>
> +=C2=A0 =C2=A0 :initform (make-hash-table)<br>
> +=C2=A0 =C2=A0 :documentation "A hashmap of modifier values to th=
e selected faces."))<br>
>=C2=A0 =C2=A0 :documentation<br>
>=C2=A0 =C2=A0 "Represents a server. Wraps a process for LSP commun=
ication.")<br>
>=C2=A0 <br>
> @@ -1211,6 +1230,11 @@ If optional MARKERS, make markers instead."=
;<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(end (eglot--lsp-position-to-p=
oint (plist-get range :end) markers)))<br>
>=C2=A0 =C2=A0 =C2=A0 (cons beg end)))<br>
>=C2=A0 <br>
> +(defun eglot-region-range (beg end)<br>
> +=C2=A0 "Return a LSP range representing region BEG to END."=
<br>
> +=C2=A0 (list :start (eglot--pos-to-lsp-position beg)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 :end (eglot--pos-to-lsp-position end)))<b=
r>
> +<br>
>=C2=A0 (defun eglot-server-capable (&rest feats)<br>
>=C2=A0 =C2=A0 "Determine if current server is capable of FEATS.&qu=
ot;<br>
>=C2=A0 =C2=A0 (unless (cl-some (lambda (feat)<br>
> @@ -1576,7 +1600,8 @@ Use current server's or first available Eglo=
t events buffer."<br>
>=C2=A0 =C2=A0 (jsonrpc-forget-pending-continuations server))<br>
>=C2=A0 <br>
>=C2=A0 (defvar eglot-connect-hook<br>
> -=C2=A0 '(eglot-signal-didChangeConfiguration)<br>
> +=C2=A0 '(eglot-signal-didChangeConfiguration<br>
> +=C2=A0 =C2=A0 eglot--semtok-initialize)<br>
>=C2=A0 =C2=A0 "Hook run after connecting to a server.<br>
>=C2=A0 Each function is passed an `eglot-lsp-server' instance<br>
>=C2=A0 as argument.")<br>
> @@ -2291,6 +2316,7 @@ If it is activated, also signal textDocument/did=
Open."<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; Run user hook after 'textDocument/di=
dOpen' so server knows<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; about the buffer.<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (eglot-inlay-hints-mode 1)<br>
> +=C2=A0 =C2=A0 =C2=A0 (eglot-semantic-tokens-mode 1)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (run-hooks 'eglot-managed-mode-hook))))=
<br>
>=C2=A0 <br>
>=C2=A0 (add-hook 'after-change-major-mode-hook #'eglot--maybe-a=
ctivate-editing-mode)<br>
> @@ -4494,6 +4520,288 @@ If NOERROR, return predicate, else erroring fu=
nction."<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(jit-lock-unregister #'egl=
ot--update-hints)<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(remove-overlays nil nil '=
eglot--inlay-hint t))))<br>
>=C2=A0 <br>
> +=0C<br>
> +;;; Semantic tokens<br>
> +<br>
> +(defcustom eglot-semantic-tokens-faces<br>
> +=C2=A0 '(("namespace" . font-lock-keyword-face)<br>
> +=C2=A0 =C2=A0 ("type" . font-lock-type-face)<br>
> +=C2=A0 =C2=A0 ("class" . font-lock-type-face)<br>
> +=C2=A0 =C2=A0 ("enum" . font-lock-type-face)<br>
> +=C2=A0 =C2=A0 ("interface" . font-lock-type-face)<br>
> +=C2=A0 =C2=A0 ("struct" . font-lock-type-face)<br>
> +=C2=A0 =C2=A0 ("typeParameter" . font-lock-type-face)<br>
> +=C2=A0 =C2=A0 ("parameter" . font-lock-variable-name-face)<=
br>
> +=C2=A0 =C2=A0 ("variable" . font-lock-variable-name-face)<b=
r>
> +=C2=A0 =C2=A0 ("property" . font-lock-property-use-face)<br=
>
> +=C2=A0 =C2=A0 ("enumMember" . font-lock-constant-face)<br>
> +=C2=A0 =C2=A0 ("event" . font-lock-variable-name-face)<br>
> +=C2=A0 =C2=A0 ("function" . font-lock-function-name-face)<b=
r>
> +=C2=A0 =C2=A0 ("method" . font-lock-function-name-face)<br>
> +=C2=A0 =C2=A0 ("macro" . font-lock-preprocessor-face)<br>
> +=C2=A0 =C2=A0 ("keyword" . font-lock-keyword-face)<br>
> +=C2=A0 =C2=A0 ("modifier" . font-lock-function-name-face)<b=
r>
> +=C2=A0 =C2=A0 ("comment" . font-lock-comment-face)<br>
> +=C2=A0 =C2=A0 ("string" . font-lock-string-face)<br>
> +=C2=A0 =C2=A0 ("number" . font-lock-constant-face)<br>
> +=C2=A0 =C2=A0 ("regexp" . font-lock-string-face)<br>
> +=C2=A0 =C2=A0 ("operator" . font-lock-function-name-face)<b=
r>
> +=C2=A0 =C2=A0 ("decorator" . font-lock-type-face))<br>
> +=C2=A0 "Alist of faces to use to highlight semantic tokens.<br>
> +Each element is a cons cell whose car is a token type name and cdr is=
<br>
> +the face to use."<br>
> +=C2=A0 :type `(alist :key-type (string :tag "Token name")<b=
r>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 :value-type (=
choice (face :tag "Face")<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (plist :tag "=
Face Attributes"<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0:key-type<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0(choice<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 ,@(mapcar<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0(lambda (cell)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0`(const :tag ,(capitalize<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 (cdr cell))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0,(car cell)))<br=
>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0face-attribute-name-alist))))))<br>
> +<br>
> +(defcustom eglot-semantic-tokens-modifier-faces<br>
> +=C2=A0 '(("declaration" . font-lock-function-name-face)=
<br>
> +=C2=A0 =C2=A0 ("definition" . font-lock-function-name-face)=
<br>
> +=C2=A0 =C2=A0 ("readonly" . font-lock-constant-face)<br>
> +=C2=A0 =C2=A0 ("static" . font-lock-keyword-face)<br>
> +=C2=A0 =C2=A0 ("deprecated" . eglot-diagnostic-tag-deprecat=
ed-face)<br>
> +=C2=A0 =C2=A0 ("abstract" . font-lock-keyword-face)<br>
> +=C2=A0 =C2=A0 ("async" . font-lock-preprocessor-face)<br>
> +=C2=A0 =C2=A0 ("modification" . font-lock-function-name-fac=
e)<br>
> +=C2=A0 =C2=A0 ("documentation" . font-lock-doc-face)<br>
> +=C2=A0 =C2=A0 ("defaultLibrary" . font-lock-builtin-face))<=
br>
> +=C2=A0 "List of face to use to highlight tokens with modifiers.<=
br>
> +Each element is a cons cell whose car is a modifier name and cdr is<b=
r>
> +the face to use."<br>
> +=C2=A0 :type `(alist :key-type (string :tag "Token name")<b=
r>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 :value-type (=
choice (face :tag "Face")<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (plist :tag "=
Face Attributes"<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0:key-type<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0(choice<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 ,@(mapcar<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0(lambda (cell)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0`(const :tag ,(capitalize<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 (cdr cell))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0,(car cell)))<br=
>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0face-attribute-name-alist))))))<br>
> +<br>
> +(defvar-local eglot--semtok-idle-timer nil<br>
> +=C2=A0 "Idle timer to request full semantic tokens.")<br>
> +<br>
> +(defvar-local eglot--semtok-cache nil)<br>
> +<br>
> +(defsubst eglot--semtok-put-cache (k v)<br>
> +=C2=A0 "Set key K of `eglot-semantic-tokens--cache' to V.&qu=
ot;<br>
> +=C2=A0 (setq eglot--semtok-cache<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (plist-put eglot--semtok-cache k v)))<br>
> +<br>
> +;; Process response<br>
> +<br>
> +(defun eglot--semtok-ingest-range-response (response)<br>
> +=C2=A0 "Handle RESPONSE to semanticTokens/range request."<b=
r>
> +=C2=A0 (eglot--semtok-put-cache :response response)<br>
> +=C2=A0 (cl-assert (plist-get eglot--semtok-cache :region)))<br>
> +<br>
> +(defun eglot--semtok-ingest-full-response (response)<br>
> +=C2=A0 "Handle RESPONSE to semanticTokens/full request."<br=
>
> +=C2=A0 (eglot--semtok-put-cache :response response)<br>
> +=C2=A0 (cl-assert (not (plist-get eglot--semtok-cache :region))))<br>
> +<br>
> +(defsubst eglot--semtok-apply-delta-edits (old-data edits)<br>
> +=C2=A0 "Apply EDITS obtained from full/delta request to OLD-DATA=
."<br>
> +=C2=A0 (let* ((old-token-count (length old-data))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(old-token-index 0)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(substrings))<br>
> +=C2=A0 =C2=A0 (cl-loop for edit across edits do<br>
> +=C2=A0 =C2=A0 =C2=A0(when (< old-token-index (plist-get edit :star=
t))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0(push (substring old-data old-token-index =
(plist-get edit :start)) substrings))<br>
> +=C2=A0 =C2=A0 =C2=A0(push (plist-get edit :data) substrings)<br>
> +=C2=A0 =C2=A0 =C2=A0(setq old-token-index (+ (plist-get edit :start) =
(plist-get edit :deleteCount)))<br>
> +=C2=A0 =C2=A0 =C2=A0finally do (push (substring old-data old-token-in=
dex old-token-count) substrings))<br>
> +=C2=A0 =C2=A0 (apply #'vconcat (nreverse substrings))))<br>
> +<br>
> +(defun eglot--semtok-ingest-full/delta-response (response)<br>
> +=C2=A0 "Handle RESPONSE to semanticTokens/full/delta request.&qu=
ot;<br>
> +=C2=A0 (if-let* ((edits (plist-get response :edits)))<br>
> +=C2=A0 =C2=A0 =C2=A0 (progn<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (cl-assert (not (plist-get eglot--semtok-=
cache :region)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (when-let* ((old-data (plist-get (plist-g=
et eglot--semtok-cache :response) :data)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (eglot--semtok-put-cache<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:response<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(plist-put response :data (e=
glot--semtok-apply-delta-edits old-data edits)))))<br>
> +=C2=A0 =C2=A0 ;; server decided to send full response instead<br>
> +=C2=A0 =C2=A0 (eglot--semtok-ingest-full-response response)))<br>
> +<br>
> +(defun eglot--semtok-request (region &optional fontify)<br>
> +=C2=A0 "Send semantic tokens request to the language server.<br>
> +A full/delta request will be sent if delta requests are supported by =
the<br>
> +language server and a full set of tokens had previously been received=
.<br>
> +Otherwise, a ranged request will be dispatched if REGION is non-nil a=
nd<br>
> +ranged requests are supported by the language server. In all other<br=
>
> +cases, a full tokens request will be dispatched.<br>
> +<br>
> +If FONTIFY is non-nil, refontify after the request completes."<b=
r>
> +=C2=A0 (let* ((method :textDocument/semanticTokens/full)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(params (list :textDocument (eglot-=
-TextDocumentIdentifier)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(response-handler #'eglot--semt=
ok-ingest-full-response)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(final-region nil)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(buf (current-buffer)))<br>
> +=C2=A0 =C2=A0 (cond<br>
> +=C2=A0 =C2=A0 =C2=A0((and (eglot-server-capable :semanticTokensProvid=
er :full :delta)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let ((response (plist-get e=
glot--semtok-cache :response)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(and (plist-get respo=
nse :resultId) (plist-get response :data)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (not (=
plist-get eglot--semtok-cache :region)))))<br>
> +=C2=A0 =C2=A0 =C2=A0 (setq method :textDocument/semanticTokens/full/d=
elta)<br>
> +=C2=A0 =C2=A0 =C2=A0 (setq response-handler #'eglot--semtok-inges=
t-full/delta-response)<br>
> +=C2=A0 =C2=A0 =C2=A0 (setq params<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (plist-put params :previous=
ResultId<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0(plist-get (plist-get eglot--semtok-cache :response) :resultI=
d))))<br>
> +=C2=A0 =C2=A0 =C2=A0((and region (eglot-server-capable :semanticToken=
sProvider :range))<br>
> +=C2=A0 =C2=A0 =C2=A0 (setq method :textDocument/semanticTokens/range)=
<br>
> +=C2=A0 =C2=A0 =C2=A0 (setq final-region region)<br>
> +=C2=A0 =C2=A0 =C2=A0 (setq params<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (plist-put params :range (e=
glot-region-range<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (car final-=
region) (cdr final-region))))<br>
> +=C2=A0 =C2=A0 =C2=A0 (setq response-handler #'eglot--semtok-inges=
t-range-response)))<br>
> +=C2=A0 =C2=A0 (eglot--async-request<br>
> +=C2=A0 =C2=A0 =C2=A0(eglot--current-server-or-lose) method params<br>
> +=C2=A0 =C2=A0 =C2=A0:success-fn<br>
> +=C2=A0 =C2=A0 =C2=A0(lambda (response)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0(eglot--when-live-buffer buf<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(eglot--semtok-put-cache :documentV=
ersion eglot--versioned-identifier)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(eglot--semtok-put-cache :region fi=
nal-region)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(funcall response-handler response)=
<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(when fontify (jit-lock-refontify (=
car-safe region) (cdr-safe region)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(when final-region (eglot--semtok-r=
equest-full-on-idle))))<br>
> +=C2=A0 =C2=A0 =C2=A0:hint #'eglot--semtok-request)))<br>
> +<br>
> +(defun eglot--semtok-fontify (beg end)<br>
> +=C2=A0 "Apply the cached semantic tokens from BEG to END."<=
br>
> +=C2=A0 (with-slots ((modifier-cache semtok-modifier-cache)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(faces semtok-=
faces)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(modifier-face=
s semtok-modifier-faces))<br>
> +=C2=A0 =C2=A0 =C2=A0 (eglot-current-server)<br>
> +=C2=A0 =C2=A0 (cond<br>
> +=C2=A0 =C2=A0 =C2=A0((not (and faces<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 eglot--semtok=
-cache<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (plist-get eg=
lot--semtok-cache :response)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (eq eglot--ve=
rsioned-identifier (plist-get eglot--semtok-cache :documentVersion))))<br>
> +=C2=A0 =C2=A0 =C2=A0 (eglot--semtok-request (cons beg end) t))<br>
> +=C2=A0 =C2=A0 =C2=A0(t<br>
> +=C2=A0 =C2=A0 =C2=A0 ;; if we're using the response to a ranged r=
equest, we'll only be able to fontify within<br>
> +=C2=A0 =C2=A0 =C2=A0 ;; that range (and hence shouldn't clear any=
highlights outside of that range)<br>
> +=C2=A0 =C2=A0 =C2=A0 (when-let* ((token-region (plist-get eglot--semt=
ok-cache :region)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (progn<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (when (or (< beg (car token-reg=
ion))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(> end (cdr token-region)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ;; truncated! continue, but=
request again<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (eglot--semtok-request (con=
s beg end) t))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq beg (max beg (car token-regi=
on)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq end (min end (cdr token-regi=
on)))))<br>
> +=C2=A0 =C2=A0 =C2=A0 (eglot--widening<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (with-silent-modifications<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (remove-list-of-text-properties be=
g end '(font-lock-face))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let* ((inhibit-field-text-motion =
t)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(data (=
plist-get (plist-get eglot--semtok-cache :response) :data))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(i-max =
(length data))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(beg-bo=
l (and (goto-char beg) (line-beginning-position)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(proper=
ty-beg)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(proper=
ty-end))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (goto-char (point-min))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (cl-do ((i 0 (+ i 5)) (colu=
mn 0)) ((>=3D i i-max))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (when (> (aref da=
ta i) 0)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq column =
0)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (forward-line=
(aref data i)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (unless (< (point=
) beg-bol)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq column =
(+ column (aref data (+ i 1))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (funcall eglo=
t-move-to-linepos-function column)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (when (> (=
point) end) (cl-return))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq propert=
y-beg (point))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (funcall eglo=
t-move-to-linepos-function (+ column (aref data (+ i 2))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (setq propert=
y-end (point))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (when-let* ((=
face (aref faces (aref data (+ i 3)))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (put-t=
ext-property property-beg property-end 'font-lock-face face))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let* ((code =
(aref data (+ i 4)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0(faces (gethash code modifier-cache 'not-found)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (when =
(eq faces 'not-found)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(setq faces nil)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(cl-loop for j from 0 below (length modifier-faces)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (> (logand code (ash 1 j)) 0)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (aref modifier-faces j)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0collect (aref modifier-faces j) into fac=
es)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(puthash code faces modifier-cache))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (dolis=
t (face faces)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
(put-text-property property-beg property-end 'font-lock-face face)))))=
)))<br>
> +=C2=A0 =C2=A0 =C2=A0 `(jit-lock-bounds ,beg . ,end)))))<br>
> +<br>
> +(defun eglot--semtok-request-full-on-idle ()<br>
> +=C2=A0 "Make a full semantic tokens request after an idle timer.=
"<br>
> +=C2=A0 (let* ((buf (current-buffer))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(fun (lambda ()<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (eglot--when-=
live-buffer buf<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (eglot=
--semtok-request nil)))))<br>
> +=C2=A0 =C2=A0 (when eglot--semtok-idle-timer (cancel-timer eglot--sem=
tok-idle-timer))<br>
> +=C2=A0 =C2=A0 (setq eglot--semtok-idle-timer (run-with-idle-timer (* =
3 eglot-send-changes-idle-time) nil fun))))<br>
> +<br>
> +(defun eglot--semtok-on-refresh (server)<br>
> +=C2=A0 "Clear semantic tokens within all buffers of SERVER."=
;<br>
> +=C2=A0 (cl-loop for buffer in (eglot--managed-buffers server) do<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(with-current-buffer buffer<=
br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(setq eglot--semtok-c=
ache nil)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(jit-lock-refontify))=
))<br>
> +<br>
> +(let ((debounce-timer nil))<br>
> +=C2=A0 (cl-defmethod eglot-handle-request<br>
> +=C2=A0 =C2=A0 (server (_method (eql workspace/semanticTokens/refresh)=
))<br>
> +=C2=A0 =C2=A0 "Handle a semanticTokens/refresh request from SERV=
ER."<br>
> +=C2=A0 =C2=A0 (when debounce-timer (cancel-timer debounce-timer))<br>
> +=C2=A0 =C2=A0 (setq debounce-timer (run-with-timer 5 nil #'eglot-=
-semtok-on-refresh server))<br>
> +=C2=A0 =C2=A0 nil))<br>
> +<br>
> +;; Initialization<br>
> +(defun eglot--semtok-build-face-map (identifiers faces category varna=
me)<br>
> +=C2=A0 "Build map of FACES for IDENTIFIERS using CATEGORY and VA=
RNAME."<br>
> +=C2=A0 (vconcat<br>
> +=C2=A0 =C2=A0(mapcar (lambda (id)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let ((maybe-face (cd=
r (assoc id faces))))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(when (not may=
be-face)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(displa=
y-warning<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 'e=
glot-semtok<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (forma=
t-message "No face has been associated to the %s `%s': consider ad=
ding a corresponding definition to %s"<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 category id varname)))<br=
>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0maybe-face))<b=
r>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0identifiers)))<br>
> +<br>
> +(defun eglot--semtok-initialize (server)<br>
> +=C2=A0 "Initialize SERVER for semantic tokens."<br>
> +=C2=A0 (cl-destructuring-bind (&key tokenTypes tokenModifiers &am=
p;allow-other-keys)<br>
> +=C2=A0 =C2=A0 =C2=A0 (plist-get (plist-get (eglot--capabilities serve=
r)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 :semanticTokensProvider)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0:legend=
)<br>
> +=C2=A0 =C2=A0 (oset server semtok-faces<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (eglot--semtok-build-face-map<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0tokenTypes eglot-semantic-to=
kens-faces<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"semantic token" &=
quot;eglot--semtokfaces"))<br>
> +=C2=A0 =C2=A0 (oset server semtok-modifier-faces<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (eglot--semtok-build-face-map<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0tokenModifiers eglot-semanti=
c-tokens-modifier-faces<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"semantic token modifie=
r" "eglot--semtokmodifier-faces"))))<br>
> +<br>
> +(define-minor-mode eglot-semantic-tokens-mode<br>
> +=C2=A0 "Minor mode for fontifying buffer with LSP server's s=
emantic tokens."<br>
> +=C2=A0 :global nil<br>
> +=C2=A0 (cond (eglot-semantic-tokens-mode<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(if (eglot-server-capable :semantic=
TokensProvider)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(jit-lock-register #&=
#39;eglot--semtok-fontify 'contextual)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(eglot-semantic-tokens-mode =
-1)))<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (t<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(jit-lock-unregister #'eglot--s=
emtok-fontify)<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(with-silent-modifications<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(remove-list-of-text-propert=
ies (point-min) (point-max) '(font-lock-face))))))<br>
> +<br>
>=C2=A0 <br>
>=C2=A0 ;;; Call and type hierarchies<br>
>=C2=A0 (require 'button)<br>
> @@ -4728,7 +5036,8 @@ If NOERROR, return predicate, else erroring func=
tion."<br>
>=C2=A0 ;; harder. For now, use `with-eval-after-load'. See also git=
hub#1183.<br>
>=C2=A0 (with-eval-after-load 'desktop<br>
>=C2=A0 =C2=A0 (add-to-list 'desktop-minor-mode-handlers '(eglot=
--managed-mode . ignore))<br>
> -=C2=A0 (add-to-list 'desktop-minor-mode-handlers '(eglot-inla=
y-hints-mode . ignore)))<br>
> +=C2=A0 (add-to-list 'desktop-minor-mode-handlers '(eglot-inla=
y-hints-mode . ignore))<br>
> +=C2=A0 (add-to-list 'desktop-minor-mode-handlers '(eglot-sema=
ntic-tokens-mode . ignore)))<br>
>=C2=A0 <br>
>=C2=A0 <br>
>=C2=A0 ;;; Misc<br>
> @@ -4757,6 +5066,7 @@ If NOERROR, return predicate, else erroring func=
tion."<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0eglot-for=
mat<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0eglot-for=
mat-buffer<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0eglot-inl=
ay-hints-mode<br>
> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0eglot-semantic=
-tokens-mode<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0eglot-rec=
onnect<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0eglot-ren=
ame<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0eglot-sig=
nal-didChangeConfiguration<br>
> -- <br>
> 2.51.0<br>
> <br>
</blockquote></div><div><br clear=3D"all"></div><br><span class=3D"gmail_si=
gnature_prefix">-- </span><br><div dir=3D"ltr" class=3D"gmail_signature" da=
ta-smartmail=3D"gmail_signature">Jo=C3=A3o T=C3=A1vora</div></div>
--000000000000657d5a063eab28d8--
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.
Received: (at 79374) by debbugs.gnu.org; 13 Sep 2025 07:58:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 13 03:58:08 2025
Received: from localhost ([127.0.0.1]:53113 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1uxL95-0001Xa-0x
for submit <at> debbugs.gnu.org; Sat, 13 Sep 2025 03:58:08 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:40456)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uxL8u-0001VI-2V
for 79374 <at> debbugs.gnu.org; Sat, 13 Sep 2025 03:58:05 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <eliz@HIDDEN>)
id 1uxL8e-00039N-1U; Sat, 13 Sep 2025 03:57:48 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From:
Date; bh=QC2Jv026SfGdECT27endxgDSWKd0FbDw8VWZfIMsl5k=; b=V/c3Eh+I9jsL34kqluQ3
TuQSdecoHe7TojJzSF5P1YP08IvNQUjMGErcgbzK/Jc4B87l4n2rJQvEcrBpAQX2LuAyqFkYUzeAm
Q+PkBp1vLCEB6z5Noqcw7hqaSEyzR+rZK4WbpNogKnf9GSjUSgmt3MGIkuG7fP662UsQGjyli4QE1
PWhey2UDhiqWka0lVEe2iuavmQaBohjsowrBNakYJmriddoQ3l4MeJrQYQKbw76QT7aMY6S/v9NFz
UIIQY5TElP0zs46GEosjGFcKq0ewMDrO0JBCKLgjxdJgtFX4Sn/88kNstL0LpbTgd+lzPvR0ByxAm
1+38Te5huTNH+Q==;
Date: Sat, 13 Sep 2025 10:57:35 +0300
Message-Id: <86348qss28.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: me@HIDDEN, joaotavora@HIDDEN
In-Reply-To: <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN>
(me@HIDDEN)
Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens
References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN>
<2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN>
<87ecsoc6cz.fsf@HIDDEN> <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79374
Cc: philipk@HIDDEN, 79374 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)
João, any comments on the patch? Should I install it?
> Cc: 79374 <at> debbugs.gnu.org,
> João Távora <joaotavora@HIDDEN>
> From: "Lua V. R." <me@HIDDEN>
> Date: Thu, 4 Sep 2025 00:02:51 +0000 (UTC)
>
> Hi Philip,
>
> Em 03/09/2025 05:01, Philip Kaludercic escreveu:
> > As mentioned on Emacs-devel, shouldn't this be `eglot-semantic-tokens-mode'.
> Thanks for catching this :) I fixed it among other things, and I
> apologize for being unfamiliar with the e-mail git workflow. I don't
> know if I should send a patch on top of the previous patch, but I'm
> sending a squashed one.
>
> In this new patch I also removed a "hash" I used in attempt to avoid a
> burst of requests, because it was not working in some particular
> situations (I can explain if you want). Now, due to how jit-lock works,
> Eglot may send two requests after a didChange if the server does not
> support delta requests. But this was also the case in the version with
> the hash, so alas, it was just complicating things.
>
> From 32471c4a0fc9ca80ae8d3c299a3bd55581f8cb04 Mon Sep 17 00:00:00 2001
> From: Lua Viana Reis <me@HIDDEN>
> Date: Tue, 2 Sep 2025 19:03:52 -0300
> Subject: [PATCH] add semantic tokens support for eglot
>
> ---
> lisp/progmodes/eglot.el | 316 +++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 313 insertions(+), 3 deletions(-)
>
> diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
> index 475b5e13f1..1d9fb7905d 100644
> --- a/lisp/progmodes/eglot.el
> +++ b/lisp/progmodes/eglot.el
> @@ -141,6 +141,8 @@
> (defvar company-tooltip-align-annotations)
> (defvar tramp-ssh-controlmaster-options)
> (defvar tramp-use-ssh-controlmaster-options)
> +(defvar eglot-semantic-tokens-faces)
> +(defvar eglot-semantic-tokens-modifier-faces)
>
>
> ;;; Obsolete aliases
> @@ -1017,6 +1019,7 @@ object."
> `(:dynamicRegistration
> ,(if (eglot--trampish-p s) :json-false t))
> :symbol `(:dynamicRegistration :json-false)
> + :semanticTokens '(:refreshSupport t)
> :configuration t
> :workspaceFolders t)
> :textDocument
> @@ -1079,6 +1082,13 @@ object."
> :formatting `(:dynamicRegistration :json-false)
> :rangeFormatting `(:dynamicRegistration :json-false)
> :rename `(:dynamicRegistration :json-false)
> + :semanticTokens `(:dynamicRegistration :json-false
> + :requests '(:range t :full (:delta t))
> + :tokenModifiers [,@(mapcar #'car eglot-semantic-tokens-modifier-faces)]
> + :overlappingTokenSupport t
> + :multilineTokenSupport t
> + :tokenTypes [,@(mapcar #'car eglot-semantic-tokens-faces)]
> + :formats ["relative"])
> :inlayHint `(:dynamicRegistration :json-false)
> :callHierarchy `(:dynamicRegistration :json-false)
> :typeHierarchy `(:dynamicRegistration :json-false)
> @@ -1149,7 +1159,16 @@ object."
> :accessor eglot--managed-buffers)
> (saved-initargs
> :documentation "Saved initargs for reconnection purposes."
> - :accessor eglot--saved-initargs))
> + :accessor eglot--saved-initargs)
> + (semtok-faces
> + :initform nil
> + :documentation "Semantic tokens faces.")
> + (semtok-modifier-faces
> + :initform nil
> + :documentation "Semantic tokens modifier faces.")
> + (semtok-modifier-cache
> + :initform (make-hash-table)
> + :documentation "A hashmap of modifier values to the selected faces."))
> :documentation
> "Represents a server. Wraps a process for LSP communication.")
>
> @@ -1211,6 +1230,11 @@ If optional MARKERS, make markers instead."
> (end (eglot--lsp-position-to-point (plist-get range :end) markers)))
> (cons beg end)))
>
> +(defun eglot-region-range (beg end)
> + "Return a LSP range representing region BEG to END."
> + (list :start (eglot--pos-to-lsp-position beg)
> + :end (eglot--pos-to-lsp-position end)))
> +
> (defun eglot-server-capable (&rest feats)
> "Determine if current server is capable of FEATS."
> (unless (cl-some (lambda (feat)
> @@ -1576,7 +1600,8 @@ Use current server's or first available Eglot events buffer."
> (jsonrpc-forget-pending-continuations server))
>
> (defvar eglot-connect-hook
> - '(eglot-signal-didChangeConfiguration)
> + '(eglot-signal-didChangeConfiguration
> + eglot--semtok-initialize)
> "Hook run after connecting to a server.
> Each function is passed an `eglot-lsp-server' instance
> as argument.")
> @@ -2291,6 +2316,7 @@ If it is activated, also signal textDocument/didOpen."
> ;; Run user hook after 'textDocument/didOpen' so server knows
> ;; about the buffer.
> (eglot-inlay-hints-mode 1)
> + (eglot-semantic-tokens-mode 1)
> (run-hooks 'eglot-managed-mode-hook))))
>
> (add-hook 'after-change-major-mode-hook #'eglot--maybe-activate-editing-mode)
> @@ -4494,6 +4520,288 @@ If NOERROR, return predicate, else erroring function."
> (jit-lock-unregister #'eglot--update-hints)
> (remove-overlays nil nil 'eglot--inlay-hint t))))
>
> +
> +;;; Semantic tokens
> +
> +(defcustom eglot-semantic-tokens-faces
> + '(("namespace" . font-lock-keyword-face)
> + ("type" . font-lock-type-face)
> + ("class" . font-lock-type-face)
> + ("enum" . font-lock-type-face)
> + ("interface" . font-lock-type-face)
> + ("struct" . font-lock-type-face)
> + ("typeParameter" . font-lock-type-face)
> + ("parameter" . font-lock-variable-name-face)
> + ("variable" . font-lock-variable-name-face)
> + ("property" . font-lock-property-use-face)
> + ("enumMember" . font-lock-constant-face)
> + ("event" . font-lock-variable-name-face)
> + ("function" . font-lock-function-name-face)
> + ("method" . font-lock-function-name-face)
> + ("macro" . font-lock-preprocessor-face)
> + ("keyword" . font-lock-keyword-face)
> + ("modifier" . font-lock-function-name-face)
> + ("comment" . font-lock-comment-face)
> + ("string" . font-lock-string-face)
> + ("number" . font-lock-constant-face)
> + ("regexp" . font-lock-string-face)
> + ("operator" . font-lock-function-name-face)
> + ("decorator" . font-lock-type-face))
> + "Alist of faces to use to highlight semantic tokens.
> +Each element is a cons cell whose car is a token type name and cdr is
> +the face to use."
> + :type `(alist :key-type (string :tag "Token name")
> + :value-type (choice (face :tag "Face")
> + (plist :tag "Face Attributes"
> + :key-type
> + (choice
> + ,@(mapcar
> + (lambda (cell)
> + `(const :tag ,(capitalize
> + (cdr cell))
> + ,(car cell)))
> + face-attribute-name-alist))))))
> +
> +(defcustom eglot-semantic-tokens-modifier-faces
> + '(("declaration" . font-lock-function-name-face)
> + ("definition" . font-lock-function-name-face)
> + ("readonly" . font-lock-constant-face)
> + ("static" . font-lock-keyword-face)
> + ("deprecated" . eglot-diagnostic-tag-deprecated-face)
> + ("abstract" . font-lock-keyword-face)
> + ("async" . font-lock-preprocessor-face)
> + ("modification" . font-lock-function-name-face)
> + ("documentation" . font-lock-doc-face)
> + ("defaultLibrary" . font-lock-builtin-face))
> + "List of face to use to highlight tokens with modifiers.
> +Each element is a cons cell whose car is a modifier name and cdr is
> +the face to use."
> + :type `(alist :key-type (string :tag "Token name")
> + :value-type (choice (face :tag "Face")
> + (plist :tag "Face Attributes"
> + :key-type
> + (choice
> + ,@(mapcar
> + (lambda (cell)
> + `(const :tag ,(capitalize
> + (cdr cell))
> + ,(car cell)))
> + face-attribute-name-alist))))))
> +
> +(defvar-local eglot--semtok-idle-timer nil
> + "Idle timer to request full semantic tokens.")
> +
> +(defvar-local eglot--semtok-cache nil)
> +
> +(defsubst eglot--semtok-put-cache (k v)
> + "Set key K of `eglot-semantic-tokens--cache' to V."
> + (setq eglot--semtok-cache
> + (plist-put eglot--semtok-cache k v)))
> +
> +;; Process response
> +
> +(defun eglot--semtok-ingest-range-response (response)
> + "Handle RESPONSE to semanticTokens/range request."
> + (eglot--semtok-put-cache :response response)
> + (cl-assert (plist-get eglot--semtok-cache :region)))
> +
> +(defun eglot--semtok-ingest-full-response (response)
> + "Handle RESPONSE to semanticTokens/full request."
> + (eglot--semtok-put-cache :response response)
> + (cl-assert (not (plist-get eglot--semtok-cache :region))))
> +
> +(defsubst eglot--semtok-apply-delta-edits (old-data edits)
> + "Apply EDITS obtained from full/delta request to OLD-DATA."
> + (let* ((old-token-count (length old-data))
> + (old-token-index 0)
> + (substrings))
> + (cl-loop for edit across edits do
> + (when (< old-token-index (plist-get edit :start))
> + (push (substring old-data old-token-index (plist-get edit :start)) substrings))
> + (push (plist-get edit :data) substrings)
> + (setq old-token-index (+ (plist-get edit :start) (plist-get edit :deleteCount)))
> + finally do (push (substring old-data old-token-index old-token-count) substrings))
> + (apply #'vconcat (nreverse substrings))))
> +
> +(defun eglot--semtok-ingest-full/delta-response (response)
> + "Handle RESPONSE to semanticTokens/full/delta request."
> + (if-let* ((edits (plist-get response :edits)))
> + (progn
> + (cl-assert (not (plist-get eglot--semtok-cache :region)))
> + (when-let* ((old-data (plist-get (plist-get eglot--semtok-cache :response) :data)))
> + (eglot--semtok-put-cache
> + :response
> + (plist-put response :data (eglot--semtok-apply-delta-edits old-data edits)))))
> + ;; server decided to send full response instead
> + (eglot--semtok-ingest-full-response response)))
> +
> +(defun eglot--semtok-request (region &optional fontify)
> + "Send semantic tokens request to the language server.
> +A full/delta request will be sent if delta requests are supported by the
> +language server and a full set of tokens had previously been received.
> +Otherwise, a ranged request will be dispatched if REGION is non-nil and
> +ranged requests are supported by the language server. In all other
> +cases, a full tokens request will be dispatched.
> +
> +If FONTIFY is non-nil, refontify after the request completes."
> + (let* ((method :textDocument/semanticTokens/full)
> + (params (list :textDocument (eglot--TextDocumentIdentifier)))
> + (response-handler #'eglot--semtok-ingest-full-response)
> + (final-region nil)
> + (buf (current-buffer)))
> + (cond
> + ((and (eglot-server-capable :semanticTokensProvider :full :delta)
> + (let ((response (plist-get eglot--semtok-cache :response)))
> + (and (plist-get response :resultId) (plist-get response :data)
> + (not (plist-get eglot--semtok-cache :region)))))
> + (setq method :textDocument/semanticTokens/full/delta)
> + (setq response-handler #'eglot--semtok-ingest-full/delta-response)
> + (setq params
> + (plist-put params :previousResultId
> + (plist-get (plist-get eglot--semtok-cache :response) :resultId))))
> + ((and region (eglot-server-capable :semanticTokensProvider :range))
> + (setq method :textDocument/semanticTokens/range)
> + (setq final-region region)
> + (setq params
> + (plist-put params :range (eglot-region-range
> + (car final-region) (cdr final-region))))
> + (setq response-handler #'eglot--semtok-ingest-range-response)))
> + (eglot--async-request
> + (eglot--current-server-or-lose) method params
> + :success-fn
> + (lambda (response)
> + (eglot--when-live-buffer buf
> + (eglot--semtok-put-cache :documentVersion eglot--versioned-identifier)
> + (eglot--semtok-put-cache :region final-region)
> + (funcall response-handler response)
> + (when fontify (jit-lock-refontify (car-safe region) (cdr-safe region)))
> + (when final-region (eglot--semtok-request-full-on-idle))))
> + :hint #'eglot--semtok-request)))
> +
> +(defun eglot--semtok-fontify (beg end)
> + "Apply the cached semantic tokens from BEG to END."
> + (with-slots ((modifier-cache semtok-modifier-cache)
> + (faces semtok-faces)
> + (modifier-faces semtok-modifier-faces))
> + (eglot-current-server)
> + (cond
> + ((not (and faces
> + eglot--semtok-cache
> + (plist-get eglot--semtok-cache :response)
> + (eq eglot--versioned-identifier (plist-get eglot--semtok-cache :documentVersion))))
> + (eglot--semtok-request (cons beg end) t))
> + (t
> + ;; if we're using the response to a ranged request, we'll only be able to fontify within
> + ;; that range (and hence shouldn't clear any highlights outside of that range)
> + (when-let* ((token-region (plist-get eglot--semtok-cache :region)))
> + (progn
> + (when (or (< beg (car token-region))
> + (> end (cdr token-region)))
> + ;; truncated! continue, but request again
> + (eglot--semtok-request (cons beg end) t))
> + (setq beg (max beg (car token-region)))
> + (setq end (min end (cdr token-region)))))
> + (eglot--widening
> + (with-silent-modifications
> + (remove-list-of-text-properties beg end '(font-lock-face))
> + (let* ((inhibit-field-text-motion t)
> + (data (plist-get (plist-get eglot--semtok-cache :response) :data))
> + (i-max (length data))
> + (beg-bol (and (goto-char beg) (line-beginning-position)))
> + (property-beg)
> + (property-end))
> + (goto-char (point-min))
> + (cl-do ((i 0 (+ i 5)) (column 0)) ((>= i i-max))
> + (when (> (aref data i) 0)
> + (setq column 0)
> + (forward-line (aref data i)))
> + (unless (< (point) beg-bol)
> + (setq column (+ column (aref data (+ i 1))))
> + (funcall eglot-move-to-linepos-function column)
> + (when (> (point) end) (cl-return))
> + (setq property-beg (point))
> + (funcall eglot-move-to-linepos-function (+ column (aref data (+ i 2))))
> + (setq property-end (point))
> + (when-let* ((face (aref faces (aref data (+ i 3)))))
> + (put-text-property property-beg property-end 'font-lock-face face))
> + (let* ((code (aref data (+ i 4)))
> + (faces (gethash code modifier-cache 'not-found)))
> + (when (eq faces 'not-found)
> + (setq faces nil)
> + (cl-loop for j from 0 below (length modifier-faces)
> + if (> (logand code (ash 1 j)) 0)
> + if (aref modifier-faces j)
> + collect (aref modifier-faces j) into faces)
> + (puthash code faces modifier-cache))
> + (dolist (face faces)
> + (put-text-property property-beg property-end 'font-lock-face face))))))))
> + `(jit-lock-bounds ,beg . ,end)))))
> +
> +(defun eglot--semtok-request-full-on-idle ()
> + "Make a full semantic tokens request after an idle timer."
> + (let* ((buf (current-buffer))
> + (fun (lambda ()
> + (eglot--when-live-buffer buf
> + (eglot--semtok-request nil)))))
> + (when eglot--semtok-idle-timer (cancel-timer eglot--semtok-idle-timer))
> + (setq eglot--semtok-idle-timer (run-with-idle-timer (* 3 eglot-send-changes-idle-time) nil fun))))
> +
> +(defun eglot--semtok-on-refresh (server)
> + "Clear semantic tokens within all buffers of SERVER."
> + (cl-loop for buffer in (eglot--managed-buffers server) do
> + (with-current-buffer buffer
> + (setq eglot--semtok-cache nil)
> + (jit-lock-refontify))))
> +
> +(let ((debounce-timer nil))
> + (cl-defmethod eglot-handle-request
> + (server (_method (eql workspace/semanticTokens/refresh)))
> + "Handle a semanticTokens/refresh request from SERVER."
> + (when debounce-timer (cancel-timer debounce-timer))
> + (setq debounce-timer (run-with-timer 5 nil #'eglot--semtok-on-refresh server))
> + nil))
> +
> +;; Initialization
> +(defun eglot--semtok-build-face-map (identifiers faces category varname)
> + "Build map of FACES for IDENTIFIERS using CATEGORY and VARNAME."
> + (vconcat
> + (mapcar (lambda (id)
> + (let ((maybe-face (cdr (assoc id faces))))
> + (when (not maybe-face)
> + (display-warning
> + 'eglot-semtok
> + (format-message "No face has been associated to the %s `%s': consider adding a corresponding definition to %s"
> + category id varname)))
> + maybe-face))
> + identifiers)))
> +
> +(defun eglot--semtok-initialize (server)
> + "Initialize SERVER for semantic tokens."
> + (cl-destructuring-bind (&key tokenTypes tokenModifiers &allow-other-keys)
> + (plist-get (plist-get (eglot--capabilities server)
> + :semanticTokensProvider)
> + :legend)
> + (oset server semtok-faces
> + (eglot--semtok-build-face-map
> + tokenTypes eglot-semantic-tokens-faces
> + "semantic token" "eglot--semtokfaces"))
> + (oset server semtok-modifier-faces
> + (eglot--semtok-build-face-map
> + tokenModifiers eglot-semantic-tokens-modifier-faces
> + "semantic token modifier" "eglot--semtokmodifier-faces"))))
> +
> +(define-minor-mode eglot-semantic-tokens-mode
> + "Minor mode for fontifying buffer with LSP server's semantic tokens."
> + :global nil
> + (cond (eglot-semantic-tokens-mode
> + (if (eglot-server-capable :semanticTokensProvider)
> + (jit-lock-register #'eglot--semtok-fontify 'contextual)
> + (eglot-semantic-tokens-mode -1)))
> + (t
> + (jit-lock-unregister #'eglot--semtok-fontify)
> + (with-silent-modifications
> + (remove-list-of-text-properties (point-min) (point-max) '(font-lock-face))))))
> +
>
> ;;; Call and type hierarchies
> (require 'button)
> @@ -4728,7 +5036,8 @@ If NOERROR, return predicate, else erroring function."
> ;; harder. For now, use `with-eval-after-load'. See also github#1183.
> (with-eval-after-load 'desktop
> (add-to-list 'desktop-minor-mode-handlers '(eglot--managed-mode . ignore))
> - (add-to-list 'desktop-minor-mode-handlers '(eglot-inlay-hints-mode . ignore)))
> + (add-to-list 'desktop-minor-mode-handlers '(eglot-inlay-hints-mode . ignore))
> + (add-to-list 'desktop-minor-mode-handlers '(eglot-semantic-tokens-mode . ignore)))
>
>
> ;;; Misc
> @@ -4757,6 +5066,7 @@ If NOERROR, return predicate, else erroring function."
> eglot-format
> eglot-format-buffer
> eglot-inlay-hints-mode
> + eglot-semantic-tokens-mode
> eglot-reconnect
> eglot-rename
> eglot-signal-didChangeConfiguration
> --
> 2.51.0
>
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.Received: (at 79374) by debbugs.gnu.org; 4 Sep 2025 08:37:00 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Sep 04 04:37:00 2025 Received: from localhost ([127.0.0.1]:45201 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1uu5Sl-00055o-IJ for submit <at> debbugs.gnu.org; Thu, 04 Sep 2025 04:36:59 -0400 Received: from mout01.posteo.de ([185.67.36.65]:42813) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <philipk@HIDDEN>) id 1uu5Sh-00055L-94 for 79374 <at> debbugs.gnu.org; Thu, 04 Sep 2025 04:36:56 -0400 Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id EB79E240027 for <79374 <at> debbugs.gnu.org>; Thu, 4 Sep 2025 10:36:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.net; s=2017; t=1756975007; bh=879ybWXF05i87nxpv3migv7gZA71+fEMUb26fa9tVTU=; h=From:To:Cc:Subject:Autocrypt:OpenPGP:Date:Message-ID:MIME-Version: Content-Type:From; b=U7y7ga8UnfnTYFfbUEJsrRTYnhVW7fBXozXgfxXprmJZ4jssEk6ykdzMRXmhM6o7D kxxi6JwspifoUAc0ndOa0lL+l9VbJ6ER1JohXCPJb810nYD3fo5Maoa+zMa79Wspn1 m18wjrl+NKyj/TiYGriZgCTOzkcbApjT1sGiYVSo4mkr8D/vNEc3p+sutS49BD31aV Cg19Umf8oVz3rwKQx69kSVif4XxaD7IaDW3cOdNvJgvE8bs3mwZOpJiW6NYlhrPoKo uxI+m4q1VQokjn227XBAvLcfcAzQMb6otxjodeRTuhNZpZmmSwTs9uAk2TJEk8M374 D5pagj7/Vw/DA== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4cHXrt66Zkz9rxT; Thu, 4 Sep 2025 10:36:46 +0200 (CEST) From: Philip Kaludercic <philipk@HIDDEN> To: "Lua V. R." <me@HIDDEN> Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens In-Reply-To: <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN> <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN> <87ecsoc6cz.fsf@HIDDEN> <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN> Autocrypt: addr=philipk@HIDDEN; keydata= mDMEZBBQQhYJKwYBBAHaRw8BAQdAHJuofBrfqFh12uQu0Yi7mrl525F28eTmwUDflFNmdui0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiWBBMWCAA+FiEEDg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwMFCQHhM4AFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ8xYDWXahwulikAEA77hloUiSrXgFkUVJhlKBpLCHUjA0 mWZ9j9w5d08+jVwBAK6c4iGP7j+/PhbkxaEKa4V3MzIl7zJkcNNjHCXmvFcEuDgEZBBQQhIKKwYB BAGXVQEFAQEHQI5NLiLRjZy3OfSt1dhCmFyn+fN/QKELUYQetiaoe+MMAwEIB4h+BBgWCAAmFiEE Dg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwwFCQHhM4AACgkQ8xYDWXahwukm+wEA8cml4JpK NeAu65rg+auKrPOP6TP/4YWRCTIvuYDm0joBALw98AMz7/qMHvSCeU/hw9PL6u6R2EScxtpKnWof z4oM OpenPGP: id=7126E1DE2F0CE35C770BED01F2C3CC513DB89F66; url="https://keys.openpgp.org/vks/v1/by-fingerprint/7126E1DE2F0CE35C770BED01F2C3CC513DB89F66"; preference=signencrypt Date: Thu, 04 Sep 2025 08:36:47 +0000 Message-ID: <87bjnqty02.fsf@HIDDEN> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 79374 Cc: 79374 <at> debbugs.gnu.org, =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) "Lua V. R." <me@HIDDEN> writes: > Hi Philip, > > Em 03/09/2025 05:01, Philip Kaludercic escreveu: >> As mentioned on Emacs-devel, shouldn't this be `eglot-semantic-tokens-mode'. > Thanks for catching this :) I fixed it among other things, and I > apologize for being unfamiliar with the e-mail git workflow. FWIW I did not notice that you were doing anything wrong :) > I don't > know if I should send a patch on top of the previous patch, but I'm > sending a squashed one. That is the conventional approach. The idea is that we can apply a clean patch to emacs.git, while the mailing list is sort of the meta VCS over the patch (if that makes sense). > In this new patch I also removed a "hash" I used in attempt to avoid a > burst of requests, because it was not working in some particular > situations (I can explain if you want). Now, due to how jit-lock > works, Eglot may send two requests after a didChange if the server > does not support delta requests. But this was also the case in the > version with the hash, so alas, it was just complicating things. My experience with Eglot internals is limited so I cannot really comment on that part, sorry.
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.
Received: (at 79374) by debbugs.gnu.org; 4 Sep 2025 00:03:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 03 20:03:04 2025
Received: from localhost ([127.0.0.1]:43700 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1utxRO-0001Jr-1O
for submit <at> debbugs.gnu.org; Wed, 03 Sep 2025 20:03:03 -0400
Received: from poodle.tulip.relay.mailchannels.net ([23.83.218.249]:60591)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <me@HIDDEN>) id 1utxRJ-0001JU-NZ
for 79374 <at> debbugs.gnu.org; Wed, 03 Sep 2025 20:03:00 -0400
X-Sender-Id: hostingeremailsmtpin|x-authuser|lua@HIDDEN
Received: from relay.mailchannels.net (localhost [127.0.0.1])
by relay.mailchannels.net (Postfix) with ESMTP id 11925903CAE;
Thu, 4 Sep 2025 00:02:55 +0000 (UTC)
Received: from fr-int-smtpout27.hostinger.io
(trex-blue-0.trex.outbound.svc.cluster.local [100.102.62.95])
(Authenticated sender: hostingeremailsmtpin)
by relay.mailchannels.net (Postfix) with ESMTPA id D4EAC9045C8;
Thu, 4 Sep 2025 00:02:53 +0000 (UTC)
ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1756944174; a=rsa-sha256;
cv=none;
b=CEOpx0iBSyfAKPiNbiw0Gu7AyL6g5symnEnvLW1yN4JXsEYvvcUvt/6tE2cX8+Fj3f4/Ah
ns2XETxuNtoUwBndgc8dRM07KskcnBo6+a62Ug+nQsGcinpJ6YEly2ynP7U1kkvqMSbyz3
fwtN5y+09yenB/tWqoCz/UpZ+9seD4jjef9FAhKP+6WBDX820N73p5NoF+mUiDiY8iroDD
S/m1Fpy1lIgncTqZ+u6sPwk+LplLAlyQSEoUVabMyv0MkMqtQeaERr37SFAucrUkGxrill
BN4PJfvbbBl88cpmp2qRJkOYO30SpJqeueU+DNWSS308TmU6y+xtISQ3w3Cerw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed;
d=mailchannels.net; s=arc-2022; t=1756944174;
h=from:from:reply-to:reply-to:subject:subject:date:date:
message-id:message-id:to:to:cc:cc:mime-version:mime-version:
content-type:content-type:in-reply-to:in-reply-to:
references:references:dkim-signature;
bh=S9EqPSXjyRw+1qIzD8PXIoNnCd9Ex2F6h6Q72+x12rI=;
b=CHxQtjRT2YWnRmrX6zPMOzK8jopytr0Ab5+Ta2e0PPEK4q9WG/dhAezMmotjA4I6C0hkmS
zvZmJjSTt+kf/iXdIH0a+tPZQknnDxmatQIC+p9mKEAgI2SNGaEFaDEPV6LIoSmtkE40xO
I3zHN6Gm3Mswi8PU68H1TnOYJdl64KgG0eESnujgxntCfRl/83fKTyk7AhGWK9f+MjbUMo
c9zAyFsYMfotXXfrxpeXG76jafcQU0KTjUR/b3vBRNwiu2QB+WsvYSIjfjJYVuDv2StmDW
f1FK0ntOw8Y43w4vrOG2lHdjK/07piipMeCrNvpqvxu2T52rpePcBdgUJ1ufPg==
ARC-Authentication-Results: i=1; rspamd-8b9589799-sm6tm;
auth=pass smtp.auth=hostingeremailsmtpin smtp.mailfrom=me@HIDDEN
X-Sender-Id: hostingeremailsmtpin|x-authuser|lua@HIDDEN
X-MC-Relay: Neutral
X-MailChannels-SenderId: hostingeremailsmtpin|x-authuser|lua@HIDDEN
X-MailChannels-Auth-Id: hostingeremailsmtpin
X-Chemical-Wide-Eyed: 16757e6d20a8499e_1756944174842_2169012794
X-MC-Loop-Signature: 1756944174842:3667252319
X-MC-Ingress-Time: 1756944174842
Received: from fr-int-smtpout27.hostinger.io ([UNAVAILABLE]. [148.222.54.8])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384)
by 100.102.62.95 (trex/7.1.3); Thu, 04 Sep 2025 00:02:54 +0000
Received: from [IPV6:2804:14d:8084:a662::db8f] (unknown
[IPv6:2804:14d:8084:a662::db8f])
(Authenticated sender: lua@HIDDEN)
by smtp.hostinger.com (smtp.hostinger.com) with ESMTPSA id 4cHKRv2hlgz2yhn;
Thu, 4 Sep 2025 00:02:51 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lua.blog.br;
s=hostingermail-a; t=1756944172;
h=from:from:reply-to:reply-to:subject:subject:date:date:
message-id:message-id:to:to:cc:cc:mime-version:mime-version:
content-type:content-type:in-reply-to:in-reply-to: references:references;
bh=S9EqPSXjyRw+1qIzD8PXIoNnCd9Ex2F6h6Q72+x12rI=;
b=CKEt+dXwwOBzG+K7E1ODaVp8oU2FujWaAVFhZdeWw0BnPZeRZnC5oU25lT3xCf15pIXtRa
wQpRheT3OMlmeO97WMenqT2KLdPubXmTaEMEmKrbutGCMFr+hpqSr24j/bUu4mIAm/gg+q
vMitMvFon1PDxaTaoyZKChH72dn2dzB6FdjiN1Ds7Qr5BpbndnUwzeD5JeKf70nhlegOUG
DhjZj0VMiYK81PpmkjAcyPM1A1r3MTcVy6Z9g8YP2ilYPOBh7d0HNrNSOzpnzwrZr/bXgN
sb1JIDqAc0Acc79POB0DdBZSD/wgzco3UHJX78wlmsqgc+cx8gT7Bbp2hwRvQw==
Content-Type: multipart/mixed; boundary="------------inAXX13i0ODSZQVny1l1Heua"
Message-ID: <ab41f23e-b8b4-47e4-be70-8fbc1bee92d0@HIDDEN>
MIME-Version: 1.0
User-Agent: Betterbird (Linux)
Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens
To: Philip Kaludercic <philipk@HIDDEN>
References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN>
<2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN>
<87ecsoc6cz.fsf@HIDDEN>
Content-Language: en-US, pt-BR
From: "Lua V. R." <me@HIDDEN>
In-Reply-To: <87ecsoc6cz.fsf@HIDDEN>
Date: Thu, 4 Sep 2025 00:02:51 +0000 (UTC)
X-CM-Analysis: v=2.4 cv=DJTd4DNb c=1 sm=1 tr=0 ts=68b8d72c
a=AE7tfnPL9jKFtS+MZ9Z/2w==:617 a=xqWC_Br6kY4A:10 a=r77TgQKjGQsHNAKrUKIA:9
a=gOsM90wFzwEAMpLDgvgA:9 a=QEXdDO2ut3YA:10 a=ZXulRonScM0A:10
a=zZCYzV9kfG8A:10 a=YlruJXNrF_IqJ07b8VgA:9 a=B2y7HmGcmWMA:10
X-CM-Envelope: MS4xfGlW8yDnZvlwwUHvP063i6EvCn3OgT9l6uO0CHc5Wk4h7l9FPG7l2bwybyTVhAyd3anDedm3TqIAq3oZDuTRYO1YWFX1gRA6m/xZFl8CckIaMvamsFHH
uuJdwGJRqp7fyjy0/1oJCI0keYd6xqPpi6WwaU3MCL5h+mw+7NhY5V5+xmP661muN3RJKbe17La69wlzbLZMGCQrbf6dlz6DGEgG5GoP94P5WTmSLujCXYlq
bHY78vSpv3z7SLco9kJafxkuiJDwWJbpXVVodFFDg6ZPkHJagZhae0LBvvQeAiaV
X-AuthUser: lua@HIDDEN
X-Spam-Score: 3.6 (+++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
has NOT identified this incoming email as spam. The original
message has been attached to this so you can view it or label
similar future email. If you have any questions, see
the administrator of that system for details.
Content preview: Hi Philip, Em 03/09/2025 05:01, Philip Kaludercic escreveu:
> As mentioned on Emacs-devel, shouldn't this be `eglot-semantic-tokens-mode'.
Thanks for catching this :) I fixed it among other things, and I apologi
[...] Content analysis details: (3.6 points, 10.0 required)
pts rule name description
---- ---------------------- --------------------------------------------------
3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS
[2804:14d:8084:a662:0:0:0:db8f listed in] [zen.spamhaus.org]
0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE:
The query to Validity was blocked. See
https://knowledge.validity.com/hc/en-us/articles/20961730681243
for more information.
[23.83.218.249 listed in sa-trusted.bondedsender.org]
-0.0 SPF_PASS SPF: sender matches SPF record
0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record
0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2)
[23.83.218.249 listed in wl.mailspike.net]
-0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/,
no trust [23.83.218.249 listed in list.dnswl.org]
0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The
query to Validity was blocked. See
https://knowledge.validity.com/hc/en-us/articles/20961730681243
for more information.
[23.83.218.249 listed in bl.score.senderscore.com]
X-Debbugs-Envelope-To: 79374
Cc: 79374 <at> debbugs.gnu.org,
=?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Reply-To: me@HIDDEN
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 2.6 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
has NOT identified this incoming email as spam. The original
message has been attached to this so you can view it or label
similar future email. If you have any questions, see
the administrator of that system for details.
Content preview: Hi Philip, Em 03/09/2025 05:01, Philip Kaludercic escreveu:
> As mentioned on Emacs-devel, shouldn't this be `eglot-semantic-tokens-mode'.
Thanks for catching this :) I fixed it among other things, and I apologi
[...]
Content analysis details: (2.6 points, 10.0 required)
pts rule name description
---- ---------------------- --------------------------------------------------
0.0 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED RBL: ADMINISTRATOR NOTICE:
The query to Validity was blocked. See
https://knowledge.validity.com/hc/en-us/articles/20961730681243
for more information.
[23.83.218.249 listed in sa-accredit.habeas.com]
-0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/,
no trust
[23.83.218.249 listed in list.dnswl.org]
3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS
[2804:14d:8084:a662:0:0:0:db8f listed in]
[zen.spamhaus.org]
0.0 RCVD_IN_VALIDITY_RPBL_BLOCKED RBL: ADMINISTRATOR NOTICE: The
query to Validity was blocked. See
https://knowledge.validity.com/hc/en-us/articles/20961730681243
for more information.
[23.83.218.249 listed in bl.score.senderscore.com]
0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2)
[23.83.218.249 listed in wl.mailspike.net]
-0.0 SPF_PASS SPF: sender matches SPF record
0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record
-1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list
manager
This is a multi-part message in MIME format.
--------------inAXX13i0ODSZQVny1l1Heua
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Hi Philip,
Em 03/09/2025 05:01, Philip Kaludercic escreveu:
> As mentioned on Emacs-devel, shouldn't this be `eglot-semantic-tokens-mode'.
Thanks for catching this :) I fixed it among other things, and I
apologize for being unfamiliar with the e-mail git workflow. I don't
know if I should send a patch on top of the previous patch, but I'm
sending a squashed one.
In this new patch I also removed a "hash" I used in attempt to avoid a
burst of requests, because it was not working in some particular
situations (I can explain if you want). Now, due to how jit-lock works,
Eglot may send two requests after a didChange if the server does not
support delta requests. But this was also the case in the version with
the hash, so alas, it was just complicating things.
--------------inAXX13i0ODSZQVny1l1Heua
Content-Type: text/x-patch; charset=UTF-8;
name="0001-add-semantic-tokens-support-for-eglot.patch"
Content-Disposition: attachment;
filename="0001-add-semantic-tokens-support-for-eglot.patch"
Content-Transfer-Encoding: base64
RnJvbSAzMjQ3MWM0YTBmYzljYTgwYWU4ZDNjMjk5YTNiZDU1NTgxZjhjYjA0IE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBMdWEgVmlhbmEgUmVpcyA8bWVAbHVhLmJsb2cuYnI+
CkRhdGU6IFR1ZSwgMiBTZXAgMjAyNSAxOTowMzo1MiAtMDMwMApTdWJqZWN0OiBbUEFUQ0hd
IGFkZCBzZW1hbnRpYyB0b2tlbnMgc3VwcG9ydCBmb3IgZWdsb3QKCi0tLQogbGlzcC9wcm9n
bW9kZXMvZWdsb3QuZWwgfCAzMTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDMxMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21vZGVzL2VnbG90LmVsIGIvbGlzcC9wcm9n
bW9kZXMvZWdsb3QuZWwKaW5kZXggNDc1YjVlMTNmMS4uMWQ5ZmI3OTA1ZCAxMDA2NDQKLS0t
IGEvbGlzcC9wcm9nbW9kZXMvZWdsb3QuZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvZWdsb3Qu
ZWwKQEAgLTE0MSw2ICsxNDEsOCBAQAogKGRlZnZhciBjb21wYW55LXRvb2x0aXAtYWxpZ24t
YW5ub3RhdGlvbnMpCiAoZGVmdmFyIHRyYW1wLXNzaC1jb250cm9sbWFzdGVyLW9wdGlvbnMp
CiAoZGVmdmFyIHRyYW1wLXVzZS1zc2gtY29udHJvbG1hc3Rlci1vcHRpb25zKQorKGRlZnZh
ciBlZ2xvdC1zZW1hbnRpYy10b2tlbnMtZmFjZXMpCisoZGVmdmFyIGVnbG90LXNlbWFudGlj
LXRva2Vucy1tb2RpZmllci1mYWNlcykKIAogDAogOzs7IE9ic29sZXRlIGFsaWFzZXMKQEAg
LTEwMTcsNiArMTAxOSw3IEBAIG9iamVjdC4iCiAgICAgICAgICAgICAgICAgICAgICAgICBg
KDpkeW5hbWljUmVnaXN0cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICwoaWYg
KGVnbG90LS10cmFtcGlzaC1wIHMpIDpqc29uLWZhbHNlIHQpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgOnN5bWJvbCBgKDpkeW5hbWljUmVnaXN0cmF0aW9uIDpqc29uLWZhbHNlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgOnNlbWFudGljVG9rZW5zICcoOnJlZnJlc2hTdXBw
b3J0IHQpCiAgICAgICAgICAgICAgICAgICAgICAgICA6Y29uZmlndXJhdGlvbiB0CiAgICAg
ICAgICAgICAgICAgICAgICAgICA6d29ya3NwYWNlRm9sZGVycyB0KQogICAgICAgICAgICAg
OnRleHREb2N1bWVudApAQCAtMTA3OSw2ICsxMDgyLDEzIEBAIG9iamVjdC4iCiAgICAgICAg
ICAgICAgOmZvcm1hdHRpbmcgICAgICAgICBgKDpkeW5hbWljUmVnaXN0cmF0aW9uIDpqc29u
LWZhbHNlKQogICAgICAgICAgICAgIDpyYW5nZUZvcm1hdHRpbmcgICAgYCg6ZHluYW1pY1Jl
Z2lzdHJhdGlvbiA6anNvbi1mYWxzZSkKICAgICAgICAgICAgICA6cmVuYW1lICAgICAgICAg
ICAgIGAoOmR5bmFtaWNSZWdpc3RyYXRpb24gOmpzb24tZmFsc2UpCisgICAgICAgICAgICAg
OnNlbWFudGljVG9rZW5zICAgICBgKDpkeW5hbWljUmVnaXN0cmF0aW9uIDpqc29uLWZhbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpyZXF1ZXN0cyAnKDpyYW5n
ZSB0IDpmdWxsICg6ZGVsdGEgdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDp0b2tlbk1vZGlmaWVycyBbLEAobWFwY2FyICMnY2FyIGVnbG90LXNlbWFudGljLXRv
a2Vucy1tb2RpZmllci1mYWNlcyldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDpvdmVybGFwcGluZ1Rva2VuU3VwcG9ydCB0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDptdWx0aWxpbmVUb2tlblN1cHBvcnQgdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6dG9rZW5UeXBlcyBbLEAobWFwY2FyICMnY2FyIGVnbG90
LXNlbWFudGljLXRva2Vucy1mYWNlcyldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDpmb3JtYXRzIFsicmVsYXRpdmUiXSkKICAgICAgICAgICAgICA6aW5sYXlIaW50
ICAgICAgICAgIGAoOmR5bmFtaWNSZWdpc3RyYXRpb24gOmpzb24tZmFsc2UpCiAgICAgICAg
ICAgICAgOmNhbGxIaWVyYXJjaHkgICAgICBgKDpkeW5hbWljUmVnaXN0cmF0aW9uIDpqc29u
LWZhbHNlKQogICAgICAgICAgICAgIDp0eXBlSGllcmFyY2h5ICAgICAgYCg6ZHluYW1pY1Jl
Z2lzdHJhdGlvbiA6anNvbi1mYWxzZSkKQEAgLTExNDksNyArMTE1OSwxNiBAQCBvYmplY3Qu
IgogICAgIDphY2Nlc3NvciBlZ2xvdC0tbWFuYWdlZC1idWZmZXJzKQogICAgKHNhdmVkLWlu
aXRhcmdzCiAgICAgOmRvY3VtZW50YXRpb24gIlNhdmVkIGluaXRhcmdzIGZvciByZWNvbm5l
Y3Rpb24gcHVycG9zZXMuIgotICAgIDphY2Nlc3NvciBlZ2xvdC0tc2F2ZWQtaW5pdGFyZ3Mp
KQorICAgIDphY2Nlc3NvciBlZ2xvdC0tc2F2ZWQtaW5pdGFyZ3MpCisgICAoc2VtdG9rLWZh
Y2VzCisgICAgOmluaXRmb3JtIG5pbAorICAgIDpkb2N1bWVudGF0aW9uICJTZW1hbnRpYyB0
b2tlbnMgZmFjZXMuIikKKyAgIChzZW10b2stbW9kaWZpZXItZmFjZXMKKyAgICA6aW5pdGZv
cm0gbmlsCisgICAgOmRvY3VtZW50YXRpb24gIlNlbWFudGljIHRva2VucyBtb2RpZmllciBm
YWNlcy4iKQorICAgKHNlbXRvay1tb2RpZmllci1jYWNoZQorICAgIDppbml0Zm9ybSAobWFr
ZS1oYXNoLXRhYmxlKQorICAgIDpkb2N1bWVudGF0aW9uICJBIGhhc2htYXAgb2YgbW9kaWZp
ZXIgdmFsdWVzIHRvIHRoZSBzZWxlY3RlZCBmYWNlcy4iKSkKICAgOmRvY3VtZW50YXRpb24K
ICAgIlJlcHJlc2VudHMgYSBzZXJ2ZXIuIFdyYXBzIGEgcHJvY2VzcyBmb3IgTFNQIGNvbW11
bmljYXRpb24uIikKIApAQCAtMTIxMSw2ICsxMjMwLDExIEBAIElmIG9wdGlvbmFsIE1BUktF
UlMsIG1ha2UgbWFya2VycyBpbnN0ZWFkLiIKICAgICAgICAgIChlbmQgKGVnbG90LS1sc3At
cG9zaXRpb24tdG8tcG9pbnQgKHBsaXN0LWdldCByYW5nZSA6ZW5kKSBtYXJrZXJzKSkpCiAg
ICAgKGNvbnMgYmVnIGVuZCkpKQogCisoZGVmdW4gZWdsb3QtcmVnaW9uLXJhbmdlIChiZWcg
ZW5kKQorICAiUmV0dXJuIGEgTFNQIHJhbmdlIHJlcHJlc2VudGluZyByZWdpb24gQkVHIHRv
IEVORC4iCisgIChsaXN0IDpzdGFydCAoZWdsb3QtLXBvcy10by1sc3AtcG9zaXRpb24gYmVn
KQorICAgICAgICA6ZW5kIChlZ2xvdC0tcG9zLXRvLWxzcC1wb3NpdGlvbiBlbmQpKSkKKwog
KGRlZnVuIGVnbG90LXNlcnZlci1jYXBhYmxlICgmcmVzdCBmZWF0cykKICAgIkRldGVybWlu
ZSBpZiBjdXJyZW50IHNlcnZlciBpcyBjYXBhYmxlIG9mIEZFQVRTLiIKICAgKHVubGVzcyAo
Y2wtc29tZSAobGFtYmRhIChmZWF0KQpAQCAtMTU3Niw3ICsxNjAwLDggQEAgVXNlIGN1cnJl
bnQgc2VydmVyJ3Mgb3IgZmlyc3QgYXZhaWxhYmxlIEVnbG90IGV2ZW50cyBidWZmZXIuIgog
ICAoanNvbnJwYy1mb3JnZXQtcGVuZGluZy1jb250aW51YXRpb25zIHNlcnZlcikpCiAKIChk
ZWZ2YXIgZWdsb3QtY29ubmVjdC1ob29rCi0gICcoZWdsb3Qtc2lnbmFsLWRpZENoYW5nZUNv
bmZpZ3VyYXRpb24pCisgICcoZWdsb3Qtc2lnbmFsLWRpZENoYW5nZUNvbmZpZ3VyYXRpb24K
KyAgICBlZ2xvdC0tc2VtdG9rLWluaXRpYWxpemUpCiAgICJIb29rIHJ1biBhZnRlciBjb25u
ZWN0aW5nIHRvIGEgc2VydmVyLgogRWFjaCBmdW5jdGlvbiBpcyBwYXNzZWQgYW4gYGVnbG90
LWxzcC1zZXJ2ZXInIGluc3RhbmNlCiBhcyBhcmd1bWVudC4iKQpAQCAtMjI5MSw2ICsyMzE2
LDcgQEAgSWYgaXQgaXMgYWN0aXZhdGVkLCBhbHNvIHNpZ25hbCB0ZXh0RG9jdW1lbnQvZGlk
T3Blbi4iCiAgICAgICA7OyBSdW4gdXNlciBob29rIGFmdGVyICd0ZXh0RG9jdW1lbnQvZGlk
T3Blbicgc28gc2VydmVyIGtub3dzCiAgICAgICA7OyBhYm91dCB0aGUgYnVmZmVyLgogICAg
ICAgKGVnbG90LWlubGF5LWhpbnRzLW1vZGUgMSkKKyAgICAgIChlZ2xvdC1zZW1hbnRpYy10
b2tlbnMtbW9kZSAxKQogICAgICAgKHJ1bi1ob29rcyAnZWdsb3QtbWFuYWdlZC1tb2RlLWhv
b2spKSkpCiAKIChhZGQtaG9vayAnYWZ0ZXItY2hhbmdlLW1ham9yLW1vZGUtaG9vayAjJ2Vn
bG90LS1tYXliZS1hY3RpdmF0ZS1lZGl0aW5nLW1vZGUpCkBAIC00NDk0LDYgKzQ1MjAsMjg4
IEBAIElmIE5PRVJST1IsIHJldHVybiBwcmVkaWNhdGUsIGVsc2UgZXJyb3JpbmcgZnVuY3Rp
b24uIgogICAgICAgICAgKGppdC1sb2NrLXVucmVnaXN0ZXIgIydlZ2xvdC0tdXBkYXRlLWhp
bnRzKQogICAgICAgICAgKHJlbW92ZS1vdmVybGF5cyBuaWwgbmlsICdlZ2xvdC0taW5sYXkt
aGludCB0KSkpKQogCisMCis7OzsgU2VtYW50aWMgdG9rZW5zCisKKyhkZWZjdXN0b20gZWds
b3Qtc2VtYW50aWMtdG9rZW5zLWZhY2VzCisgICcoKCJuYW1lc3BhY2UiIC4gZm9udC1sb2Nr
LWtleXdvcmQtZmFjZSkKKyAgICAoInR5cGUiIC4gZm9udC1sb2NrLXR5cGUtZmFjZSkKKyAg
ICAoImNsYXNzIiAuIGZvbnQtbG9jay10eXBlLWZhY2UpCisgICAgKCJlbnVtIiAuIGZvbnQt
bG9jay10eXBlLWZhY2UpCisgICAgKCJpbnRlcmZhY2UiIC4gZm9udC1sb2NrLXR5cGUtZmFj
ZSkKKyAgICAoInN0cnVjdCIgLiBmb250LWxvY2stdHlwZS1mYWNlKQorICAgICgidHlwZVBh
cmFtZXRlciIgLiBmb250LWxvY2stdHlwZS1mYWNlKQorICAgICgicGFyYW1ldGVyIiAuIGZv
bnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpCisgICAgKCJ2YXJpYWJsZSIgLiBmb250LWxv
Y2stdmFyaWFibGUtbmFtZS1mYWNlKQorICAgICgicHJvcGVydHkiIC4gZm9udC1sb2NrLXBy
b3BlcnR5LXVzZS1mYWNlKQorICAgICgiZW51bU1lbWJlciIgLiBmb250LWxvY2stY29uc3Rh
bnQtZmFjZSkKKyAgICAoImV2ZW50IiAuIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2Up
CisgICAgKCJmdW5jdGlvbiIgLiBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKQorICAg
ICgibWV0aG9kIiAuIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCisgICAgKCJtYWNy
byIgLiBmb250LWxvY2stcHJlcHJvY2Vzc29yLWZhY2UpCisgICAgKCJrZXl3b3JkIiAuIGZv
bnQtbG9jay1rZXl3b3JkLWZhY2UpCisgICAgKCJtb2RpZmllciIgLiBmb250LWxvY2stZnVu
Y3Rpb24tbmFtZS1mYWNlKQorICAgICgiY29tbWVudCIgLiBmb250LWxvY2stY29tbWVudC1m
YWNlKQorICAgICgic3RyaW5nIiAuIGZvbnQtbG9jay1zdHJpbmctZmFjZSkKKyAgICAoIm51
bWJlciIgLiBmb250LWxvY2stY29uc3RhbnQtZmFjZSkKKyAgICAoInJlZ2V4cCIgLiBmb250
LWxvY2stc3RyaW5nLWZhY2UpCisgICAgKCJvcGVyYXRvciIgLiBmb250LWxvY2stZnVuY3Rp
b24tbmFtZS1mYWNlKQorICAgICgiZGVjb3JhdG9yIiAuIGZvbnQtbG9jay10eXBlLWZhY2Up
KQorICAiQWxpc3Qgb2YgZmFjZXMgdG8gdXNlIHRvIGhpZ2hsaWdodCBzZW1hbnRpYyB0b2tl
bnMuCitFYWNoIGVsZW1lbnQgaXMgYSBjb25zIGNlbGwgd2hvc2UgY2FyIGlzIGEgdG9rZW4g
dHlwZSBuYW1lIGFuZCBjZHIgaXMKK3RoZSBmYWNlIHRvIHVzZS4iCisgIDp0eXBlIGAoYWxp
c3QgOmtleS10eXBlIChzdHJpbmcgOnRhZyAiVG9rZW4gbmFtZSIpCisgICAgICAgICAgICAg
ICAgOnZhbHVlLXR5cGUgKGNob2ljZSAoZmFjZSA6dGFnICJGYWNlIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChwbGlzdCA6dGFnICJGYWNlIEF0dHJpYnV0ZXMi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleS10eXBl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNob2ljZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsQChtYXBjYXIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJk
YSAoY2VsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBgKGNvbnN0IDp0YWcgLChjYXBpdGFsaXplCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkciBjZWxsKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICwoY2FyIGNlbGwpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmFjZS1hdHRyaWJ1dGUtbmFtZS1hbGlzdCkpKSkpKQorCisoZGVmY3Vz
dG9tIGVnbG90LXNlbWFudGljLXRva2Vucy1tb2RpZmllci1mYWNlcworICAnKCgiZGVjbGFy
YXRpb24iIC4gZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkKKyAgICAoImRlZmluaXRp
b24iIC4gZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkKKyAgICAoInJlYWRvbmx5IiAu
IGZvbnQtbG9jay1jb25zdGFudC1mYWNlKQorICAgICgic3RhdGljIiAuIGZvbnQtbG9jay1r
ZXl3b3JkLWZhY2UpCisgICAgKCJkZXByZWNhdGVkIiAuIGVnbG90LWRpYWdub3N0aWMtdGFn
LWRlcHJlY2F0ZWQtZmFjZSkKKyAgICAoImFic3RyYWN0IiAuIGZvbnQtbG9jay1rZXl3b3Jk
LWZhY2UpCisgICAgKCJhc3luYyIgLiBmb250LWxvY2stcHJlcHJvY2Vzc29yLWZhY2UpCisg
ICAgKCJtb2RpZmljYXRpb24iIC4gZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkKKyAg
ICAoImRvY3VtZW50YXRpb24iIC4gZm9udC1sb2NrLWRvYy1mYWNlKQorICAgICgiZGVmYXVs
dExpYnJhcnkiIC4gZm9udC1sb2NrLWJ1aWx0aW4tZmFjZSkpCisgICJMaXN0IG9mIGZhY2Ug
dG8gdXNlIHRvIGhpZ2hsaWdodCB0b2tlbnMgd2l0aCBtb2RpZmllcnMuCitFYWNoIGVsZW1l
bnQgaXMgYSBjb25zIGNlbGwgd2hvc2UgY2FyIGlzIGEgbW9kaWZpZXIgbmFtZSBhbmQgY2Ry
IGlzCit0aGUgZmFjZSB0byB1c2UuIgorICA6dHlwZSBgKGFsaXN0IDprZXktdHlwZSAoc3Ry
aW5nIDp0YWcgIlRva2VuIG5hbWUiKQorICAgICAgICAgICAgICAgIDp2YWx1ZS10eXBlIChj
aG9pY2UgKGZhY2UgOnRhZyAiRmFjZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAocGxpc3QgOnRhZyAiRmFjZSBBdHRyaWJ1dGVzIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXktdHlwZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaG9pY2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLEAobWFwY2FyCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGNlbGwpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYChjb25zdCA6dGFn
ICwoY2FwaXRhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIgY2VsbCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsKGNhciBjZWxsKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2Ut
YXR0cmlidXRlLW5hbWUtYWxpc3QpKSkpKSkKKworKGRlZnZhci1sb2NhbCBlZ2xvdC0tc2Vt
dG9rLWlkbGUtdGltZXIgbmlsCisgICJJZGxlIHRpbWVyIHRvIHJlcXVlc3QgZnVsbCBzZW1h
bnRpYyB0b2tlbnMuIikKKworKGRlZnZhci1sb2NhbCBlZ2xvdC0tc2VtdG9rLWNhY2hlIG5p
bCkKKworKGRlZnN1YnN0IGVnbG90LS1zZW10b2stcHV0LWNhY2hlIChrIHYpCisgICJTZXQg
a2V5IEsgb2YgYGVnbG90LXNlbWFudGljLXRva2Vucy0tY2FjaGUnIHRvIFYuIgorICAoc2V0
cSBlZ2xvdC0tc2VtdG9rLWNhY2hlCisgICAgICAgIChwbGlzdC1wdXQgZWdsb3QtLXNlbXRv
ay1jYWNoZSBrIHYpKSkKKworOzsgUHJvY2VzcyByZXNwb25zZQorCisoZGVmdW4gZWdsb3Qt
LXNlbXRvay1pbmdlc3QtcmFuZ2UtcmVzcG9uc2UgKHJlc3BvbnNlKQorICAiSGFuZGxlIFJF
U1BPTlNFIHRvIHNlbWFudGljVG9rZW5zL3JhbmdlIHJlcXVlc3QuIgorICAoZWdsb3QtLXNl
bXRvay1wdXQtY2FjaGUgOnJlc3BvbnNlIHJlc3BvbnNlKQorICAoY2wtYXNzZXJ0IChwbGlz
dC1nZXQgZWdsb3QtLXNlbXRvay1jYWNoZSA6cmVnaW9uKSkpCisKKyhkZWZ1biBlZ2xvdC0t
c2VtdG9rLWluZ2VzdC1mdWxsLXJlc3BvbnNlIChyZXNwb25zZSkKKyAgIkhhbmRsZSBSRVNQ
T05TRSB0byBzZW1hbnRpY1Rva2Vucy9mdWxsIHJlcXVlc3QuIgorICAoZWdsb3QtLXNlbXRv
ay1wdXQtY2FjaGUgOnJlc3BvbnNlIHJlc3BvbnNlKQorICAoY2wtYXNzZXJ0IChub3QgKHBs
aXN0LWdldCBlZ2xvdC0tc2VtdG9rLWNhY2hlIDpyZWdpb24pKSkpCisKKyhkZWZzdWJzdCBl
Z2xvdC0tc2VtdG9rLWFwcGx5LWRlbHRhLWVkaXRzIChvbGQtZGF0YSBlZGl0cykKKyAgIkFw
cGx5IEVESVRTIG9idGFpbmVkIGZyb20gZnVsbC9kZWx0YSByZXF1ZXN0IHRvIE9MRC1EQVRB
LiIKKyAgKGxldCogKChvbGQtdG9rZW4tY291bnQgKGxlbmd0aCBvbGQtZGF0YSkpCisgICAg
ICAgICAob2xkLXRva2VuLWluZGV4IDApCisgICAgICAgICAoc3Vic3RyaW5ncykpCisgICAg
KGNsLWxvb3AgZm9yIGVkaXQgYWNyb3NzIGVkaXRzIGRvCisgICAgICh3aGVuICg8IG9sZC10
b2tlbi1pbmRleCAocGxpc3QtZ2V0IGVkaXQgOnN0YXJ0KSkKKyAgICAgICAocHVzaCAoc3Vi
c3RyaW5nIG9sZC1kYXRhIG9sZC10b2tlbi1pbmRleCAocGxpc3QtZ2V0IGVkaXQgOnN0YXJ0
KSkgc3Vic3RyaW5ncykpCisgICAgIChwdXNoIChwbGlzdC1nZXQgZWRpdCA6ZGF0YSkgc3Vi
c3RyaW5ncykKKyAgICAgKHNldHEgb2xkLXRva2VuLWluZGV4ICgrIChwbGlzdC1nZXQgZWRp
dCA6c3RhcnQpIChwbGlzdC1nZXQgZWRpdCA6ZGVsZXRlQ291bnQpKSkKKyAgICAgZmluYWxs
eSBkbyAocHVzaCAoc3Vic3RyaW5nIG9sZC1kYXRhIG9sZC10b2tlbi1pbmRleCBvbGQtdG9r
ZW4tY291bnQpIHN1YnN0cmluZ3MpKQorICAgIChhcHBseSAjJ3Zjb25jYXQgKG5yZXZlcnNl
IHN1YnN0cmluZ3MpKSkpCisKKyhkZWZ1biBlZ2xvdC0tc2VtdG9rLWluZ2VzdC1mdWxsL2Rl
bHRhLXJlc3BvbnNlIChyZXNwb25zZSkKKyAgIkhhbmRsZSBSRVNQT05TRSB0byBzZW1hbnRp
Y1Rva2Vucy9mdWxsL2RlbHRhIHJlcXVlc3QuIgorICAoaWYtbGV0KiAoKGVkaXRzIChwbGlz
dC1nZXQgcmVzcG9uc2UgOmVkaXRzKSkpCisgICAgICAocHJvZ24KKyAgICAgICAgKGNsLWFz
c2VydCAobm90IChwbGlzdC1nZXQgZWdsb3QtLXNlbXRvay1jYWNoZSA6cmVnaW9uKSkpCisg
ICAgICAgICh3aGVuLWxldCogKChvbGQtZGF0YSAocGxpc3QtZ2V0IChwbGlzdC1nZXQgZWds
b3QtLXNlbXRvay1jYWNoZSA6cmVzcG9uc2UpIDpkYXRhKSkpCisgICAgICAgICAgKGVnbG90
LS1zZW10b2stcHV0LWNhY2hlCisgICAgICAgICAgIDpyZXNwb25zZQorICAgICAgICAgICAo
cGxpc3QtcHV0IHJlc3BvbnNlIDpkYXRhIChlZ2xvdC0tc2VtdG9rLWFwcGx5LWRlbHRhLWVk
aXRzIG9sZC1kYXRhIGVkaXRzKSkpKSkKKyAgICA7OyBzZXJ2ZXIgZGVjaWRlZCB0byBzZW5k
IGZ1bGwgcmVzcG9uc2UgaW5zdGVhZAorICAgIChlZ2xvdC0tc2VtdG9rLWluZ2VzdC1mdWxs
LXJlc3BvbnNlIHJlc3BvbnNlKSkpCisKKyhkZWZ1biBlZ2xvdC0tc2VtdG9rLXJlcXVlc3Qg
KHJlZ2lvbiAmb3B0aW9uYWwgZm9udGlmeSkKKyAgIlNlbmQgc2VtYW50aWMgdG9rZW5zIHJl
cXVlc3QgdG8gdGhlIGxhbmd1YWdlIHNlcnZlci4KK0EgZnVsbC9kZWx0YSByZXF1ZXN0IHdp
bGwgYmUgc2VudCBpZiBkZWx0YSByZXF1ZXN0cyBhcmUgc3VwcG9ydGVkIGJ5IHRoZQorbGFu
Z3VhZ2Ugc2VydmVyIGFuZCBhIGZ1bGwgc2V0IG9mIHRva2VucyBoYWQgcHJldmlvdXNseSBi
ZWVuIHJlY2VpdmVkLgorT3RoZXJ3aXNlLCBhIHJhbmdlZCByZXF1ZXN0IHdpbGwgYmUgZGlz
cGF0Y2hlZCBpZiBSRUdJT04gaXMgbm9uLW5pbCBhbmQKK3JhbmdlZCByZXF1ZXN0cyBhcmUg
c3VwcG9ydGVkIGJ5IHRoZSBsYW5ndWFnZSBzZXJ2ZXIuIEluIGFsbCBvdGhlcgorY2FzZXMs
IGEgZnVsbCB0b2tlbnMgcmVxdWVzdCB3aWxsIGJlIGRpc3BhdGNoZWQuCisKK0lmIEZPTlRJ
RlkgaXMgbm9uLW5pbCwgcmVmb250aWZ5IGFmdGVyIHRoZSByZXF1ZXN0IGNvbXBsZXRlcy4i
CisgIChsZXQqICgobWV0aG9kIDp0ZXh0RG9jdW1lbnQvc2VtYW50aWNUb2tlbnMvZnVsbCkK
KyAgICAgICAgIChwYXJhbXMgKGxpc3QgOnRleHREb2N1bWVudCAoZWdsb3QtLVRleHREb2N1
bWVudElkZW50aWZpZXIpKSkKKyAgICAgICAgIChyZXNwb25zZS1oYW5kbGVyICMnZWdsb3Qt
LXNlbXRvay1pbmdlc3QtZnVsbC1yZXNwb25zZSkKKyAgICAgICAgIChmaW5hbC1yZWdpb24g
bmlsKQorICAgICAgICAgKGJ1ZiAoY3VycmVudC1idWZmZXIpKSkKKyAgICAoY29uZAorICAg
ICAoKGFuZCAoZWdsb3Qtc2VydmVyLWNhcGFibGUgOnNlbWFudGljVG9rZW5zUHJvdmlkZXIg
OmZ1bGwgOmRlbHRhKQorICAgICAgICAgICAobGV0ICgocmVzcG9uc2UgKHBsaXN0LWdldCBl
Z2xvdC0tc2VtdG9rLWNhY2hlIDpyZXNwb25zZSkpKQorICAgICAgICAgICAgIChhbmQgKHBs
aXN0LWdldCByZXNwb25zZSA6cmVzdWx0SWQpIChwbGlzdC1nZXQgcmVzcG9uc2UgOmRhdGEp
CisgICAgICAgICAgICAgICAgICAobm90IChwbGlzdC1nZXQgZWdsb3QtLXNlbXRvay1jYWNo
ZSA6cmVnaW9uKSkpKSkKKyAgICAgIChzZXRxIG1ldGhvZCA6dGV4dERvY3VtZW50L3NlbWFu
dGljVG9rZW5zL2Z1bGwvZGVsdGEpCisgICAgICAoc2V0cSByZXNwb25zZS1oYW5kbGVyICMn
ZWdsb3QtLXNlbXRvay1pbmdlc3QtZnVsbC9kZWx0YS1yZXNwb25zZSkKKyAgICAgIChzZXRx
IHBhcmFtcworICAgICAgICAgICAgKHBsaXN0LXB1dCBwYXJhbXMgOnByZXZpb3VzUmVzdWx0
SWQKKyAgICAgICAgICAgICAgICAgICAgICAgKHBsaXN0LWdldCAocGxpc3QtZ2V0IGVnbG90
LS1zZW10b2stY2FjaGUgOnJlc3BvbnNlKSA6cmVzdWx0SWQpKSkpCisgICAgICgoYW5kIHJl
Z2lvbiAoZWdsb3Qtc2VydmVyLWNhcGFibGUgOnNlbWFudGljVG9rZW5zUHJvdmlkZXIgOnJh
bmdlKSkKKyAgICAgIChzZXRxIG1ldGhvZCA6dGV4dERvY3VtZW50L3NlbWFudGljVG9rZW5z
L3JhbmdlKQorICAgICAgKHNldHEgZmluYWwtcmVnaW9uIHJlZ2lvbikKKyAgICAgIChzZXRx
IHBhcmFtcworICAgICAgICAgICAgKHBsaXN0LXB1dCBwYXJhbXMgOnJhbmdlIChlZ2xvdC1y
ZWdpb24tcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNh
ciBmaW5hbC1yZWdpb24pIChjZHIgZmluYWwtcmVnaW9uKSkpKQorICAgICAgKHNldHEgcmVz
cG9uc2UtaGFuZGxlciAjJ2VnbG90LS1zZW10b2staW5nZXN0LXJhbmdlLXJlc3BvbnNlKSkp
CisgICAgKGVnbG90LS1hc3luYy1yZXF1ZXN0CisgICAgIChlZ2xvdC0tY3VycmVudC1zZXJ2
ZXItb3ItbG9zZSkgbWV0aG9kIHBhcmFtcworICAgICA6c3VjY2Vzcy1mbgorICAgICAobGFt
YmRhIChyZXNwb25zZSkKKyAgICAgICAoZWdsb3QtLXdoZW4tbGl2ZS1idWZmZXIgYnVmCisg
ICAgICAgICAoZWdsb3QtLXNlbXRvay1wdXQtY2FjaGUgOmRvY3VtZW50VmVyc2lvbiBlZ2xv
dC0tdmVyc2lvbmVkLWlkZW50aWZpZXIpCisgICAgICAgICAoZWdsb3QtLXNlbXRvay1wdXQt
Y2FjaGUgOnJlZ2lvbiBmaW5hbC1yZWdpb24pCisgICAgICAgICAoZnVuY2FsbCByZXNwb25z
ZS1oYW5kbGVyIHJlc3BvbnNlKQorICAgICAgICAgKHdoZW4gZm9udGlmeSAoaml0LWxvY2st
cmVmb250aWZ5IChjYXItc2FmZSByZWdpb24pIChjZHItc2FmZSByZWdpb24pKSkKKyAgICAg
ICAgICh3aGVuIGZpbmFsLXJlZ2lvbiAoZWdsb3QtLXNlbXRvay1yZXF1ZXN0LWZ1bGwtb24t
aWRsZSkpKSkKKyAgICAgOmhpbnQgIydlZ2xvdC0tc2VtdG9rLXJlcXVlc3QpKSkKKworKGRl
ZnVuIGVnbG90LS1zZW10b2stZm9udGlmeSAoYmVnIGVuZCkKKyAgIkFwcGx5IHRoZSBjYWNo
ZWQgc2VtYW50aWMgdG9rZW5zIGZyb20gQkVHIHRvIEVORC4iCisgICh3aXRoLXNsb3RzICgo
bW9kaWZpZXItY2FjaGUgc2VtdG9rLW1vZGlmaWVyLWNhY2hlKQorICAgICAgICAgICAgICAg
KGZhY2VzIHNlbXRvay1mYWNlcykKKyAgICAgICAgICAgICAgIChtb2RpZmllci1mYWNlcyBz
ZW10b2stbW9kaWZpZXItZmFjZXMpKQorICAgICAgKGVnbG90LWN1cnJlbnQtc2VydmVyKQor
ICAgIChjb25kCisgICAgICgobm90IChhbmQgZmFjZXMKKyAgICAgICAgICAgICAgICBlZ2xv
dC0tc2VtdG9rLWNhY2hlCisgICAgICAgICAgICAgICAgKHBsaXN0LWdldCBlZ2xvdC0tc2Vt
dG9rLWNhY2hlIDpyZXNwb25zZSkKKyAgICAgICAgICAgICAgICAoZXEgZWdsb3QtLXZlcnNp
b25lZC1pZGVudGlmaWVyIChwbGlzdC1nZXQgZWdsb3QtLXNlbXRvay1jYWNoZSA6ZG9jdW1l
bnRWZXJzaW9uKSkpKQorICAgICAgKGVnbG90LS1zZW10b2stcmVxdWVzdCAoY29ucyBiZWcg
ZW5kKSB0KSkKKyAgICAgKHQKKyAgICAgIDs7IGlmIHdlJ3JlIHVzaW5nIHRoZSByZXNwb25z
ZSB0byBhIHJhbmdlZCByZXF1ZXN0LCB3ZSdsbCBvbmx5IGJlIGFibGUgdG8gZm9udGlmeSB3
aXRoaW4KKyAgICAgIDs7IHRoYXQgcmFuZ2UgKGFuZCBoZW5jZSBzaG91bGRuJ3QgY2xlYXIg
YW55IGhpZ2hsaWdodHMgb3V0c2lkZSBvZiB0aGF0IHJhbmdlKQorICAgICAgKHdoZW4tbGV0
KiAoKHRva2VuLXJlZ2lvbiAocGxpc3QtZ2V0IGVnbG90LS1zZW10b2stY2FjaGUgOnJlZ2lv
bikpKQorICAgICAgICAocHJvZ24KKyAgICAgICAgICAod2hlbiAob3IgKDwgYmVnIChjYXIg
dG9rZW4tcmVnaW9uKSkKKyAgICAgICAgICAgICAgICAgICAgKD4gZW5kIChjZHIgdG9rZW4t
cmVnaW9uKSkpCisgICAgICAgICAgICA7OyB0cnVuY2F0ZWQhIGNvbnRpbnVlLCBidXQgcmVx
dWVzdCBhZ2FpbgorICAgICAgICAgICAgKGVnbG90LS1zZW10b2stcmVxdWVzdCAoY29ucyBi
ZWcgZW5kKSB0KSkKKyAgICAgICAgICAoc2V0cSBiZWcgKG1heCBiZWcgKGNhciB0b2tlbi1y
ZWdpb24pKSkKKyAgICAgICAgICAoc2V0cSBlbmQgKG1pbiBlbmQgKGNkciB0b2tlbi1yZWdp
b24pKSkpKQorICAgICAgKGVnbG90LS13aWRlbmluZworICAgICAgICAod2l0aC1zaWxlbnQt
bW9kaWZpY2F0aW9ucworICAgICAgICAgIChyZW1vdmUtbGlzdC1vZi10ZXh0LXByb3BlcnRp
ZXMgYmVnIGVuZCAnKGZvbnQtbG9jay1mYWNlKSkKKyAgICAgICAgICAobGV0KiAoKGluaGli
aXQtZmllbGQtdGV4dC1tb3Rpb24gdCkKKyAgICAgICAgICAgICAgICAgKGRhdGEgKHBsaXN0
LWdldCAocGxpc3QtZ2V0IGVnbG90LS1zZW10b2stY2FjaGUgOnJlc3BvbnNlKSA6ZGF0YSkp
CisgICAgICAgICAgICAgICAgIChpLW1heCAobGVuZ3RoIGRhdGEpKQorICAgICAgICAgICAg
ICAgICAoYmVnLWJvbCAoYW5kIChnb3RvLWNoYXIgYmVnKSAobGluZS1iZWdpbm5pbmctcG9z
aXRpb24pKSkKKyAgICAgICAgICAgICAgICAgKHByb3BlcnR5LWJlZykKKyAgICAgICAgICAg
ICAgICAgKHByb3BlcnR5LWVuZCkpCisgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1t
aW4pKQorICAgICAgICAgICAgKGNsLWRvICgoaSAwICgrIGkgNSkpIChjb2x1bW4gMCkpICgo
Pj0gaSBpLW1heCkpCisgICAgICAgICAgICAgICh3aGVuICg+IChhcmVmIGRhdGEgaSkgMCkK
KyAgICAgICAgICAgICAgICAoc2V0cSBjb2x1bW4gMCkKKyAgICAgICAgICAgICAgICAoZm9y
d2FyZC1saW5lIChhcmVmIGRhdGEgaSkpKQorICAgICAgICAgICAgICAodW5sZXNzICg8IChw
b2ludCkgYmVnLWJvbCkKKyAgICAgICAgICAgICAgICAoc2V0cSBjb2x1bW4gKCsgY29sdW1u
IChhcmVmIGRhdGEgKCsgaSAxKSkpKQorICAgICAgICAgICAgICAgIChmdW5jYWxsIGVnbG90
LW1vdmUtdG8tbGluZXBvcy1mdW5jdGlvbiBjb2x1bW4pCisgICAgICAgICAgICAgICAgKHdo
ZW4gKD4gKHBvaW50KSBlbmQpIChjbC1yZXR1cm4pKQorICAgICAgICAgICAgICAgIChzZXRx
IHByb3BlcnR5LWJlZyAocG9pbnQpKQorICAgICAgICAgICAgICAgIChmdW5jYWxsIGVnbG90
LW1vdmUtdG8tbGluZXBvcy1mdW5jdGlvbiAoKyBjb2x1bW4gKGFyZWYgZGF0YSAoKyBpIDIp
KSkpCisgICAgICAgICAgICAgICAgKHNldHEgcHJvcGVydHktZW5kIChwb2ludCkpCisgICAg
ICAgICAgICAgICAgKHdoZW4tbGV0KiAoKGZhY2UgKGFyZWYgZmFjZXMgKGFyZWYgZGF0YSAo
KyBpIDMpKSkpKQorICAgICAgICAgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IHByb3Bl
cnR5LWJlZyBwcm9wZXJ0eS1lbmQgJ2ZvbnQtbG9jay1mYWNlIGZhY2UpKQorICAgICAgICAg
ICAgICAgIChsZXQqICgoY29kZSAoYXJlZiBkYXRhICgrIGkgNCkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAoZmFjZXMgKGdldGhhc2ggY29kZSBtb2RpZmllci1jYWNoZSAnbm90LWZv
dW5kKSkpCisgICAgICAgICAgICAgICAgICAod2hlbiAoZXEgZmFjZXMgJ25vdC1mb3VuZCkK
KyAgICAgICAgICAgICAgICAgICAgKHNldHEgZmFjZXMgbmlsKQorICAgICAgICAgICAgICAg
ICAgICAoY2wtbG9vcCBmb3IgaiBmcm9tIDAgYmVsb3cgKGxlbmd0aCBtb2RpZmllci1mYWNl
cykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKD4gKGxvZ2FuZCBjb2RlIChh
c2ggMSBqKSkgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZWYgbW9k
aWZpZXItZmFjZXMgaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdCAo
YXJlZiBtb2RpZmllci1mYWNlcyBqKSBpbnRvIGZhY2VzKQorICAgICAgICAgICAgICAgICAg
ICAocHV0aGFzaCBjb2RlIGZhY2VzIG1vZGlmaWVyLWNhY2hlKSkKKyAgICAgICAgICAgICAg
ICAgIChkb2xpc3QgKGZhY2UgZmFjZXMpCisgICAgICAgICAgICAgICAgICAgIChwdXQtdGV4
dC1wcm9wZXJ0eSBwcm9wZXJ0eS1iZWcgcHJvcGVydHktZW5kICdmb250LWxvY2stZmFjZSBm
YWNlKSkpKSkpKSkKKyAgICAgIGAoaml0LWxvY2stYm91bmRzICxiZWcgLiAsZW5kKSkpKSkK
KworKGRlZnVuIGVnbG90LS1zZW10b2stcmVxdWVzdC1mdWxsLW9uLWlkbGUgKCkKKyAgIk1h
a2UgYSBmdWxsIHNlbWFudGljIHRva2VucyByZXF1ZXN0IGFmdGVyIGFuIGlkbGUgdGltZXIu
IgorICAobGV0KiAoKGJ1ZiAoY3VycmVudC1idWZmZXIpKQorICAgICAgICAgKGZ1biAobGFt
YmRhICgpCisgICAgICAgICAgICAgICAgKGVnbG90LS13aGVuLWxpdmUtYnVmZmVyIGJ1Zgor
ICAgICAgICAgICAgICAgICAgKGVnbG90LS1zZW10b2stcmVxdWVzdCBuaWwpKSkpKQorICAg
ICh3aGVuIGVnbG90LS1zZW10b2staWRsZS10aW1lciAoY2FuY2VsLXRpbWVyIGVnbG90LS1z
ZW10b2staWRsZS10aW1lcikpCisgICAgKHNldHEgZWdsb3QtLXNlbXRvay1pZGxlLXRpbWVy
IChydW4td2l0aC1pZGxlLXRpbWVyICgqIDMgZWdsb3Qtc2VuZC1jaGFuZ2VzLWlkbGUtdGlt
ZSkgbmlsIGZ1bikpKSkKKworKGRlZnVuIGVnbG90LS1zZW10b2stb24tcmVmcmVzaCAoc2Vy
dmVyKQorICAiQ2xlYXIgc2VtYW50aWMgdG9rZW5zIHdpdGhpbiBhbGwgYnVmZmVycyBvZiBT
RVJWRVIuIgorICAoY2wtbG9vcCBmb3IgYnVmZmVyIGluIChlZ2xvdC0tbWFuYWdlZC1idWZm
ZXJzIHNlcnZlcikgZG8KKyAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVy
CisgICAgICAgICAgICAgKHNldHEgZWdsb3QtLXNlbXRvay1jYWNoZSBuaWwpCisgICAgICAg
ICAgICAgKGppdC1sb2NrLXJlZm9udGlmeSkpKSkKKworKGxldCAoKGRlYm91bmNlLXRpbWVy
IG5pbCkpCisgIChjbC1kZWZtZXRob2QgZWdsb3QtaGFuZGxlLXJlcXVlc3QKKyAgICAoc2Vy
dmVyIChfbWV0aG9kIChlcWwgd29ya3NwYWNlL3NlbWFudGljVG9rZW5zL3JlZnJlc2gpKSkK
KyAgICAiSGFuZGxlIGEgc2VtYW50aWNUb2tlbnMvcmVmcmVzaCByZXF1ZXN0IGZyb20gU0VS
VkVSLiIKKyAgICAod2hlbiBkZWJvdW5jZS10aW1lciAoY2FuY2VsLXRpbWVyIGRlYm91bmNl
LXRpbWVyKSkKKyAgICAoc2V0cSBkZWJvdW5jZS10aW1lciAocnVuLXdpdGgtdGltZXIgNSBu
aWwgIydlZ2xvdC0tc2VtdG9rLW9uLXJlZnJlc2ggc2VydmVyKSkKKyAgICBuaWwpKQorCis7
OyBJbml0aWFsaXphdGlvbgorKGRlZnVuIGVnbG90LS1zZW10b2stYnVpbGQtZmFjZS1tYXAg
KGlkZW50aWZpZXJzIGZhY2VzIGNhdGVnb3J5IHZhcm5hbWUpCisgICJCdWlsZCBtYXAgb2Yg
RkFDRVMgZm9yIElERU5USUZJRVJTIHVzaW5nIENBVEVHT1JZIGFuZCBWQVJOQU1FLiIKKyAg
KHZjb25jYXQKKyAgIChtYXBjYXIgKGxhbWJkYSAoaWQpCisgICAgICAgICAgICAgKGxldCAo
KG1heWJlLWZhY2UgKGNkciAoYXNzb2MgaWQgZmFjZXMpKSkpCisgICAgICAgICAgICAgICAo
d2hlbiAobm90IG1heWJlLWZhY2UpCisgICAgICAgICAgICAgICAgIChkaXNwbGF5LXdhcm5p
bmcKKyAgICAgICAgICAgICAgICAgICdlZ2xvdC1zZW10b2sKKyAgICAgICAgICAgICAgICAg
IChmb3JtYXQtbWVzc2FnZSAiTm8gZmFjZSBoYXMgYmVlbiBhc3NvY2lhdGVkIHRvIHRoZSAl
cyBgJXMnOiBjb25zaWRlciBhZGRpbmcgYSBjb3JyZXNwb25kaW5nIGRlZmluaXRpb24gdG8g
JXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgaWQgdmFy
bmFtZSkpKQorICAgICAgICAgICAgICAgbWF5YmUtZmFjZSkpCisgICAgICAgICAgIGlkZW50
aWZpZXJzKSkpCisKKyhkZWZ1biBlZ2xvdC0tc2VtdG9rLWluaXRpYWxpemUgKHNlcnZlcikK
KyAgIkluaXRpYWxpemUgU0VSVkVSIGZvciBzZW1hbnRpYyB0b2tlbnMuIgorICAoY2wtZGVz
dHJ1Y3R1cmluZy1iaW5kICgma2V5IHRva2VuVHlwZXMgdG9rZW5Nb2RpZmllcnMgJmFsbG93
LW90aGVyLWtleXMpCisgICAgICAocGxpc3QtZ2V0IChwbGlzdC1nZXQgKGVnbG90LS1jYXBh
YmlsaXRpZXMgc2VydmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzZW1hbnRp
Y1Rva2Vuc1Byb3ZpZGVyKQorICAgICAgICAgICAgICAgICA6bGVnZW5kKQorICAgIChvc2V0
IHNlcnZlciBzZW10b2stZmFjZXMKKyAgICAgICAgICAoZWdsb3QtLXNlbXRvay1idWlsZC1m
YWNlLW1hcAorICAgICAgICAgICB0b2tlblR5cGVzIGVnbG90LXNlbWFudGljLXRva2Vucy1m
YWNlcworICAgICAgICAgICAic2VtYW50aWMgdG9rZW4iICJlZ2xvdC0tc2VtdG9rZmFjZXMi
KSkKKyAgICAob3NldCBzZXJ2ZXIgc2VtdG9rLW1vZGlmaWVyLWZhY2VzCisgICAgICAgICAg
KGVnbG90LS1zZW10b2stYnVpbGQtZmFjZS1tYXAKKyAgICAgICAgICAgdG9rZW5Nb2RpZmll
cnMgZWdsb3Qtc2VtYW50aWMtdG9rZW5zLW1vZGlmaWVyLWZhY2VzCisgICAgICAgICAgICJz
ZW1hbnRpYyB0b2tlbiBtb2RpZmllciIgImVnbG90LS1zZW10b2ttb2RpZmllci1mYWNlcyIp
KSkpCisKKyhkZWZpbmUtbWlub3ItbW9kZSBlZ2xvdC1zZW1hbnRpYy10b2tlbnMtbW9kZQor
ICAiTWlub3IgbW9kZSBmb3IgZm9udGlmeWluZyBidWZmZXIgd2l0aCBMU1Agc2VydmVyJ3Mg
c2VtYW50aWMgdG9rZW5zLiIKKyAgOmdsb2JhbCBuaWwKKyAgKGNvbmQgKGVnbG90LXNlbWFu
dGljLXRva2Vucy1tb2RlCisgICAgICAgICAoaWYgKGVnbG90LXNlcnZlci1jYXBhYmxlIDpz
ZW1hbnRpY1Rva2Vuc1Byb3ZpZGVyKQorICAgICAgICAgICAgIChqaXQtbG9jay1yZWdpc3Rl
ciAjJ2VnbG90LS1zZW10b2stZm9udGlmeSAnY29udGV4dHVhbCkKKyAgICAgICAgICAgKGVn
bG90LXNlbWFudGljLXRva2Vucy1tb2RlIC0xKSkpCisgICAgICAgICh0CisgICAgICAgICAo
aml0LWxvY2stdW5yZWdpc3RlciAjJ2VnbG90LS1zZW10b2stZm9udGlmeSkKKyAgICAgICAg
ICh3aXRoLXNpbGVudC1tb2RpZmljYXRpb25zCisgICAgICAgICAgIChyZW1vdmUtbGlzdC1v
Zi10ZXh0LXByb3BlcnRpZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkgJyhmb250LWxvY2st
ZmFjZSkpKSkpKQorCiAMCiA7OzsgQ2FsbCBhbmQgdHlwZSBoaWVyYXJjaGllcwogKHJlcXVp
cmUgJ2J1dHRvbikKQEAgLTQ3MjgsNyArNTAzNiw4IEBAIElmIE5PRVJST1IsIHJldHVybiBw
cmVkaWNhdGUsIGVsc2UgZXJyb3JpbmcgZnVuY3Rpb24uIgogOzsgaGFyZGVyLiBGb3Igbm93
LCB1c2UgYHdpdGgtZXZhbC1hZnRlci1sb2FkJy4gU2VlIGFsc28gZ2l0aHViIzExODMuCiAo
d2l0aC1ldmFsLWFmdGVyLWxvYWQgJ2Rlc2t0b3AKICAgKGFkZC10by1saXN0ICdkZXNrdG9w
LW1pbm9yLW1vZGUtaGFuZGxlcnMgJyhlZ2xvdC0tbWFuYWdlZC1tb2RlIC4gaWdub3JlKSkK
LSAgKGFkZC10by1saXN0ICdkZXNrdG9wLW1pbm9yLW1vZGUtaGFuZGxlcnMgJyhlZ2xvdC1p
bmxheS1oaW50cy1tb2RlIC4gaWdub3JlKSkpCisgIChhZGQtdG8tbGlzdCAnZGVza3RvcC1t
aW5vci1tb2RlLWhhbmRsZXJzICcoZWdsb3QtaW5sYXktaGludHMtbW9kZSAuIGlnbm9yZSkp
CisgIChhZGQtdG8tbGlzdCAnZGVza3RvcC1taW5vci1tb2RlLWhhbmRsZXJzICcoZWdsb3Qt
c2VtYW50aWMtdG9rZW5zLW1vZGUgLiBpZ25vcmUpKSkKIAogDAogOzs7IE1pc2MKQEAgLTQ3
NTcsNiArNTA2Niw3IEBAIElmIE5PRVJST1IsIHJldHVybiBwcmVkaWNhdGUsIGVsc2UgZXJy
b3JpbmcgZnVuY3Rpb24uIgogICAgICAgICAgICAgICAgZWdsb3QtZm9ybWF0CiAgICAgICAg
ICAgICAgICBlZ2xvdC1mb3JtYXQtYnVmZmVyCiAgICAgICAgICAgICAgICBlZ2xvdC1pbmxh
eS1oaW50cy1tb2RlCisgICAgICAgICAgICAgICBlZ2xvdC1zZW1hbnRpYy10b2tlbnMtbW9k
ZQogICAgICAgICAgICAgICAgZWdsb3QtcmVjb25uZWN0CiAgICAgICAgICAgICAgICBlZ2xv
dC1yZW5hbWUKICAgICAgICAgICAgICAgIGVnbG90LXNpZ25hbC1kaWRDaGFuZ2VDb25maWd1
cmF0aW9uCi0tIAoyLjUxLjAKCg==
--------------inAXX13i0ODSZQVny1l1Heua--
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.
Received: (at 79374) by debbugs.gnu.org; 3 Sep 2025 08:01:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 03 04:01:28 2025
Received: from localhost ([127.0.0.1]:38399 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1utiQp-0007rQ-Os
for submit <at> debbugs.gnu.org; Wed, 03 Sep 2025 04:01:28 -0400
Received: from mout01.posteo.de ([185.67.36.65]:47515)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <philipk@HIDDEN>)
id 1utiQn-0007rA-4m
for 79374 <at> debbugs.gnu.org; Wed, 03 Sep 2025 04:01:26 -0400
Received: from submission (posteo.de [185.67.36.169])
by mout01.posteo.de (Postfix) with ESMTPS id 50F87240028
for <79374 <at> debbugs.gnu.org>; Wed, 3 Sep 2025 10:01:18 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.net; s=2017;
t=1756886478; bh=LTlgDZEuo9ngMOZobm+TSiDQrdSAqYUNV3zcoQDguzo=;
h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type:
From;
b=eJfQJg9iZg9imNZO4CzBoj9APBiZcksF5Qk9zmXRujVm3r2e9i1QlOMidEclO+O6U
pKWiCV+MNRnvzUWo3TiPgGwbPhXJQfFo/1fF4XlKB6yAR6/bUehuAplUWp6FLMtPOY
B+WuFNqU/spmqhIKFlYWR7CGs8I/olv8z4ozTmmt0GMuKwguVT3XXhYOhGWT0PIUBX
i6/65MzMmEsM+KwiMpWyobDmQjC2N+KhwYNLXtTqVO/aLEuGnZIRLkYxpjUEHCz3dK
ZW/s3LEWwcxvwgA91+TQZpEe+NTTH6I3JLX8lGSwv2b21/S0F0H8fLrE6qs3Qj/Tz7
EppG5YLlJvTyA==
Received: from customer (localhost [127.0.0.1])
by submission (posteo.de) with ESMTPSA id 4cGw6P4cQ3z6tx5;
Wed, 3 Sep 2025 10:01:17 +0200 (CEST)
From: Philip Kaludercic <philipk@HIDDEN>
To: "Lua V. R." <me@HIDDEN>
Subject: Re: bug#79374: [PATCH] eglot: add support for semantic tokens
In-Reply-To: <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN>
References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN>
<2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN>
Date: Wed, 03 Sep 2025 08:01:18 +0000
Message-ID: <87ecsoc6cz.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 79374
Cc: 79374 <at> debbugs.gnu.org,
=?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)
"Lua V. R." <me@HIDDEN> writes:
[...]
> +(define-minor-mode eglot-semantic-tokens-mode
> + "Minor mode for fontifying buffer with LSP server's semantic tokens."
> + :global nil
> + (cond (eglot-semantic-tokens-mode
> + (if (eglot-server-capable :semanticTokensProvider)
> + (jit-lock-register #'eglot--semtok-fontify 'contextual)
> + (eglot-semantic-tokens-mode -1)))
> + (t
> + (jit-lock-unregister #'eglot--semtok-fontify)
> + (with-silent-modifications
> + (remove-list-of-text-properties (point-min) (point-max) '(font-lock-face))))))
> +
>
> ;;; Call and type hierarchies
> (require 'button)
> @@ -4728,7 +5048,8 @@ If NOERROR, return predicate, else erroring function."
> ;; harder. For now, use `with-eval-after-load'. See also github#1183.
> (with-eval-after-load 'desktop
> (add-to-list 'desktop-minor-mode-handlers '(eglot--managed-mode . ignore))
> - (add-to-list 'desktop-minor-mode-handlers '(eglot-inlay-hints-mode . ignore)))
> + (add-to-list 'desktop-minor-mode-handlers '(eglot-inlay-hints-mode . ignore))
> + (add-to-list 'desktop-minor-mode-handlers '(eglot-semtok-mode . ignore)))
^
As mentioned on Emacs-devel, shouldn't this be `eglot-semantic-tokens-mode'.
(Also, this is of course not a detailed review I just skimmed over the
code this morning, but for the most part it looks good!)
[...]
--
Philip Kaludercic
bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.
Received: (at submit) by debbugs.gnu.org; 3 Sep 2025 00:42:27 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 02 20:42:27 2025
Received: from localhost ([127.0.0.1]:37287 helo=debbugs.gnu.org)
by debbugs.gnu.org with esmtp (Exim 4.84_2)
(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
id 1utbZu-0007Wq-KO
for submit <at> debbugs.gnu.org; Tue, 02 Sep 2025 20:42:27 -0400
Received: from lists.gnu.org ([2001:470:142::17]:52658)
by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.84_2) (envelope-from <me@HIDDEN>) id 1utaH6-0003DA-4W
for submit <at> debbugs.gnu.org; Tue, 02 Sep 2025 19:18:53 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10])
by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <me@HIDDEN>) id 1utaH0-00041C-20
for bug-gnu-emacs@HIDDEN; Tue, 02 Sep 2025 19:18:46 -0400
Received: from cyan.elm.relay.mailchannels.net ([23.83.212.47])
by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
(Exim 4.90_1) (envelope-from <me@HIDDEN>) id 1utaGw-00073d-Fl
for bug-gnu-emacs@HIDDEN; Tue, 02 Sep 2025 19:18:45 -0400
X-Sender-Id: hostingeremailsmtpin|x-authuser|lua@HIDDEN
Received: from relay.mailchannels.net (localhost [127.0.0.1])
by relay.mailchannels.net (Postfix) with ESMTP id D27191A4CEC;
Tue, 2 Sep 2025 23:18:38 +0000 (UTC)
Received: from fr-int-smtpout13.hostinger.io
(trex-blue-0.trex.outbound.svc.cluster.local [100.105.11.154])
(Authenticated sender: hostingeremailsmtpin)
by relay.mailchannels.net (Postfix) with ESMTPA id DB8FF1A4D4D;
Tue, 2 Sep 2025 23:18:37 +0000 (UTC)
ARC-Seal: i=1; s=arc-2022; d=mailchannels.net; t=1756855118; a=rsa-sha256;
cv=none;
b=hZnBfCUmnFA9mllLSxk8xB/mH1ragEwDlynxNEe0KTG+4jt+iQJUG6pGSwOQ99P2SI14nJ
WQ7GTEd5lwX/DeNsVyqdHUNEH83wSvTE2ZhYSC1ud5smfewpS+NycbAU+CxWLJwbPN6ovR
Eg7UrN2q30GsZKGCNgJf02Rq4am9vuEiiD3gFLnbqeZKPXTD4R+vlPPxXxbbhbtAhbQ2OV
5tD2E2o2RrS2rG/dVNR+YxSG8N2wFbickEWDeC97/7VQK0EQP4nF554vmqhyDdLYdRo6hG
ExgZl3OUNliveA0uKhzsBXkfeCfi7tlB8FZSCDmvQpPAlcRurDNaRdoKZjNapw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed;
d=mailchannels.net; s=arc-2022; t=1756855118;
h=from:from:reply-to:reply-to:subject:subject:date:date:
message-id:message-id:to:to:cc:cc:mime-version:mime-version:
content-type:content-type:in-reply-to:in-reply-to:
references:references:dkim-signature;
bh=of1kYdQv3vHuixldY1+zJReEbTpqeXYwZ3wbCccRpK4=;
b=RpVl+PrkTqSYqAmKTsVmfq4SOOlHhRrM2N0MJEA0l6FI7glJuxMoU07gF2y5QOiydDBAom
n6Iy8naDhXLUcczWPf9MkuHAL17ZHh4CpLGHW2m5LcEiX60zQGoO3MbVgkWzOq1VHRndZE
KqHuW7nEqe/YYzIMQ1OffWpNPG7d8grderupHFVQET3VY6zSMjOuENRNOn8zEVo82ZG/Qb
7uOGA1qHqW5iVt+JqgIs3/LDzRbnH9TmdkEvKGBBv+kI7BoIZ4eJEpKe0JeZMmWkvWOLhJ
IPEd936n+u5tno0NvJ9tYYJrzFzH17yFiIlOwJ0XJSOUp3/DrjTnqJIT8K0wFA==
ARC-Authentication-Results: i=1; rspamd-77486b5f64-ldpv4;
auth=pass smtp.auth=hostingeremailsmtpin smtp.mailfrom=me@HIDDEN
X-Sender-Id: hostingeremailsmtpin|x-authuser|lua@HIDDEN
X-MC-Relay: Neutral
X-MailChannels-SenderId: hostingeremailsmtpin|x-authuser|lua@HIDDEN
X-MailChannels-Auth-Id: hostingeremailsmtpin
X-Glossy-Tank: 4fede0492a5fa425_1756855118692_3993190086
X-MC-Loop-Signature: 1756855118692:1911019864
X-MC-Ingress-Time: 1756855118691
Received: from fr-int-smtpout13.hostinger.io ([UNAVAILABLE]. [148.222.54.40])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384)
by 100.105.11.154 (trex/7.1.3); Tue, 02 Sep 2025 23:18:38 +0000
Received: from [IPV6:2804:14d:8084:a662::5cb8] (unknown
[IPv6:2804:14d:8084:a662::5cb8])
(Authenticated sender: lua@HIDDEN)
by smtp.hostinger.com (smtp.hostinger.com) with ESMTPSA id 4cGhWH4Xkjz10pb;
Tue, 2 Sep 2025 23:18:35 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lua.blog.br;
s=hostingermail-a; t=1756855116;
h=from:from:reply-to:reply-to:subject:subject:date:date:
message-id:message-id:to:to:cc:cc:mime-version:mime-version:
content-type:content-type:in-reply-to:in-reply-to: references:references;
bh=of1kYdQv3vHuixldY1+zJReEbTpqeXYwZ3wbCccRpK4=;
b=LYuP3G2Te7H5RnMRKhiYfIcBKeSD3p6sUC7ztPM2mwOkNRChoxpBWewRtoW5KagejXFKpF
6Ox6VjPgUv/7gwOru9uBRJmVPvqsprPDWKG8pVrNks4BZ8amaGywnM4rPXNMz2oCrwFsUP
Vu7pB3//eKwsTpPHGJe1NGh9q9dzBtl5jLrY1yxGMu/ofG0bSlUe8s7obrwEs0iYXwoeX6
Nf6R+1FN+lqqf6h5gFS0YoIbWyULqlm7qPWGEqZCZPBarZ7q+oR6V5gQaZTqpOcmE9H7bW
EJu3WHofu2Mk9fCyMz/1N0q7dyXAhex816wR/2rAvuA2V/MUsb4rBy6nFQYJPA==
Content-Type: multipart/mixed; boundary="------------g0J6nJdLcckbJYpGJXcUemsd"
Message-ID: <2c03b490-5006-4ad4-a090-fafc8a18405d@HIDDEN>
MIME-Version: 1.0
User-Agent: Betterbird (Linux)
Subject: [PATCH] eglot: add support for semantic tokens
Content-Language: en-US, pt-BR
References: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN>
To: bug-gnu-emacs@HIDDEN
From: "Lua V. R." <me@HIDDEN>
In-Reply-To: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN>
X-Forwarded-Message-Id: <acb441dc-b748-43e3-ab26-56683e616590@HIDDEN>
Date: Tue, 2 Sep 2025 23:18:35 +0000 (UTC)
X-CM-Envelope: MS4xfCNCCU9iYzy4MelGm5bmqbPgBODhh7agFf87FP3WmczaDQoWu/hCFtdUltbKtJ5QjLE1V/DPBgWTid2x35DOb/VTL3ouc56K5zVLHoBCz3l6VUAIjFEx
M00b/z2iTiK1le3nh3JTWQbopEQ5TZb6WzmzM+qTL922Nd4IBcB57tH8p6EitgoqlqBK07Im8Uwoe1+FK9lmIuB7ISB1MDagV5N8luIZ8WasUAtvK8ZFBT4O
vuwukMXby4yFXRapEcnVRyCteb142xI0AVNrRhD9x+4=
X-CM-Analysis: v=2.4 cv=DJTd4DNb c=1 sm=1 tr=0 ts=68b77b4c
a=VfClAEUqrXadIs2MVknt0w==:617 a=xqWC_Br6kY4A:10 a=r77TgQKjGQsHNAKrUKIA:9
a=mDV3o1hIAAAA:8 a=pGLkceISAAAA:8 a=9oc3-6I5A5mP93_st9YA:9 a=3ZKOabzyN94A:10
a=QEXdDO2ut3YA:10 a=ufS1wz06LVvryDGfax4A:9 a=B2y7HmGcmWMA:10
X-AuthUser: lua@HIDDEN
Received-SPF: pass client-ip=23.83.212.47; envelope-from=me@HIDDEN;
helo=cyan.elm.relay.mailchannels.net
X-Spam_score_int: 13
X-Spam_score: 1.3
X-Spam_bar: +
X-Spam_report: (1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001,
RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335,
RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,
SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 4.5 (++++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
has NOT identified this incoming email as spam. The original
message has been attached to this so you can view it or label
similar future email. If you have any questions, see
the administrator of that system for details.
Content preview: Oops. I guess I should have sent it to bug-gnu-emacs, so I'm
forwarding that. -------- Mensagem encaminhada -------- Assunto: [PATCH]
eglot: add support for semantic tokens Data: Tue, 2 Sep 2025 19:29:40 -0300
De: Lua V. R. <me@HIDDEN> Responder a: me@HIDDEN Para: ema [...]
Content analysis details: (4.5 points, 10.0 required)
pts rule name description
---- ---------------------- --------------------------------------------------
3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS
[2804:14d:8084:a662:0:0:0:5cb8 listed in] [zen.spamhaus.org]
-0.0 SPF_HELO_PASS SPF: HELO matches SPF record
1.0 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail)
-0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/,
no trust [2001:470:142:0:0:0:0:17 listed in] [list.dnswl.org]
X-Debbugs-Envelope-To: submit
X-Mailman-Approved-At: Tue, 02 Sep 2025 20:42:19 -0400
Cc: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>,
<mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Reply-To: me@HIDDEN
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 3.5 (+++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
has NOT identified this incoming email as spam. The original
message has been attached to this so you can view it or label
similar future email. If you have any questions, see
the administrator of that system for details.
Content preview: Oops. I guess I should have sent it to bug-gnu-emacs, so I'm
forwarding that. -------- Mensagem encaminhada -------- Assunto: [PATCH]
eglot: add support for semantic tokens Data: Tue, 2 Sep 2025 19:29:40 -0300
De: Lua V. R. <me@HIDDEN> Responder a: me@HIDDEN Para: ema [...]
Content analysis details: (3.5 points, 10.0 required)
pts rule name description
---- ---------------------- --------------------------------------------------
3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS
[2804:14d:8084:a662:0:0:0:5cb8 listed in]
[zen.spamhaus.org]
-0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/,
no trust
[2001:470:142:0:0:0:0:17 listed in]
[list.dnswl.org]
-0.0 SPF_HELO_PASS SPF: HELO matches SPF record
1.0 SPF_SOFTFAIL SPF: sender does not match SPF record (softfail)
-1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list
manager
This is a multi-part message in MIME format.
--------------g0J6nJdLcckbJYpGJXcUemsd
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Oops. I guess I should have sent it to bug-gnu-emacs, so I'm forwarding
that.
-------- Mensagem encaminhada --------
Assunto: [PATCH] eglot: add support for semantic tokens
Data: Tue, 2 Sep 2025 19:29:40 -0300
De: Lua V. R. <me@HIDDEN>
Responder a: me@HIDDEN
Para: emacs-devel@HIDDEN
CC: João Távora <joaotavora@HIDDEN>
Hi all,
Here is my attempt at a patch for the semantic tokens (yesterday I
proposed it as a nongnu package). I had the feeling that I was mentally
involved with it to the point that if I did not work on it this
afternoon, I would probably put it aside and not have the energy to go
back to it later.
As I said, overall it's based on the lsp-mode implementation, but at
this point everything has been rewritten, including the
eglot--semtok-fontify function. Please let me know if there would still
be a problem with that.
Now that there is a patch, I /will/ put this aside for other priorities,
so please understand if I'm slow to respond :)
kind regards,
Lua
--------------g0J6nJdLcckbJYpGJXcUemsd
Content-Type: text/x-patch; charset=UTF-8;
name="0001-add-semantic-tokens-support-for-eglot.patch"
Content-Disposition: attachment;
filename="0001-add-semantic-tokens-support-for-eglot.patch"
Content-Transfer-Encoding: base64
RnJvbSAyMjAyYzY3MjMwOTgyZmY0N2Q3NmU5ZGE5ZDYzYjZlYmZkMGVkYTk3IE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBMdWEgVmlhbmEgUmVpcyA8bWVAbHVhLmJsb2cuYnI+
CkRhdGU6IFR1ZSwgMiBTZXAgMjAyNSAxOTowMzo1MiAtMDMwMApTdWJqZWN0OiBbUEFUQ0hd
IGFkZCBzZW1hbnRpYyB0b2tlbnMgc3VwcG9ydCBmb3IgZWdsb3QKCi0tLQogbGlzcC9wcm9n
bW9kZXMvZWdsb3QuZWwgfCAzMjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDMyNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21vZGVzL2VnbG90LmVsIGIvbGlzcC9wcm9n
bW9kZXMvZWdsb3QuZWwKaW5kZXggNDc1YjVlMTNmMS4uN2RkYzhiMGI1ZSAxMDA2NDQKLS0t
IGEvbGlzcC9wcm9nbW9kZXMvZWdsb3QuZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvZWdsb3Qu
ZWwKQEAgLTE0MSw2ICsxNDEsOCBAQAogKGRlZnZhciBjb21wYW55LXRvb2x0aXAtYWxpZ24t
YW5ub3RhdGlvbnMpCiAoZGVmdmFyIHRyYW1wLXNzaC1jb250cm9sbWFzdGVyLW9wdGlvbnMp
CiAoZGVmdmFyIHRyYW1wLXVzZS1zc2gtY29udHJvbG1hc3Rlci1vcHRpb25zKQorKGRlZnZh
ciBlZ2xvdC1zZW1hbnRpYy10b2tlbnMtZmFjZXMpCisoZGVmdmFyIGVnbG90LXNlbWFudGlj
LXRva2Vucy1tb2RpZmllci1mYWNlcykKIAogDAogOzs7IE9ic29sZXRlIGFsaWFzZXMKQEAg
LTEwMTcsNiArMTAxOSw3IEBAIG9iamVjdC4iCiAgICAgICAgICAgICAgICAgICAgICAgICBg
KDpkeW5hbWljUmVnaXN0cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICwoaWYg
KGVnbG90LS10cmFtcGlzaC1wIHMpIDpqc29uLWZhbHNlIHQpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgOnN5bWJvbCBgKDpkeW5hbWljUmVnaXN0cmF0aW9uIDpqc29uLWZhbHNlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgOnNlbWFudGljVG9rZW5zICcoOnJlZnJlc2hTdXBw
b3J0IHQpCiAgICAgICAgICAgICAgICAgICAgICAgICA6Y29uZmlndXJhdGlvbiB0CiAgICAg
ICAgICAgICAgICAgICAgICAgICA6d29ya3NwYWNlRm9sZGVycyB0KQogICAgICAgICAgICAg
OnRleHREb2N1bWVudApAQCAtMTA3OSw2ICsxMDgyLDEzIEBAIG9iamVjdC4iCiAgICAgICAg
ICAgICAgOmZvcm1hdHRpbmcgICAgICAgICBgKDpkeW5hbWljUmVnaXN0cmF0aW9uIDpqc29u
LWZhbHNlKQogICAgICAgICAgICAgIDpyYW5nZUZvcm1hdHRpbmcgICAgYCg6ZHluYW1pY1Jl
Z2lzdHJhdGlvbiA6anNvbi1mYWxzZSkKICAgICAgICAgICAgICA6cmVuYW1lICAgICAgICAg
ICAgIGAoOmR5bmFtaWNSZWdpc3RyYXRpb24gOmpzb24tZmFsc2UpCisgICAgICAgICAgICAg
OnNlbWFudGljVG9rZW5zICAgICBgKDpkeW5hbWljUmVnaXN0cmF0aW9uIDpqc29uLWZhbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpyZXF1ZXN0cyAnKDpyYW5n
ZSB0IDpmdWxsIHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0b2tl
bk1vZGlmaWVycyBbLEAobWFwY2FyICMnY2FyIGVnbG90LXNlbWFudGljLXRva2Vucy1tb2Rp
Zmllci1mYWNlcyldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpvdmVy
bGFwcGluZ1Rva2VuU3VwcG9ydCB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDptdWx0aWxpbmVUb2tlblN1cHBvcnQgdAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6dG9rZW5UeXBlcyBbLEAobWFwY2FyICMnY2FyIGVnbG90LXNlbWFudGlj
LXRva2Vucy1mYWNlcyldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpm
b3JtYXRzIFsicmVsYXRpdmUiXSkKICAgICAgICAgICAgICA6aW5sYXlIaW50ICAgICAgICAg
IGAoOmR5bmFtaWNSZWdpc3RyYXRpb24gOmpzb24tZmFsc2UpCiAgICAgICAgICAgICAgOmNh
bGxIaWVyYXJjaHkgICAgICBgKDpkeW5hbWljUmVnaXN0cmF0aW9uIDpqc29uLWZhbHNlKQog
ICAgICAgICAgICAgIDp0eXBlSGllcmFyY2h5ICAgICAgYCg6ZHluYW1pY1JlZ2lzdHJhdGlv
biA6anNvbi1mYWxzZSkKQEAgLTExNDksNyArMTE1OSwxNiBAQCBvYmplY3QuIgogICAgIDph
Y2Nlc3NvciBlZ2xvdC0tbWFuYWdlZC1idWZmZXJzKQogICAgKHNhdmVkLWluaXRhcmdzCiAg
ICAgOmRvY3VtZW50YXRpb24gIlNhdmVkIGluaXRhcmdzIGZvciByZWNvbm5lY3Rpb24gcHVy
cG9zZXMuIgotICAgIDphY2Nlc3NvciBlZ2xvdC0tc2F2ZWQtaW5pdGFyZ3MpKQorICAgIDph
Y2Nlc3NvciBlZ2xvdC0tc2F2ZWQtaW5pdGFyZ3MpCisgICAoc2VtdG9rLWZhY2VzCisgICAg
OmluaXRmb3JtIG5pbAorICAgIDpkb2N1bWVudGF0aW9uICJTZW1hbnRpYyB0b2tlbnMgZmFj
ZXMuIikKKyAgIChzZW10b2stbW9kaWZpZXItZmFjZXMKKyAgICA6aW5pdGZvcm0gbmlsCisg
ICAgOmRvY3VtZW50YXRpb24gIlNlbWFudGljIHRva2VucyBtb2RpZmllciBmYWNlcy4iKQor
ICAgKHNlbXRvay1tb2RpZmllci1jYWNoZQorICAgIDppbml0Zm9ybSAobWFrZS1oYXNoLXRh
YmxlKQorICAgIDpkb2N1bWVudGF0aW9uICJBIGhhc2htYXAgb2YgbW9kaWZpZXIgdmFsdWVz
IHRvIHRoZSBzZWxlY3RlZCBmYWNlcy4iKSkKICAgOmRvY3VtZW50YXRpb24KICAgIlJlcHJl
c2VudHMgYSBzZXJ2ZXIuIFdyYXBzIGEgcHJvY2VzcyBmb3IgTFNQIGNvbW11bmljYXRpb24u
IikKIApAQCAtMTIxMSw2ICsxMjMwLDExIEBAIElmIG9wdGlvbmFsIE1BUktFUlMsIG1ha2Ug
bWFya2VycyBpbnN0ZWFkLiIKICAgICAgICAgIChlbmQgKGVnbG90LS1sc3AtcG9zaXRpb24t
dG8tcG9pbnQgKHBsaXN0LWdldCByYW5nZSA6ZW5kKSBtYXJrZXJzKSkpCiAgICAgKGNvbnMg
YmVnIGVuZCkpKQogCisoZGVmdW4gZWdsb3QtcmVnaW9uLXJhbmdlIChiZWcgZW5kKQorICAi
UmV0dXJuIGEgTFNQIHJhbmdlIHJlcHJlc2VudGluZyByZWdpb24gQkVHIHRvIEVORC4iCisg
IChsaXN0IDpzdGFydCAoZWdsb3QtLXBvcy10by1sc3AtcG9zaXRpb24gYmVnKQorICAgICAg
ICA6ZW5kIChlZ2xvdC0tcG9zLXRvLWxzcC1wb3NpdGlvbiBlbmQpKSkKKwogKGRlZnVuIGVn
bG90LXNlcnZlci1jYXBhYmxlICgmcmVzdCBmZWF0cykKICAgIkRldGVybWluZSBpZiBjdXJy
ZW50IHNlcnZlciBpcyBjYXBhYmxlIG9mIEZFQVRTLiIKICAgKHVubGVzcyAoY2wtc29tZSAo
bGFtYmRhIChmZWF0KQpAQCAtMTU3Niw3ICsxNjAwLDggQEAgVXNlIGN1cnJlbnQgc2VydmVy
J3Mgb3IgZmlyc3QgYXZhaWxhYmxlIEVnbG90IGV2ZW50cyBidWZmZXIuIgogICAoanNvbnJw
Yy1mb3JnZXQtcGVuZGluZy1jb250aW51YXRpb25zIHNlcnZlcikpCiAKIChkZWZ2YXIgZWds
b3QtY29ubmVjdC1ob29rCi0gICcoZWdsb3Qtc2lnbmFsLWRpZENoYW5nZUNvbmZpZ3VyYXRp
b24pCisgICcoZWdsb3Qtc2lnbmFsLWRpZENoYW5nZUNvbmZpZ3VyYXRpb24KKyAgICBlZ2xv
dC0tc2VtdG9rLWluaXRpYWxpemUpCiAgICJIb29rIHJ1biBhZnRlciBjb25uZWN0aW5nIHRv
IGEgc2VydmVyLgogRWFjaCBmdW5jdGlvbiBpcyBwYXNzZWQgYW4gYGVnbG90LWxzcC1zZXJ2
ZXInIGluc3RhbmNlCiBhcyBhcmd1bWVudC4iKQpAQCAtMjI5MSw2ICsyMzE2LDcgQEAgSWYg
aXQgaXMgYWN0aXZhdGVkLCBhbHNvIHNpZ25hbCB0ZXh0RG9jdW1lbnQvZGlkT3Blbi4iCiAg
ICAgICA7OyBSdW4gdXNlciBob29rIGFmdGVyICd0ZXh0RG9jdW1lbnQvZGlkT3Blbicgc28g
c2VydmVyIGtub3dzCiAgICAgICA7OyBhYm91dCB0aGUgYnVmZmVyLgogICAgICAgKGVnbG90
LWlubGF5LWhpbnRzLW1vZGUgMSkKKyAgICAgIChlZ2xvdC1zZW1hbnRpYy10b2tlbnMtbW9k
ZSAxKQogICAgICAgKHJ1bi1ob29rcyAnZWdsb3QtbWFuYWdlZC1tb2RlLWhvb2spKSkpCiAK
IChhZGQtaG9vayAnYWZ0ZXItY2hhbmdlLW1ham9yLW1vZGUtaG9vayAjJ2VnbG90LS1tYXli
ZS1hY3RpdmF0ZS1lZGl0aW5nLW1vZGUpCkBAIC00NDk0LDYgKzQ1MjAsMzAwIEBAIElmIE5P
RVJST1IsIHJldHVybiBwcmVkaWNhdGUsIGVsc2UgZXJyb3JpbmcgZnVuY3Rpb24uIgogICAg
ICAgICAgKGppdC1sb2NrLXVucmVnaXN0ZXIgIydlZ2xvdC0tdXBkYXRlLWhpbnRzKQogICAg
ICAgICAgKHJlbW92ZS1vdmVybGF5cyBuaWwgbmlsICdlZ2xvdC0taW5sYXktaGludCB0KSkp
KQogCisMCis7OzsgU2VtYW50aWMgdG9rZW5zCisKKyhkZWZjdXN0b20gZWdsb3Qtc2VtYW50
aWMtdG9rZW5zLWZhY2VzCisgICcoKCJuYW1lc3BhY2UiIC4gZm9udC1sb2NrLWtleXdvcmQt
ZmFjZSkKKyAgICAoInR5cGUiIC4gZm9udC1sb2NrLXR5cGUtZmFjZSkKKyAgICAoImNsYXNz
IiAuIGZvbnQtbG9jay10eXBlLWZhY2UpCisgICAgKCJlbnVtIiAuIGZvbnQtbG9jay10eXBl
LWZhY2UpCisgICAgKCJpbnRlcmZhY2UiIC4gZm9udC1sb2NrLXR5cGUtZmFjZSkKKyAgICAo
InN0cnVjdCIgLiBmb250LWxvY2stdHlwZS1mYWNlKQorICAgICgidHlwZVBhcmFtZXRlciIg
LiBmb250LWxvY2stdHlwZS1mYWNlKQorICAgICgicGFyYW1ldGVyIiAuIGZvbnQtbG9jay12
YXJpYWJsZS1uYW1lLWZhY2UpCisgICAgKCJ2YXJpYWJsZSIgLiBmb250LWxvY2stdmFyaWFi
bGUtbmFtZS1mYWNlKQorICAgICgicHJvcGVydHkiIC4gZm9udC1sb2NrLXByb3BlcnR5LXVz
ZS1mYWNlKQorICAgICgiZW51bU1lbWJlciIgLiBmb250LWxvY2stY29uc3RhbnQtZmFjZSkK
KyAgICAoImV2ZW50IiAuIGZvbnQtbG9jay12YXJpYWJsZS1uYW1lLWZhY2UpCisgICAgKCJm
dW5jdGlvbiIgLiBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1mYWNlKQorICAgICgibWV0aG9k
IiAuIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpCisgICAgKCJtYWNybyIgLiBmb250
LWxvY2stcHJlcHJvY2Vzc29yLWZhY2UpCisgICAgKCJrZXl3b3JkIiAuIGZvbnQtbG9jay1r
ZXl3b3JkLWZhY2UpCisgICAgKCJtb2RpZmllciIgLiBmb250LWxvY2stZnVuY3Rpb24tbmFt
ZS1mYWNlKQorICAgICgiY29tbWVudCIgLiBmb250LWxvY2stY29tbWVudC1mYWNlKQorICAg
ICgic3RyaW5nIiAuIGZvbnQtbG9jay1zdHJpbmctZmFjZSkKKyAgICAoIm51bWJlciIgLiBm
b250LWxvY2stY29uc3RhbnQtZmFjZSkKKyAgICAoInJlZ2V4cCIgLiBmb250LWxvY2stc3Ry
aW5nLWZhY2UpCisgICAgKCJvcGVyYXRvciIgLiBmb250LWxvY2stZnVuY3Rpb24tbmFtZS1m
YWNlKQorICAgICgiZGVjb3JhdG9yIiAuIGZvbnQtbG9jay10eXBlLWZhY2UpKQorICAiQWxp
c3Qgb2YgZmFjZXMgdG8gdXNlIHRvIGhpZ2hsaWdodCBzZW1hbnRpYyB0b2tlbnMuCitFYWNo
IGVsZW1lbnQgaXMgYSBjb25zIGNlbGwgd2hvc2UgY2FyIGlzIGEgdG9rZW4gdHlwZSBuYW1l
IGFuZCBjZHIgaXMKK3RoZSBmYWNlIHRvIHVzZS4iCisgIDp0eXBlIGAoYWxpc3QgOmtleS10
eXBlIChzdHJpbmcgOnRhZyAiVG9rZW4gbmFtZSIpCisgICAgICAgICAgICAgICAgOnZhbHVl
LXR5cGUgKGNob2ljZSAoZmFjZSA6dGFnICJGYWNlIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChwbGlzdCA6dGFnICJGYWNlIEF0dHJpYnV0ZXMiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleS10eXBlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNob2ljZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsQChtYXBjYXIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoY2VsbCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgKGNv
bnN0IDp0YWcgLChjYXBpdGFsaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkciBjZWxsKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwoY2Fy
IGNlbGwpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmFjZS1hdHRyaWJ1dGUtbmFtZS1hbGlzdCkpKSkpKQorCisoZGVmY3VzdG9tIGVnbG90
LXNlbWFudGljLXRva2Vucy1tb2RpZmllci1mYWNlcworICAnKCgiZGVjbGFyYXRpb24iIC4g
Zm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkKKyAgICAoImRlZmluaXRpb24iIC4gZm9u
dC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkKKyAgICAoInJlYWRvbmx5IiAuIGZvbnQtbG9j
ay1jb25zdGFudC1mYWNlKQorICAgICgic3RhdGljIiAuIGZvbnQtbG9jay1rZXl3b3JkLWZh
Y2UpCisgICAgKCJkZXByZWNhdGVkIiAuIGVnbG90LWRpYWdub3N0aWMtdGFnLWRlcHJlY2F0
ZWQtZmFjZSkKKyAgICAoImFic3RyYWN0IiAuIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpCisg
ICAgKCJhc3luYyIgLiBmb250LWxvY2stcHJlcHJvY2Vzc29yLWZhY2UpCisgICAgKCJtb2Rp
ZmljYXRpb24iIC4gZm9udC1sb2NrLWZ1bmN0aW9uLW5hbWUtZmFjZSkKKyAgICAoImRvY3Vt
ZW50YXRpb24iIC4gZm9udC1sb2NrLWRvYy1mYWNlKQorICAgICgiZGVmYXVsdExpYnJhcnki
IC4gZm9udC1sb2NrLWJ1aWx0aW4tZmFjZSkpCisgICJMaXN0IG9mIGZhY2UgdG8gdXNlIHRv
IGhpZ2hsaWdodCB0b2tlbnMgd2l0aCBtb2RpZmllcnMuCitFYWNoIGVsZW1lbnQgaXMgYSBj
b25zIGNlbGwgd2hvc2UgY2FyIGlzIGEgbW9kaWZpZXIgbmFtZSBhbmQgY2RyIGlzCit0aGUg
ZmFjZSB0byB1c2UuIgorICA6dHlwZSBgKGFsaXN0IDprZXktdHlwZSAoc3RyaW5nIDp0YWcg
IlRva2VuIG5hbWUiKQorICAgICAgICAgICAgICAgIDp2YWx1ZS10eXBlIChjaG9pY2UgKGZh
Y2UgOnRhZyAiRmFjZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
cGxpc3QgOnRhZyAiRmFjZSBBdHRyaWJ1dGVzIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDprZXktdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjaG9pY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLEAobWFwY2FyCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKGNlbGwpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYChjb25zdCA6dGFnICwoY2FwaXRh
bGl6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChjZHIgY2VsbCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsKGNhciBjZWxsKSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtYXR0cmlidXRl
LW5hbWUtYWxpc3QpKSkpKSkKKworKGRlZnZhci1sb2NhbCBlZ2xvdC0tc2VtdG9rLWlkbGUt
dGltZXIgbmlsCisgICJJZGxlIHRpbWVyIHRvIHJlcXVlc3QgZnVsbCBzZW1hbnRpYyB0b2tl
bnMuIikKKworKGRlZnZhci1sb2NhbCBlZ2xvdC0tc2VtdG9rLWxhc3QtcmVxdWVzdC1oYXNo
IG5pbAorICAiSGFzaCBvZiBsYXN0IHJlcXVlc3QgcGFyYW1ldGVycyBhbmQgZG9jdW1lbnQg
dmVyc2lvbi4iKQorCisoZGVmdmFyLWxvY2FsIGVnbG90LS1zZW10b2stY2FjaGUgbmlsKQor
CisoZGVmc3Vic3QgZWdsb3QtLXNlbXRvay1wdXQtY2FjaGUgKGsgdikKKyAgIlNldCBrZXkg
SyBvZiBgZWdsb3Qtc2VtYW50aWMtdG9rZW5zLS1jYWNoZScgdG8gVi4iCisgIChzZXRxIGVn
bG90LS1zZW10b2stY2FjaGUKKyAgICAgICAgKHBsaXN0LXB1dCBlZ2xvdC0tc2VtdG9rLWNh
Y2hlIGsgdikpKQorCis7OyBQcm9jZXNzIHJlc3BvbnNlCisKKyhkZWZ1biBlZ2xvdC0tc2Vt
dG9rLWluZ2VzdC1yYW5nZS1yZXNwb25zZSAocmVzcG9uc2UpCisgICJIYW5kbGUgUkVTUE9O
U0UgdG8gc2VtYW50aWNUb2tlbnMvcmFuZ2UgcmVxdWVzdC4iCisgIChlZ2xvdC0tc2VtdG9r
LXB1dC1jYWNoZSA6cmVzcG9uc2UgcmVzcG9uc2UpCisgIChjbC1hc3NlcnQgKHBsaXN0LWdl
dCBlZ2xvdC0tc2VtdG9rLWNhY2hlIDpyZWdpb24pKSkKKworKGRlZnVuIGVnbG90LS1zZW10
b2staW5nZXN0LWZ1bGwtcmVzcG9uc2UgKHJlc3BvbnNlKQorICAiSGFuZGxlIFJFU1BPTlNF
IHRvIHNlbWFudGljVG9rZW5zL2Z1bGwgcmVxdWVzdC4iCisgIChlZ2xvdC0tc2VtdG9rLXB1
dC1jYWNoZSA6cmVzcG9uc2UgcmVzcG9uc2UpCisgIChjbC1hc3NlcnQgKG5vdCAocGxpc3Qt
Z2V0IGVnbG90LS1zZW10b2stY2FjaGUgOnJlZ2lvbikpKSkKKworKGRlZnN1YnN0IGVnbG90
LS1zZW10b2stYXBwbHktZGVsdGEtZWRpdHMgKG9sZC1kYXRhIGVkaXRzKQorICAiQXBwbHkg
RURJVFMgb2J0YWluZWQgZnJvbSBmdWxsL2RlbHRhIHJlcXVlc3QgdG8gT0xELURBVEEuIgor
ICAobGV0KiAoKG9sZC10b2tlbi1jb3VudCAobGVuZ3RoIG9sZC1kYXRhKSkKKyAgICAgICAg
IChvbGQtdG9rZW4taW5kZXggMCkKKyAgICAgICAgIChzdWJzdHJpbmdzKSkKKyAgICAoY2wt
bG9vcCBmb3IgZWRpdCBhY3Jvc3MgZWRpdHMgZG8KKyAgICAgKHdoZW4gKDwgb2xkLXRva2Vu
LWluZGV4IChwbGlzdC1nZXQgZWRpdCA6c3RhcnQpKQorICAgICAgIChwdXNoIChzdWJzdHJp
bmcgb2xkLWRhdGEgb2xkLXRva2VuLWluZGV4IChwbGlzdC1nZXQgZWRpdCA6c3RhcnQpKSBz
dWJzdHJpbmdzKSkKKyAgICAgKHB1c2ggKHBsaXN0LWdldCBlZGl0IDpkYXRhKSBzdWJzdHJp
bmdzKQorICAgICAoc2V0cSBvbGQtdG9rZW4taW5kZXggKCsgKHBsaXN0LWdldCBlZGl0IDpz
dGFydCkgKHBsaXN0LWdldCBlZGl0IDpkZWxldGVDb3VudCkpKQorICAgICBmaW5hbGx5IGRv
IChwdXNoIChzdWJzdHJpbmcgb2xkLWRhdGEgb2xkLXRva2VuLWluZGV4IG9sZC10b2tlbi1j
b3VudCkgc3Vic3RyaW5ncykpCisgICAgKGFwcGx5ICMndmNvbmNhdCAobnJldmVyc2Ugc3Vi
c3RyaW5ncykpKSkKKworKGRlZnVuIGVnbG90LS1zZW10b2staW5nZXN0LWZ1bGwvZGVsdGEt
cmVzcG9uc2UgKHJlc3BvbnNlKQorICAiSGFuZGxlIFJFU1BPTlNFIHRvIHNlbWFudGljVG9r
ZW5zL2Z1bGwvZGVsdGEgcmVxdWVzdC4iCisgIChpZi1sZXQqICgoZWRpdHMgKHBsaXN0LWdl
dCByZXNwb25zZSA6ZWRpdHMpKSkKKyAgICAgIChjbC1hc3NlcnQgKG5vdCAocGxpc3QtZ2V0
IGVnbG90LS1zZW10b2stY2FjaGUgOnJlZ2lvbikpKQorICAgICAgKHdoZW4tbGV0KiAoKG9s
ZC1kYXRhIChwbGlzdC1nZXQgKHBsaXN0LWdldCBlZ2xvdC0tc2VtdG9rLWNhY2hlIDpyZXNw
b25zZSkgOmRhdGEpKSkKKyAgICAgICAgKGVnbG90LS1zZW10b2stcHV0LWNhY2hlCisgICAg
ICAgICA6cmVzcG9uc2UKKyAgICAgICAgIChwbGlzdC1wdXQgcmVzcG9uc2UgOmRhdGEgKGVn
bG90LS1zZW10b2stYXBwbHktZGVsdGEtZWRpdHMgb2xkLWRhdGEgZWRpdHMpKSkpCisgICAg
Ozsgc2VydmVyIGRlY2lkZWQgdG8gc2VuZCBmdWxsIHJlc3BvbnNlIGluc3RlYWQKKyAgICAo
ZWdsb3QtLXNlbXRvay1pbmdlc3QtZnVsbC1yZXNwb25zZSByZXNwb25zZSkpKQorCisoZGVm
dW4gZWdsb3QtLXNlbXRvay1yZXF1ZXN0IChyZWdpb24gJm9wdGlvbmFsIGZvbnRpZnkpCisg
ICJTZW5kIHNlbWFudGljIHRva2VucyByZXF1ZXN0IHRvIHRoZSBsYW5ndWFnZSBzZXJ2ZXIu
CitBIGZ1bGwvZGVsdGEgcmVxdWVzdCB3aWxsIGJlIHNlbnQgaWYgZGVsdGEgcmVxdWVzdHMg
YXJlIHN1cHBvcnRlZCBieSB0aGUKK2xhbmd1YWdlIHNlcnZlciBhbmQgYSBmdWxsIHNldCBv
ZiB0b2tlbnMgaGFkIHByZXZpb3VzbHkgYmVlbiByZWNlaXZlZC4KK090aGVyd2lzZSwgYSBy
YW5nZWQgcmVxdWVzdCB3aWxsIGJlIGRpc3BhdGNoZWQgaWYgUkVHSU9OIGlzIG5vbi1uaWwg
YW5kCityYW5nZWQgcmVxdWVzdHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgbGFuZ3VhZ2Ugc2Vy
dmVyLiBJbiBhbGwgb3RoZXIKK2Nhc2VzLCBhIGZ1bGwgdG9rZW5zIHJlcXVlc3Qgd2lsbCBi
ZSBkaXNwYXRjaGVkLgorCitJZiBGT05USUZZIGlzIG5vbi1uaWwsIHJlZm9udGlmeSBhZnRl
ciB0aGUgcmVxdWVzdCBjb21wbGV0ZXMuIgorICAobGV0KiAoKG1ldGhvZCA6dGV4dERvY3Vt
ZW50L3NlbWFudGljVG9rZW5zL2Z1bGwpCisgICAgICAgICAocGFyYW1zIChsaXN0IDp0ZXh0
RG9jdW1lbnQgKGVnbG90LS1UZXh0RG9jdW1lbnRJZGVudGlmaWVyKSkpCisgICAgICAgICAo
cmVzcG9uc2UtaGFuZGxlciAjJ2VnbG90LS1zZW10b2staW5nZXN0LWZ1bGwtcmVzcG9uc2Up
CisgICAgICAgICAobGFzdC1oYXNoIGVnbG90LS1zZW10b2stbGFzdC1yZXF1ZXN0LWhhc2gp
CisgICAgICAgICAobGFzdC1yZWdpb24gKGNkciBsYXN0LWhhc2gpKQorICAgICAgICAgKGZp
bmFsLXJlZ2lvbiBuaWwpCisgICAgICAgICAoYnVmIChjdXJyZW50LWJ1ZmZlcikpKQorICAg
ICh3aGVuIChhbmQgcmVnaW9uIGxhc3QtcmVnaW9uKQorICAgICAgKHNldHEgcmVnaW9uIChj
b25zIChtaW4gKGNhciByZWdpb24pIChjYXIgbGFzdC1yZWdpb24pKQorICAgICAgICAgICAg
ICAgICAgICAgICAgIChtYXggKGNkciByZWdpb24pIChjZHIgbGFzdC1yZWdpb24pKSkpKQor
ICAgIChjb25kCisgICAgICgoYW5kIChlZ2xvdC1zZXJ2ZXItY2FwYWJsZSA6c2VtYW50aWNU
b2tlbnNQcm92aWRlciA6ZnVsbCA6ZGVsdGEpCisgICAgICAgICAgIChsZXQgKChyZXNwb25z
ZSAocGxpc3QtZ2V0IGVnbG90LS1zZW10b2stY2FjaGUgOnJlc3BvbnNlKSkpCisgICAgICAg
ICAgICAgKGFuZCAocGxpc3QtZ2V0IHJlc3BvbnNlIDpyZXN1bHRJZCkgKHBsaXN0LWdldCBy
ZXNwb25zZSA6ZGF0YSkKKyAgICAgICAgICAgICAgICAgIChub3QgKHBsaXN0LWdldCBlZ2xv
dC0tc2VtdG9rLWNhY2hlIDpyZWdpb24pKSkpKQorICAgICAgKHNldHEgbWV0aG9kIDp0ZXh0
RG9jdW1lbnQvc2VtYW50aWNUb2tlbnMvZnVsbC9kZWx0YSkKKyAgICAgIChzZXRxIHJlc3Bv
bnNlLWhhbmRsZXIgIydlZ2xvdC0tc2VtdG9rLWluZ2VzdC1mdWxsL2RlbHRhLXJlc3BvbnNl
KQorICAgICAgKHNldHEgcGFyYW1zCisgICAgICAgICAgICAocGxpc3QtcHV0IHBhcmFtcyA6
cHJldmlvdXNSZXN1bHRJZAorICAgICAgICAgICAgICAgICAgICAgICAocGxpc3QtZ2V0IChw
bGlzdC1nZXQgZWdsb3QtLXNlbXRvay1jYWNoZSA6cmVzcG9uc2UpIDpyZXN1bHRJZCkpKSkK
KyAgICAgKChhbmQgcmVnaW9uIChlZ2xvdC1zZXJ2ZXItY2FwYWJsZSA6c2VtYW50aWNUb2tl
bnNQcm92aWRlciA6cmFuZ2UpKQorICAgICAgKHNldHEgbWV0aG9kIDp0ZXh0RG9jdW1lbnQv
c2VtYW50aWNUb2tlbnMvcmFuZ2UpCisgICAgICAoc2V0cSBmaW5hbC1yZWdpb24gcmVnaW9u
KQorICAgICAgKHNldHEgcGFyYW1zCisgICAgICAgICAgICAocGxpc3QtcHV0IHBhcmFtcyA6
cmFuZ2UgKGVnbG90LXJlZ2lvbi1yYW5nZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY2FyIGZpbmFsLXJlZ2lvbikgKGNkciBmaW5hbC1yZWdpb24pKSkpCisg
ICAgICAoc2V0cSByZXNwb25zZS1oYW5kbGVyICMnZWdsb3QtLXNlbXRvay1pbmdlc3QtcmFu
Z2UtcmVzcG9uc2UpKSkKKyAgICAobGV0KiAoKGhhc2ggKGNvbnMgZWdsb3QtLXZlcnNpb25l
ZC1pZGVudGlmaWVyIGZpbmFsLXJlZ2lvbikpKQorICAgICAgKHVubGVzcyAoZXF1YWwgbGFz
dC1oYXNoIGhhc2gpCisgICAgICAgIChzZXRxIGVnbG90LS1zZW10b2stbGFzdC1yZXF1ZXN0
LWhhc2ggaGFzaCkKKyAgICAgICAgKGVnbG90LS1hc3luYy1yZXF1ZXN0CisgICAgICAgICAo
ZWdsb3QtLWN1cnJlbnQtc2VydmVyLW9yLWxvc2UpIG1ldGhvZCBwYXJhbXMKKyAgICAgICAg
IDpzdWNjZXNzLWZuCisgICAgICAgICAobGFtYmRhIChyZXNwb25zZSkKKyAgICAgICAgICAg
KGVnbG90LS13aGVuLWxpdmUtYnVmZmVyIGJ1ZgorICAgICAgICAgICAgICh3aGVuIChlcSBo
YXNoIGVnbG90LS1zZW10b2stbGFzdC1yZXF1ZXN0LWhhc2gpCisgICAgICAgICAgICAgICAo
c2V0cSBlZ2xvdC0tc2VtdG9rLWxhc3QtcmVxdWVzdC1oYXNoIG5pbCkpCisgICAgICAgICAg
ICAgKGVnbG90LS1zZW10b2stcHV0LWNhY2hlIDpkb2N1bWVudFZlcnNpb24gZWdsb3QtLXZl
cnNpb25lZC1pZGVudGlmaWVyKQorICAgICAgICAgICAgIChlZ2xvdC0tc2VtdG9rLXB1dC1j
YWNoZSA6cmVnaW9uIGZpbmFsLXJlZ2lvbikKKyAgICAgICAgICAgICAoZnVuY2FsbCByZXNw
b25zZS1oYW5kbGVyIHJlc3BvbnNlKQorICAgICAgICAgICAgICh3aGVuIGZvbnRpZnkgKGpp
dC1sb2NrLXJlZm9udGlmeSAoY2FyLXNhZmUgcmVnaW9uKSAoY2RyLXNhZmUgcmVnaW9uKSkp
CisgICAgICAgICAgICAgKHdoZW4gZmluYWwtcmVnaW9uIChlZ2xvdC0tc2VtdG9rLXJlcXVl
c3QtZnVsbC1vbi1pZGxlKSkpKQorICAgICAgICAgOmhpbnQgIydlZ2xvdC0tc2VtdG9rLXJl
cXVlc3QpKSkpKQorCisoZGVmdW4gZWdsb3QtLXNlbXRvay1mb250aWZ5IChiZWcgZW5kKQor
ICAiQXBwbHkgdGhlIGNhY2hlZCBzZW1hbnRpYyB0b2tlbnMgZnJvbSBCRUcgdG8gRU5ELiIK
KyAgKHdpdGgtc2xvdHMgKChtb2RpZmllci1jYWNoZSBzZW10b2stbW9kaWZpZXItY2FjaGUp
CisgICAgICAgICAgICAgICAoZmFjZXMgc2VtdG9rLWZhY2VzKQorICAgICAgICAgICAgICAg
KG1vZGlmaWVyLWZhY2VzIHNlbXRvay1tb2RpZmllci1mYWNlcykpCisgICAgICAoZWdsb3Qt
Y3VycmVudC1zZXJ2ZXIpCisgICAgKGNvbmQKKyAgICAgKChub3QgKGFuZCBmYWNlcworICAg
ICAgICAgICAgICAgIGVnbG90LS1zZW10b2stY2FjaGUKKyAgICAgICAgICAgICAgICAocGxp
c3QtZ2V0IGVnbG90LS1zZW10b2stY2FjaGUgOnJlc3BvbnNlKQorICAgICAgICAgICAgICAg
IChlcSBlZ2xvdC0tdmVyc2lvbmVkLWlkZW50aWZpZXIgKHBsaXN0LWdldCBlZ2xvdC0tc2Vt
dG9rLWNhY2hlIDpkb2N1bWVudFZlcnNpb24pKSkpCisgICAgICAoZWdsb3QtLXNlbXRvay1y
ZXF1ZXN0IChjb25zIGJlZyBlbmQpIHQpKQorICAgICAodAorICAgICAgOzsgaWYgd2UncmUg
dXNpbmcgdGhlIHJlc3BvbnNlIHRvIGEgcmFuZ2VkIHJlcXVlc3QsIHdlJ2xsIG9ubHkgYmUg
YWJsZSB0byBmb250aWZ5IHdpdGhpbgorICAgICAgOzsgdGhhdCByYW5nZSAoYW5kIGhlbmNl
IHNob3VsZG4ndCBjbGVhciBhbnkgaGlnaGxpZ2h0cyBvdXRzaWRlIG9mIHRoYXQgcmFuZ2Up
CisgICAgICAod2hlbi1sZXQqICgodG9rZW4tcmVnaW9uIChwbGlzdC1nZXQgZWdsb3QtLXNl
bXRvay1jYWNoZSA6cmVnaW9uKSkpCisgICAgICAgIChwcm9nbgorICAgICAgICAgICh3aGVu
IChvciAoPCBiZWcgKGNhciB0b2tlbi1yZWdpb24pKQorICAgICAgICAgICAgICAgICAgICAo
PiBlbmQgKGNkciB0b2tlbi1yZWdpb24pKSkKKyAgICAgICAgICAgIDs7IHRydW5jYXRlZCEg
Y29udGludWUsIGJ1dCByZXF1ZXN0IGFnYWluCisgICAgICAgICAgICAoZWdsb3QtLXNlbXRv
ay1yZXF1ZXN0IChjb25zIGJlZyBlbmQpIHQpKQorICAgICAgICAgIChzZXRxIGJlZyAobWF4
IGJlZyAoY2FyIHRva2VuLXJlZ2lvbikpKQorICAgICAgICAgIChzZXRxIGVuZCAobWluIGVu
ZCAoY2RyIHRva2VuLXJlZ2lvbikpKSkpCisgICAgICAoZWdsb3QtLXdpZGVuaW5nCisgICAg
ICAgICh3aXRoLXNpbGVudC1tb2RpZmljYXRpb25zCisgICAgICAgICAgKHJlbW92ZS1saXN0
LW9mLXRleHQtcHJvcGVydGllcyBiZWcgZW5kICcoZm9udC1sb2NrLWZhY2UpKQorICAgICAg
ICAgIChsZXQqICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiB0KQorICAgICAgICAgICAg
ICAgICAoZGF0YSAocGxpc3QtZ2V0IChwbGlzdC1nZXQgZWdsb3QtLXNlbXRvay1jYWNoZSA6
cmVzcG9uc2UpIDpkYXRhKSkKKyAgICAgICAgICAgICAgICAgKGktbWF4IChsZW5ndGggZGF0
YSkpCisgICAgICAgICAgICAgICAgIChiZWctYm9sIChhbmQgKGdvdG8tY2hhciBiZWcpIChs
aW5lLWJlZ2lubmluZy1wb3NpdGlvbikpKQorICAgICAgICAgICAgICAgICAocHJvcGVydHkt
YmVnKQorICAgICAgICAgICAgICAgICAocHJvcGVydHktZW5kKSkKKyAgICAgICAgICAgIChn
b3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAgICAoY2wtZG8qICgoaSAwICgrIGkg
NSkpIChjb2x1bW4gMCkpICgoPj0gaSBpLW1heCkpCisgICAgICAgICAgICAgICh3aGVuICg+
IChhcmVmIGRhdGEgaSkgMCkKKyAgICAgICAgICAgICAgICAoc2V0cSBjb2x1bW4gMCkKKyAg
ICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lIChhcmVmIGRhdGEgaSkpKQorICAgICAgICAg
ICAgICAodW5sZXNzICg8IChwb2ludCkgYmVnLWJvbCkKKyAgICAgICAgICAgICAgICAoc2V0
cSBjb2x1bW4gKCsgY29sdW1uIChhcmVmIGRhdGEgKCsgaSAxKSkpKQorICAgICAgICAgICAg
ICAgIChmdW5jYWxsIGVnbG90LW1vdmUtdG8tbGluZXBvcy1mdW5jdGlvbiBjb2x1bW4pCisg
ICAgICAgICAgICAgICAgKHdoZW4gKD4gKHBvaW50KSBlbmQpIChjbC1yZXR1cm4pKQorICAg
ICAgICAgICAgICAgIChzZXRxIHByb3BlcnR5LWJlZyAocG9pbnQpKQorICAgICAgICAgICAg
ICAgIChmdW5jYWxsIGVnbG90LW1vdmUtdG8tbGluZXBvcy1mdW5jdGlvbiAoKyBjb2x1bW4g
KGFyZWYgZGF0YSAoKyBpIDIpKSkpCisgICAgICAgICAgICAgICAgKHNldHEgcHJvcGVydHkt
ZW5kIChwb2ludCkpCisgICAgICAgICAgICAgICAgKHdoZW4tbGV0KiAoKGZhY2UgKGFyZWYg
ZmFjZXMgKGFyZWYgZGF0YSAoKyBpIDMpKSkpKQorICAgICAgICAgICAgICAgICAgKHB1dC10
ZXh0LXByb3BlcnR5IHByb3BlcnR5LWJlZyBwcm9wZXJ0eS1lbmQgJ2ZvbnQtbG9jay1mYWNl
IGZhY2UpKQorICAgICAgICAgICAgICAgIChsZXQqICgoY29kZSAoYXJlZiBkYXRhICgrIGkg
NCkpKQorICAgICAgICAgICAgICAgICAgICAgICAoZmFjZXMgKGdldGhhc2ggY29kZSBtb2Rp
Zmllci1jYWNoZSAnbm90LWZvdW5kKSkpCisgICAgICAgICAgICAgICAgICAod2hlbiAoZXEg
ZmFjZXMgJ25vdC1mb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgKHNldHEgZmFjZXMgbmls
KQorICAgICAgICAgICAgICAgICAgICAoY2wtbG9vcCBmb3IgaiBmcm9tIDAgYmVsb3cgKGxl
bmd0aCBtb2RpZmllci1mYWNlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KD4gKGxvZ2FuZCBjb2RlIChhc2ggMSBqKSkgMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGFyZWYgbW9kaWZpZXItZmFjZXMgaikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29sbGVjdCAoYXJlZiBtb2RpZmllci1mYWNlcyBqKSBpbnRvIGZhY2VzKQor
ICAgICAgICAgICAgICAgICAgICAocHV0aGFzaCBjb2RlIGZhY2VzIG1vZGlmaWVyLWNhY2hl
KSkKKyAgICAgICAgICAgICAgICAgIChkb2xpc3QgKGZhY2UgZmFjZXMpCisgICAgICAgICAg
ICAgICAgICAgIChwdXQtdGV4dC1wcm9wZXJ0eSBwcm9wZXJ0eS1iZWcgcHJvcGVydHktZW5k
ICdmb250LWxvY2stZmFjZSBmYWNlKSkpKSkpKSkKKyAgICAgIGAoaml0LWxvY2stYm91bmRz
ICxiZWcgLiAsZW5kKSkpKSkKKworKGRlZnVuIGVnbG90LS1zZW10b2stcmVxdWVzdC1mdWxs
LW9uLWlkbGUgKCkKKyAgIk1ha2UgYSBmdWxsIHNlbWFudGljIHRva2VucyByZXF1ZXN0IGFm
dGVyIGFuIGlkbGUgdGltZXIuIgorICAobGV0KiAoKGJ1ZiAoY3VycmVudC1idWZmZXIpKQor
ICAgICAgICAgKGZ1biAobGFtYmRhICgpCisgICAgICAgICAgICAgICAgKGVnbG90LS13aGVu
LWxpdmUtYnVmZmVyIGJ1ZgorICAgICAgICAgICAgICAgICAgKGVnbG90LS1zZW10b2stcmVx
dWVzdCBuaWwpKSkpKQorICAgICh3aGVuIGVnbG90LS1zZW10b2staWRsZS10aW1lciAoY2Fu
Y2VsLXRpbWVyIGVnbG90LS1zZW10b2staWRsZS10aW1lcikpCisgICAgKHNldHEgZWdsb3Qt
LXNlbXRvay1pZGxlLXRpbWVyIChydW4td2l0aC1pZGxlLXRpbWVyICgqIDMgZWdsb3Qtc2Vu
ZC1jaGFuZ2VzLWlkbGUtdGltZSkgbmlsIGZ1bikpKSkKKworKGRlZnVuIGVnbG90LS1zZW10
b2stb24tcmVmcmVzaCAoc2VydmVyKQorICAiQ2xlYXIgc2VtYW50aWMgdG9rZW5zIHdpdGhp
biBhbGwgYnVmZmVycyBvZiBTRVJWRVIuIgorICAoY2wtbG9vcCBmb3IgYnVmZmVyIGluIChl
Z2xvdC0tbWFuYWdlZC1idWZmZXJzIHNlcnZlcikgZG8KKyAgICAgICAgICAgKHdpdGgtY3Vy
cmVudC1idWZmZXIgYnVmZmVyCisgICAgICAgICAgICAgKHNldHEgZWdsb3QtLXNlbXRvay1j
YWNoZSBuaWwpCisgICAgICAgICAgICAgKGppdC1sb2NrLXJlZm9udGlmeSkpKSkKKworKGxl
dCAoKGRlYm91bmNlLXRpbWVyIG5pbCkpCisgIChjbC1kZWZtZXRob2QgZWdsb3QtaGFuZGxl
LXJlcXVlc3QKKyAgICAoc2VydmVyIChfbWV0aG9kIChlcWwgd29ya3NwYWNlL3NlbWFudGlj
VG9rZW5zL3JlZnJlc2gpKSkKKyAgICAiSGFuZGxlIGEgc2VtYW50aWNUb2tlbnMvcmVmcmVz
aCByZXF1ZXN0IGZyb20gU0VSVkVSLiIKKyAgICAod2hlbiBkZWJvdW5jZS10aW1lciAoY2Fu
Y2VsLXRpbWVyIGRlYm91bmNlLXRpbWVyKSkKKyAgICAoc2V0cSBkZWJvdW5jZS10aW1lciAo
cnVuLXdpdGgtdGltZXIgNSBuaWwgIydlZ2xvdC0tc2VtdG9rLW9uLXJlZnJlc2ggc2VydmVy
KSkKKyAgICBuaWwpKQorCis7OyBJbml0aWFsaXphdGlvbgorKGRlZnVuIGVnbG90LS1zZW10
b2stYnVpbGQtZmFjZS1tYXAgKGlkZW50aWZpZXJzIGZhY2VzIGNhdGVnb3J5IHZhcm5hbWUp
CisgICJCdWlsZCBtYXAgb2YgRkFDRVMgZm9yIElERU5USUZJRVJTIHVzaW5nIENBVEVHT1JZ
IGFuZCBWQVJOQU1FLiIKKyAgKHZjb25jYXQKKyAgIChtYXBjYXIgKGxhbWJkYSAoaWQpCisg
ICAgICAgICAgICAgKGxldCAoKG1heWJlLWZhY2UgKGNkciAoYXNzb2MgaWQgZmFjZXMpKSkp
CisgICAgICAgICAgICAgICAod2hlbiAobm90IG1heWJlLWZhY2UpCisgICAgICAgICAgICAg
ICAgIChkaXNwbGF5LXdhcm5pbmcKKyAgICAgICAgICAgICAgICAgICdlZ2xvdC1zZW10b2sK
KyAgICAgICAgICAgICAgICAgIChmb3JtYXQtbWVzc2FnZSAiTm8gZmFjZSBoYXMgYmVlbiBh
c3NvY2lhdGVkIHRvIHRoZSAlcyBgJXMnOiBjb25zaWRlciBhZGRpbmcgYSBjb3JyZXNwb25k
aW5nIGRlZmluaXRpb24gdG8gJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2F0ZWdvcnkgaWQgdmFybmFtZSkpKQorICAgICAgICAgICAgICAgbWF5YmUtZmFjZSkp
CisgICAgICAgICAgIGlkZW50aWZpZXJzKSkpCisKKyhkZWZ1biBlZ2xvdC0tc2VtdG9rLWlu
aXRpYWxpemUgKHNlcnZlcikKKyAgIkluaXRpYWxpemUgU0VSVkVSIGZvciBzZW1hbnRpYyB0
b2tlbnMuIgorICAoY2wtZGVzdHJ1Y3R1cmluZy1iaW5kICgma2V5IHRva2VuVHlwZXMgdG9r
ZW5Nb2RpZmllcnMgJmFsbG93LW90aGVyLWtleXMpCisgICAgICAocGxpc3QtZ2V0IChwbGlz
dC1nZXQgKGVnbG90LS1jYXBhYmlsaXRpZXMgc2VydmVyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDpzZW1hbnRpY1Rva2Vuc1Byb3ZpZGVyKQorICAgICAgICAgICAgICAgICA6
bGVnZW5kKQorICAgIChvc2V0IHNlcnZlciBzZW10b2stZmFjZXMKKyAgICAgICAgICAoZWds
b3QtLXNlbXRvay1idWlsZC1mYWNlLW1hcAorICAgICAgICAgICB0b2tlblR5cGVzIGVnbG90
LXNlbWFudGljLXRva2Vucy1mYWNlcworICAgICAgICAgICAic2VtYW50aWMgdG9rZW4iICJl
Z2xvdC0tc2VtdG9rZmFjZXMiKSkKKyAgICAob3NldCBzZXJ2ZXIgc2VtdG9rLW1vZGlmaWVy
LWZhY2VzCisgICAgICAgICAgKGVnbG90LS1zZW10b2stYnVpbGQtZmFjZS1tYXAKKyAgICAg
ICAgICAgdG9rZW5Nb2RpZmllcnMgZWdsb3Qtc2VtYW50aWMtdG9rZW5zLW1vZGlmaWVyLWZh
Y2VzCisgICAgICAgICAgICJzZW1hbnRpYyB0b2tlbiBtb2RpZmllciIgImVnbG90LS1zZW10
b2ttb2RpZmllci1mYWNlcyIpKSkpCisKKyhkZWZpbmUtbWlub3ItbW9kZSBlZ2xvdC1zZW1h
bnRpYy10b2tlbnMtbW9kZQorICAiTWlub3IgbW9kZSBmb3IgZm9udGlmeWluZyBidWZmZXIg
d2l0aCBMU1Agc2VydmVyJ3Mgc2VtYW50aWMgdG9rZW5zLiIKKyAgOmdsb2JhbCBuaWwKKyAg
KGNvbmQgKGVnbG90LXNlbWFudGljLXRva2Vucy1tb2RlCisgICAgICAgICAoaWYgKGVnbG90
LXNlcnZlci1jYXBhYmxlIDpzZW1hbnRpY1Rva2Vuc1Byb3ZpZGVyKQorICAgICAgICAgICAg
IChqaXQtbG9jay1yZWdpc3RlciAjJ2VnbG90LS1zZW10b2stZm9udGlmeSAnY29udGV4dHVh
bCkKKyAgICAgICAgICAgKGVnbG90LXNlbWFudGljLXRva2Vucy1tb2RlIC0xKSkpCisgICAg
ICAgICh0CisgICAgICAgICAoaml0LWxvY2stdW5yZWdpc3RlciAjJ2VnbG90LS1zZW10b2st
Zm9udGlmeSkKKyAgICAgICAgICh3aXRoLXNpbGVudC1tb2RpZmljYXRpb25zCisgICAgICAg
ICAgIChyZW1vdmUtbGlzdC1vZi10ZXh0LXByb3BlcnRpZXMgKHBvaW50LW1pbikgKHBvaW50
LW1heCkgJyhmb250LWxvY2stZmFjZSkpKSkpKQorCiAMCiA7OzsgQ2FsbCBhbmQgdHlwZSBo
aWVyYXJjaGllcwogKHJlcXVpcmUgJ2J1dHRvbikKQEAgLTQ3MjgsNyArNTA0OCw4IEBAIElm
IE5PRVJST1IsIHJldHVybiBwcmVkaWNhdGUsIGVsc2UgZXJyb3JpbmcgZnVuY3Rpb24uIgog
OzsgaGFyZGVyLiBGb3Igbm93LCB1c2UgYHdpdGgtZXZhbC1hZnRlci1sb2FkJy4gU2VlIGFs
c28gZ2l0aHViIzExODMuCiAod2l0aC1ldmFsLWFmdGVyLWxvYWQgJ2Rlc2t0b3AKICAgKGFk
ZC10by1saXN0ICdkZXNrdG9wLW1pbm9yLW1vZGUtaGFuZGxlcnMgJyhlZ2xvdC0tbWFuYWdl
ZC1tb2RlIC4gaWdub3JlKSkKLSAgKGFkZC10by1saXN0ICdkZXNrdG9wLW1pbm9yLW1vZGUt
aGFuZGxlcnMgJyhlZ2xvdC1pbmxheS1oaW50cy1tb2RlIC4gaWdub3JlKSkpCisgIChhZGQt
dG8tbGlzdCAnZGVza3RvcC1taW5vci1tb2RlLWhhbmRsZXJzICcoZWdsb3QtaW5sYXktaGlu
dHMtbW9kZSAuIGlnbm9yZSkpCisgIChhZGQtdG8tbGlzdCAnZGVza3RvcC1taW5vci1tb2Rl
LWhhbmRsZXJzICcoZWdsb3Qtc2VtdG9rLW1vZGUgLiBpZ25vcmUpKSkKIAogDAogOzs7IE1p
c2MKQEAgLTQ3NTcsNiArNTA3OCw3IEBAIElmIE5PRVJST1IsIHJldHVybiBwcmVkaWNhdGUs
IGVsc2UgZXJyb3JpbmcgZnVuY3Rpb24uIgogICAgICAgICAgICAgICAgZWdsb3QtZm9ybWF0
CiAgICAgICAgICAgICAgICBlZ2xvdC1mb3JtYXQtYnVmZmVyCiAgICAgICAgICAgICAgICBl
Z2xvdC1pbmxheS1oaW50cy1tb2RlCisgICAgICAgICAgICAgICBlZ2xvdC1zZW1hbnRpYy10
b2tlbnMtbW9kZQogICAgICAgICAgICAgICAgZWdsb3QtcmVjb25uZWN0CiAgICAgICAgICAg
ICAgICBlZ2xvdC1yZW5hbWUKICAgICAgICAgICAgICAgIGVnbG90LXNpZ25hbC1kaWRDaGFu
Z2VDb25maWd1cmF0aW9uCi0tIAoyLjUxLjAKCg==
--------------g0J6nJdLcckbJYpGJXcUemsd--
me@HIDDEN:bug-gnu-emacs@HIDDEN.
Full text available.bug-gnu-emacs@HIDDEN:bug#79374; Package emacs.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.