From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= Newsgroups: gmane.emacs.bugs Subject: bug#61302: 29.0.60; rust-ts-mode does not show function-invocation on field-properties Date: Tue, 14 Feb 2023 12:42:50 +0100 Message-ID: <5075852e-480b-7ca9-ba46-8de230ed8df5@secure.kjonigsen.net> References: <6209c097-0369-828a-7513-d8afb73fd7f0@secure.kjonigsen.net> <05ee38a5-f783-5b2c-add6-ee2ea27ba297@yandex.ru> <8a58c831-d8e6-c5b8-67b0-c606b2b3f189@yandex.ru> <33cec9a6-7e69-2eb3-a8a6-58ce23a5c185@yandex.ru> <61cb2b34-0be2-1f69-e72d-5351fbe9e48f@yandex.ru> Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="------------YTe69WjVIJwGgSy05TeuXpe0" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="17416"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Cc: eliz@gnu.org, 61302@debbugs.gnu.org To: Randy Taylor , Dmitry Gutov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Feb 14 12:44:15 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pRtjJ-0004Hn-7M for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 14 Feb 2023 12:44:15 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pRtjA-0002T0-GY; Tue, 14 Feb 2023 06:44:04 -0500 Original-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 ) id 1pRtj8-0002Sh-Rk for bug-gnu-emacs@gnu.org; Tue, 14 Feb 2023 06:44:02 -0500 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pRtj8-00040l-J9 for bug-gnu-emacs@gnu.org; Tue, 14 Feb 2023 06:44:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pRtj8-0003iq-E3 for bug-gnu-emacs@gnu.org; Tue, 14 Feb 2023 06:44:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 14 Feb 2023 11:44:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61302 X-GNU-PR-Package: emacs Original-Received: via spool by 61302-submit@debbugs.gnu.org id=B61302.167637499314242 (code B ref 61302); Tue, 14 Feb 2023 11:44:02 +0000 Original-Received: (at 61302) by debbugs.gnu.org; 14 Feb 2023 11:43:13 +0000 Original-Received: from localhost ([127.0.0.1]:52745 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pRtiH-0003hb-Cm for submit@debbugs.gnu.org; Tue, 14 Feb 2023 06:43:13 -0500 Original-Received: from out3-smtp.messagingengine.com ([66.111.4.27]:40481) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pRti6-0003gz-Dl for 61302@debbugs.gnu.org; Tue, 14 Feb 2023 06:43:07 -0500 Original-Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 3ECE35C0145; Tue, 14 Feb 2023 06:42:53 -0500 (EST) Original-Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Tue, 14 Feb 2023 06:42:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= secure.kjonigsen.net; h=cc:cc:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to; s=fm3; t=1676374973; x= 1676461373; bh=kskOhOfyyOYJNwHQOt7U0frfpGY3zR0wFtoZ+H44Prg=; b=P ZpaVju57crPjTcTZR7AvTMdTIsrP3GQYtDAn1yf8PotS1Ni1pAl+dO6Fvn1Vd8HB THtkbVdPqU/o+Jlj5mpQH6/LakSDRN8WGxKT0l3LE5qNxLryo6bxSBLkMWFjd3lM I7TKzO3DzHx9THuxK3xCjvNicP0nsR5Xmt9k/SWoDuBHIyvI6wa2fXwcsyohP5/s ZbqMcdqqgphWSn3y5qGucCjS8giRkkbMI6zmvVkZzGnSFI4W0I/uErWKtGbvJWo0 Qny4zDr28O6tOvOpCM5QmSgllwM5qLOHg1ZUhK9SK3GUrz+M0wP+cXm7bAkf/bt2 wC4vPIe3eGL2Ds1R9DInQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:sender:subject:subject:to:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; t=1676374973; x=1676461373; bh=kskOhOfyyOYJNwHQOt7U0frfpGY3 zR0wFtoZ+H44Prg=; b=DqtKUFEbgyDcUAG6DdUp9PvzLCm7NuzPnTz7N/5eDhKd D32kKSIB+O+sJ75SzJuakT/HUDpUCPsmuYMGtJ9+ONwdOCW9XY7QKQePgd08JyQI egZThOq9yQSk9KSZb1fURwr+nqEs/aHiZu71TRjpmjzlz33VI+X6aSUA/SiUx0P9 S4FSxMYT9INYaRJrQYhvvOKEsax0aGxtG6IaXh2QKq/zwezg7WnJXIQUQ/tiT1AI fvj6iHUJcLFo/Ggvnt9Ll+QP5VK2B0j7jkawJxWYP2Gaeafig+rN38AmiAKXG5SM HMPGqVWgfsXZsoVWXBsW0EyExm6Gt8OmWbE5bogCNg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrudeifedgvdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurheptgfkffggfgfuvfevfhfhjgesrgdtreertdefjeenucfhrhhomheplfhoshht vghinhcumfhjpphnihhgshgvnhcuoehjohhsthgvihhnsehsvggtuhhrvgdrkhhjohhnih hgshgvnhdrnhgvtheqnecuggftrfgrthhtvghrnheptdeutddthefhffdvhedvuefgueef ffeiudegkeejudeghfefffdtueetvdejlefgnecuvehluhhsthgvrhfuihiivgeptdenuc frrghrrghmpehmrghilhhfrhhomhepjhhoshhtvghinhesshgvtghurhgvrdhkjhhonhhi ghhsvghnrdhnvght X-ME-Proxy: Feedback-ID: ib2f84088:Fastmail Original-Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 14 Feb 2023 06:42:52 -0500 (EST) Content-Language: en-US In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:255568 Archived-At: This is a multi-part message in MIME format. --------------YTe69WjVIJwGgSy05TeuXpe0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 2/14/23 04:25, Randy Taylor wrote: > > Hi Dmitry and Jostein, > > Here is the promised patch in all its glory. > I have also attached a screenshot of how things look now. > > Changes: > - Attributes are now highlighted with font-lock-preprocessor-face. > - Added import-specific queries to cover all (hopefully...) import highlights, and simplified the existing scoped identifier types. > - Note: I decided that anything at the end of a scoped identifier for imports or within a use list that's lowercased should be the default face because we don't know if it's a module, function, type, or whatever else. rust-mode also does this, and now we match their highlighting almost one for one. neovim and the rest do it this way too, and it makes the most sense. Haven given the latest patch a try on a less macro-ridden codebase I have to say it looks a lot better. In general I would say for this other code-base it looks favourable to rust-mode. If there's one thing which still seems to be done better in rust-mode (not nitpicking the variable highlighting), it would be fully namespaces function calls within classes. Consider the following code: extern crate claxon; let result = claxon::FlacReader::open(path); While rust-ts-mode correctly identifies that open() is a function-call, rust-mode correctly identified FlacReader as a class. Based on the tree-sitter output for this node, it seems plausible that one should be able to implement the same for rust-ts-mode as well. (source_file (line_comment)  (extern_crate_declaration extern (crate) name: (identifier) ;)  (let_declaration let pattern: (identifier) =   value:    (call_expression     function:      (scoped_identifier       path: (scoped_identifier path: (identifier) ::                                name: (identifier))                                <-- this is the class       :: name: (identifier))     arguments: (arguments ( (identifier) )))   ;)) That's nowhere near a "big" problem though. It's just icing on the cake ;) -- Jostein --------------YTe69WjVIJwGgSy05TeuXpe0 Content-Type: multipart/related; boundary="------------wYhFVQtAMB3lMhnRFPKYHTeT" --------------wYhFVQtAMB3lMhnRFPKYHTeT Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit On 2/14/23 04:25, Randy Taylor wrote:

Hi Dmitry and Jostein,

Here is the promised patch in all its glory.
I have also attached a screenshot of how things look now.

Changes:
- Attributes are now highlighted with font-lock-preprocessor-face.
- Added import-specific queries to cover all (hopefully...) import highlights, and simplified the existing scoped identifier types.
  - Note: I decided that anything at the end of a scoped identifier for imports or within a use list that's lowercased should be the default face because we don't know if it's a module, function, type, or whatever else. rust-mode also does this, and now we match their highlighting almost one for one. neovim and the rest do it this way too, and it makes the most sense.

Haven given the latest patch a try on a less macro-ridden codebase I have to say it looks a lot better. In general I would say for this other code-base it looks favourable to rust-mode.

If there's one thing which still seems to be done better in rust-mode (not nitpicking the variable highlighting), it would be fully namespaces function calls within classes.

Consider the following code:

extern crate claxon;
let result = claxon::FlacReader::open(path);

While rust-ts-mode correctly identifies that open() is a function-call, rust-mode correctly identified FlacReader as a class.

Based on the tree-sitter output for this node, it seems plausible that one should be able to implement the same for rust-ts-mode as well.

(source_file (line_comment)
 (extern_crate_declaration extern (crate) name: (identifier) ;)
 (let_declaration let pattern: (identifier) =
  value:
   (call_expression
    function:
     (scoped_identifier
      path: (scoped_identifier path: (identifier) ::
                               name: (identifier))                                <-- this is the class
      :: name: (identifier))
    arguments: (arguments ( (identifier) )))
  ;))

That's nowhere near a "big" problem though. It's just icing on the cake ;)

--
Jostein

--------------wYhFVQtAMB3lMhnRFPKYHTeT Content-Type: image/png; name="5LcAjDfSb1da6nv4.png" Content-Disposition: inline; filename="5LcAjDfSb1da6nv4.png" Content-Id: Content-Transfer-Encoding: base64 iVBORw0KGgoAAAANSUhEUgAABOkAAACDCAIAAABX49gKAAAgAElEQVR4nO3dd3xTVf8H8O/N zWybpOlI9x4UKLPQsveSISBT2YooiD7qDwRUHnHv/agguFBwAIqiIsgGAVmFsrv3Ttvsnfz+ SAm1tEkLtCD9vF/8kdxxzrkXyqfn3nPPZRI6JBMAAABcryMHf2/W9r37j26hlgAAANzBOLe6 AQAAAAAAAABuNKnvKpVIOiW2j4oIb27pHZLuTug2prmrWkFgeOfAsMTW2avldOgxPrbz8Fvd CgAAaBEI35sCWQkAcMdw33eV+/tFRIQxDMdgNDSraJGnj7d/RFFuarNWtY6giC48gWfr7AUA AG2K1Wotr6zMLSjILSgor6g0WyzXUQjCFwAAoB43fdeAAHlgoLy8opKI9AZjs4oOiuyqUVao q4ubtQoAAODfy2q1FpaUaHU6u91ut9u1el1xaanVam1WIQhfAACAa3Fdr9aoNXqdnhgiIkNz 4pPLE8qDE7LO7W7WqgZ17jVNUZ5ls5iCo5N4fJFeW5N2+Fu73R7dYZCXJCDt6PeOzdp1GcVh +RdP/eL46hcYFxqTLPSQWq1mdXVJxtk/rRYjy/JShi90bBAWmxIWm0JExblnci/td9EAt3s1 WJeLAr0k8sSUKYqyDJl/VEXJZZbD+gTEVpZczr6wz7GBf0hCaHSyUCQ2GjSFOSfKC8479w2L SQ6M6MLhsGX5Z+sVK/UND4/v5enlZzEbSwvOFGadcHtuAQDg5lJUV9tstrpLbDaborpa7ufX 9EIQvoSsBACAa7jpu2p1OiKSy+V2u91obEZ8BoZ3spiNlaUZzVrVGP+gdhaLMTPtT4vF5BsQ 43Z7kZdPXJdRJXmp1RdzuHyRjzyay+VZLUar1XJy/5dE1DF5YlVZbkleKhFZLSbXpbneq7G6 XJfJYVlFaUZ1RW58l1F5lw+fO7a5a98ZRdknjAaNt39kXKcRZYUXci9n+sijYzsOtZoMirIs IvIPTgiL65WXflirLA+J6SmWBlSW1Z5GsXdQhx53K8qyCjL+FookkQn9zCZDWcE5t+cKAABu Ip1ef+1CvaF5434Rvg7ISgAAqMtN39VBKOQbjSa73d7EQhkOGxjeuST3jN1ua/oqF/hCr7P7 NzlyTqsqd7u9l1RORHmXDztqUZRmXlljN+pVRGS32awWg+NzE7jaq/G63FBWFXG5fCKqUeTp 1AqbzSL0kBoNmuCIblpVeda5XURUXZ7rIfYLjuzmyOPgyG6VpRlF2SeISKuu6DF4vrO08LgU nVqRfvoPIjsRcfnCkKjuyGMAgFbWYFbWuxPbRG0+fImQlQAAUEeT5hkWCoV6QwMXkhvjFxTH 5fLLCusP1HG9ygVlVUFTLtA6aVUKhqGYjoMlPqEcltfEvTgcLssV1P3DYdkbqct1gTarxWo1 E5HNanV85bB8IvKSymsU+c7NlJX5nlI5ERExHl4+KkWBY7nZpNdrKh2fGYaR+IQqyrIcYUxE WmW50MO76ccOAAC3G4QvISsBAKAO9/ddGYYRCvjV1TVNLzQkslt50UWLuYFhTi5WuWAy6pq1 vU5dcfn09pDIpI49O5DdVlGSnnV+j93mZqqMkKjuYXG96i4pzDqen3HkuutyW2C9i+kMhyEi lssz1zk/ZpOBw+EyDIfl8hgOa67za4TZVLsZyxUwDCcsNjk0pkdtUcQQEV/oadA24y8OAABu Ewhf51dkJQAAOLjvuwoFAiLG0ORndaQ+oSIvv0upvzdrlWt2W4NDsOzEYZxfOTwB1dlMUZqp KM1kufyA0PYR7QaoaorrzuLQoLKii8qqwrpLjHp1U5rXWF3XV6DZqOXxBM6vPL7QZrPY7Tar xWS323hcvnMVl8d3PAZltZrtdnt+xtGqsuzraD8AANxuEL6uISsBANqgJvRdhUJqzjyHwVHd qityDTpls1ZdB7NJKxCKGYax2+0cDtdL4q+pqf80jtViKs49ExTRjc/3rLf82jFCJoPaZHAV YA3u5aIutwU2SKtSePuG59Fhx1epX7hWWU5Edrtdq6yQ+oSWFpwjIh7fw0Psp9UoiMhus6pr Sjy8fByP9wAAwL8dwtc1ZCUAQBvkqu8qFntxOByxRGy32z08REQitVrjesIJoae3zD/y3LGf mrXq+qgUhRHxfaI7Dq6pyJeHtq/bsMCwRC9ZUHVFnsWok8kj+UKxss5TMUSkU1f6BcbWVOSY jHqLWW82NemBogb3cltXcxXnnuqYfE9M4rCq8kwfebRYGng59TfHqpKCM3GdRoSoKx1zJ9rq DMTKzzjasecEu81aVZ5NxHiI/cTSQOdLCwAA4N8C4dsUyEoAgDao0b4rwzBRkeFEteOCIsLD iOznzl90XVxwRFetqlL1z8E/blddH7WytCDjaGBEFx95dHHOKYNOJRRJHau0aoUsICa6/UCW 5el1NRln/lDXlNbdNz/zWKxInND9bpbLc/uKOdd7ua2ruZRVhZlpf4bG9JSHJBgN6qxzexwT JxJRRdElPt8rJLo7EVOaf9akV1/5+yFVVeGF4z+Fx/WO73KXzWbVaRTlRW7+sgAA4HaD8G0i ZCUAQBvEJHRIvlllcXnCHoPvzzq3p6L4UtNXAQAA/KsdOXj1UdKc/IaH3kSFhzs/9+4/+ibW jvAFAIA24mb2XQEAANqgW9t3BQAAaCOa9H5XAAAAAAAAgFsIfVcAAAAAAAC43aHvCgAAAAAA ALe726vvGisOZJnbq0k3xZ16XAAAcAe4U0PqTj0uAIA2y9X7XYkoMEDuJfYSCgR2u12n15eU lDb9PenNImT5byXNGhKU2OO3ZTqLqSWquCVa57hSUpLWfPK682uffmN1OkML1QUAAC0N4XuD Wu243n3nhcGD+hBRVlbupCnzW64iAAAg1/dd+Xy+XO4vEgotZgvDMGIvr+ioSJZtkUuYXlzh 0KBOjPMVbHeK1jkujVp9+sy5s+fwCgQAgH89hO+Na7XjevHFd0aPnfHd9z+3dEUAAECu77uy HE5+QYFSqbbb7Vwut118HJfLFQmFGq2u1doHTXH+QvrceY/7+vrs/vOHW90WAAC4IQjff5Gq 6hqqJrVac6sbAgDQJrjqu+oNBr2hduip1Wp1fDCZLa5LnBHV/96ovqEeflUm9aa8I2vSd9ns Nn+h5LchK8Q80fNnNn2X+9c94ckvd7tPZzGN3fOqlO/x06Clzt1PjnmDiPK1lSN3veSiQCJK 8on+pv9jp6ty12fv/0/C6ACRd4muevKBt3QW0xd9FvXyj38mdePUiL7tpEHHFVlLT36tNLlP /RivgCc7juvpG8NhOJdVRWvSdx0ou+C6rq4+kQvihnWShUt5Hiqzfl/p+dfP/6w26xOkIdd3 XK5FR4U/9tiDSd07czicjMysdes2HvrrmOtdOnfu8MD99yZ2bCeRiNVqzYEDR99+d41arfHz 8/1py2disdfLr7y/afO28XePfH7VUp3OcM/k+0tLy4lowvhRs2dNCQkJKi+v3Pjtj99+t9VR 4Ker30hO7v7cqjcnTxobFxd98lTa08+8olSqnTWmpCTNmzNt9Zr1p8+cc3tEAABQF8L3Ngxf udzv8f8s6N2ru0AgvJye+cGHn6WmnnW9S1xc1EMLZnfu1F4iEeflF27e/OumzduIiGXZr7/6 X3FJ6ZKlzzu2fP21Z6OjIu6buchsNhPRmDHDFsyfGRwcUFpa8fmX3/30U+3bg1csfzQgQH7q VNrsWZN5PP5vv+96+51PrNarjUf4AsAdr6ljkOT+fizLUanVJpOr50YeSxj9bOdJYZ5+udpy Kc/zsYTRyzpOIKIKg+r18z8T0UPxw0Ss4OF2I4no3Yu/luirdRbjqarstOo8Rwmnq3JPVWWf r8l3XaBTgjTkzaRZDMNkqkuDPXxYhnWuWtl5isFmNtus/eXtH4gd4vYYgz1k3w54fEhgopgn stlt3X2i7wrp6rau3v7xAwI61Jh0JxRZxDCTInqt6jyViG7wuBoUFCT/6ssPBg3sLRZ72my2 rl0SR44c5HavXind+/VNrqlRnTqVRgwzYcJdz6z4DxFVVirefncNEc1/4F6RSPjggzOJ6MP/ rXN0XKdNHb/quSXR0REmkzksLHjZU4vnzZ1et9gVyx8zGI1ms6Vvn55zZk+tu+qBedN69eo+ a9Ykt20DAAAXEL6N1dWa4evhIfzy8/fbt499653VTy17ITX1bJ/ePdzuFR0VoVBUvff+p489 vnLbtp1LlywcfdcQIrJarc/+97UB/VNGjRpMREOH9B86pN+z/33d0XHt1y/55ReXp54+9+SS VcdPpD638slhQ/s7y0xJ7hYXFzVz9qMr//v6tKnjhwzuV7dGhC8A3PHczNXkIBGL5XJ/i8VS VFTiYjMp3+PB+KFmm2Xi3jezNWX+QskfQ5+dEd1vdfrOapNmS97RsSHde/nHr+39UJiH75mq vI05h4goX1s54+AHfgLJwVEvENEDRz52TqvgukDHNkKW9/7F31en7ySiUE9fg9XsbM/u0rNL Tqy/L6rfys6Tu/tEuz3M+bFDxTxRoVYx/+jqPE1FkEjWzTey7gYN1rWr5OwPuUcURjURBYik +0Y8PzSoE5dhb/C4GjRv7nSx2KuoqHThI8vy84sCA+Vdu3Z0e1x79v61ectvVVXVRCSX++38 47vBg/tyuVyLxbJ16/bRowYnJ3f/+H+vhoYEnT178fsffiEilmUXLZxDRG+9/ck3G7ZMnXL3 0ysee+D++zZs/NH5+9PefYdXPP3ytKnjVyx/tFvXxHo1JiZ22LfviNu2AQBAYxC+LupqzfCd dM9YX1/ZuPGzy8sriejQX8e4XPe/Pu3YuW/Hzn2Oz8eOnWrfPn74sIG/b99DRNnZeR99/MWK ZY+mp2c/8/Rjaz79+vLlTMeWM++bfOlSxqrn3yKigwf/jouLmXHfPbt2H3SsZRjm1dc+0OkM paXlaWnnk5O7/bnrgLNGhC8A3PHc/+cr9vIKDw+z2+15+QWOi4KNSfKJ5jKswWZa2bn2mh/D 2FmG09E79FD5JSJaeeb7bYOXJflGm22WZ09/63aUjtsCichit36ZtdfxuVCrqLv7KUU2ERXq FETkLfB0e6TJfrFE9GXWvjxNBRGV6KtLCqvrbtBgXRxinu08qadfrIznwWE4RCRguTKBZ4VB dSPH1aAeSV2I6OtvNuXnFxFRaWn5H3+Uuz0uDsMsX7a4R48u3lIJh8MhIoGA7+0traxUENHz L76zZdNn3bp1MpvNq15422azEVFsbJRUKjEYjI75J7b8+Otjj8738vJo1y7m7NmLjmJPnz5H REXFJUQk9ZbWrfG773/GxBUAADcC4et0y8O3Z8+uly9nOjqutU2yuBnCTUR8Pv/hh2YNHdJf LvdjWQ7Lcs+eu+Bc+/U3WwYN6rvxm48zMnM+/+Jb5/IOHeK3/Pir8+vhw8frjmwqKCh2vkeg orLKz9enbo0IXwC447npu4ol4oiwMCJ7Tm6+1t0sETKBFxEJWX4v//h/FMLzcHwo1CrSavKT fWMzVKWZ6lK3jXNbIBEpzfq6l3vrMtmsRGS3ExFx7O4nG/TmexJRka6qsQ2urUvECr7ou0jG 99JZTIfKL+usxlHBXYmIdTkYuynH1XALvSVEVFxc5uZI6rZQJPx0zZve3lKdznD48AmdXj9i +EAiYjm1LSwqKj13/lKPpC6ZmXlZWbmOhVKJmIiUSqUjnq1WW3V1jZeXh2O5g8lsJiK7zU5E HOZOm6MSAOAWQvjWdevDVyppVvI6PL380QEDe7/33tr0jGyjwfjww7NDggOda2022/Y/9nbr mrhjx966z6x6eAiVqqvzRyiVKqFQwLKs48lno/Hqq5LsNltTbv8CANxJXP2vJ5FKIsJCrVZr bm6+Tq93W5bapCOiPE3FqN0vN7jBqOCuyb6xRNTBO3RSRMqWvL9vsECiK/F4M9SYdb4CcbCH rOl1dfIOk/G9iGjC3tcLdIoAkdQRnxaXV7WbdFwNtlCp9vGRBQUFNNw6W22lLHv1uaOOHdp5 e0uJaOq0BwuLSuRyP0ff1XJl/o8Rwwc6bue2bx87YfyorT//QUSO4JRKpY6hxSzLkcm8iUip bPR6NgAA3BQIX7d1tXr4qnx8pC42sDd0NoYO7b96zVe/bNvh+CrzltRd6+/vu3jRvJMnzzz8 0Jxduw86ZpogIoWiqu5lYscYKOeUXQAAbVyjVyilUklkeKjJZMrMzjEYDRwOw+G4uXqaWp1r tdsjvPzvCunmWBIokj17ZWSOhCdyfH713E9E9FTHCb6Cq/87G221l1R9+eImFnjTHa/MJKK5 sYPDPHwddd0V0t31LkZ7bbM1FiMRDQ/qUn+Dm3pcJ0+eIaJZsyaHhgQRUUCAfOTIwc61Gq3O MeI3Pj72agOuPJ7qeLnC0CH/mNdBIvFavmwxEb359sdE9OQTD/v4yIgoMzNHqVQLhYKpU8YR 0aRJ47y8PNRqzcVLmW4bSUQ+Mu9ZMycHBzfcxwYAgMYgfG/D8D1+/HTXrokBAXLnkrrXiIlI pVJ7/7Nr6uC8oSqReHXs2J7H5zlXrXpuSXZO7oKHl168lP7iC08xV4Yvpafn9O6V5NysT5+e Fy+mu22hA8IXAO54jd53DQ0JJmIEAkFCfNyVZfaz5y7ZG7+oWWFQbcg+MDtm4Ds95qxInMgw 5CeQENFLaVuIaEWnib4C8b6y8+uz9if5xowI6vxs50lPHP/Ssa/arC/RVweJZN8NeCJXW16m r3nyxHrXBd506zJ2jwnpHubhu3P4SrVZL+aJthYc2150ysUul5UlFQaVv1DyZd9HMtQlQwI7 2uw2DsPhMpyWOK4vvvxu1MjBoSFBv277Wq3WiMVe237duWNH7VNAJpMp7eyFrl0SP3z/5ays HKvN+p/HV2ZkZFdWKvz8fNeueSszK3fQwN42m43D4XBZloiWLlnk4yM7cPDohg0/duvaadjQ /suXLX5q2YtWq/XTteuXLnnkqaWPLHx4rljsSUSfrv2mKU/4ENHixfPumThmyOC+8x54oinb AwCAA8L3NgzfLT/+eu/0ias/eW3dZxtrqpVdunQkoo8/+dK5wclTZ5b838IH5884+vcpjVqb k5tPRH8fS507Z5pCUa03GBbMn1lRUens306dcndS985Tpy+wWm3PrXpz8w+f3XffxA0bfiSi 9V9vWvvpW6ueW7J7z8HBg/p0SkxwvkrHLYQvANzxGr7vyufz611TJCKDwegiOx1eO7f15bM/ pqtKpHwPAYd3oabwk/QdRNRH3m5CWLLNbnv3wq9E9N7FX612+6jgroMDr85P+/SpjZdUxV48 YXef6I7e4a4LbAlFuqp7D7y3u/Sc2qzncjhp1Xnbi1Jd72KwmhYf+yytOi/C07+DJHT5yQ3Z mnIiipZcvep5E4+ruLhsztzH9u47rFZruVzu2XOXnHMYOqz87xvHjqcyDHXq1L5rl0Qul2cw GJ948rmz5y6Fh4e0T4hd+d/Xc3LyiSgqOqxXr+7jxo6w2Wwf/u8zIvrfR59brbYRwwcOHNCb iDZs/OnlV97PzS0QCHj5+UWvvvbh199sbuKZTEu7aDSaoqMjmrg9AAAQwvd2DV+dzjDvgSfS L2c9tWTRm28817Nn1yNHT9bd4OLFzLffWT192vivv/pw6dJFjoWvvvbhxUuZz696auUzj+8/ cOT1N/4XIPf39fUJCw1+4vEF//voc8e0i8XFZe+9/+lji+dHRYYT0fETp1f+943u3Tq9+/bz ycndX3jxXeckw24hfAHgjsckdEi+1W2AO1BKStJTSxZOmjL/VjcEAKDFHTn4u/NzTn5+g9tE hYc7P/fuP7rF2wRtEsIXAO5srmbkA7g+DMNMnzZ+55/7b3VDAAAA2gqELwDc8dB3hZuMZdm3 33xOKvH6av0Pt7otAAAAbQLCFwDaArwZDG4yq9X6x469u/ccwpz+AAAArQPhCwBtAfqucPNh wBIAAEArQ/gCwB3v9hozHCsOZJnbq0lNFxMTee38kADQdPghArglEL4AAPCv4Oa+a3BQoFjs xefzrFabRqstKSk1mxt9w2dv/3af91no/Jr021M6i6mJ7RCy/LeSZg0JSuzx27Km79U6UlKS 1nzyuvNrn35jdTpD3Q2EQsGrLz89aFCfvv3H6XS3ZqzOglGvdonqR0QlVTkvfT/7lrThuiVG 9Fk4+vV6C1dtnF6hLLrpx/Xugzv5XBER6Y2a0urc7Se/Op9/9MaLdXpk7NtqnWL9nlduYpm3 Jx6P98vWr15+9b1Dh47deGmN/RB9uvqN5OTuz7/4zk8//d7gjr16dX/x+WXjxs82GIw33gyA 2wTClxC+rSK0Z8rIN96rt3DznOnK/Lz+S5+OHz2OiOx2+zd3jzBpNDdSEVcgmP37HobDISKT VqvIuHxs9YeVly/dSJn1hPToOerND74ZP8qoUt7EYm83Nzd8iWjq1PE2q3Xzll/rLlyx/NGO HdrNnL24sb0QvnCruOq7crlcPz9fIiKyc7lcb6mUz+dlZuY0tr3arDtVlc1l2M6yZr9bzIsr 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 --------------wYhFVQtAMB3lMhnRFPKYHTeT-- --------------YTe69WjVIJwGgSy05TeuXpe0--