Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
We Distribute
  1. Home
  2. General Discussion
  3. Recently, there was a discussion about generic #ActivityPub servers.

Recently, there was a discussion about generic #ActivityPub servers.

Scheduled Pinned Locked Moved General Discussion
activitypubfepc2s
56 Posts 11 Posters 1 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • mariusor@metalhead.clubM mariusor@metalhead.club

    @silverpill lol, based on the "claims" at the begining, why do I feel like the "thanks" at the end should be in quotations?

    Also I take umbrage with calling what I've been doing for the past 8 years as "being not difficult to build nor an interesting concept". I feel like you, and other developers having the benefit of dynamically typed programming languages, underestimate how that can be worked into robust APIs when you're limited by less versatile stacks.

    silverpill@mitra.socialS This user is from outside of this forum
    silverpill@mitra.socialS This user is from outside of this forum
    silverpill@mitra.social
    wrote last edited by
    #4

    @mariusor Mastodon supports all standard activities and has a wide variety of clients. I don't find softwares with similar capabilities impressive, although I respect your work (the only ActivityPub server-client project that is not a vaporware).

    I doubt that language choice makes much difference, and Rust is not a dynamically typed language anyway. The difficulty you might be facing is likely due to JSON-LD.

    The thanks was for your input with regards to collection management.

    mariusor@metalhead.clubM raphael@mastodon.communick.comR 2 Replies Last reply
    0
    • silverpill@mitra.socialS This user is from outside of this forum
      silverpill@mitra.socialS This user is from outside of this forum
      silverpill@mitra.social
      wrote last edited by
      #5

      @julian It looks simple on the surface, but in reality it is much more complicated than a non-generic server. In addition to activity transfer, generic server needs to maintain collections. First of all, a followers collection, which is often used as a delivery target. Then likes, shares etc. It needs to enforce permissions, to prevent actors on the same server from deleting each other posts.

      This is doable if you only care about activities defined in ActivityPub. But then you want to introduce context collection. And then 50 other extensions. How to do that without special-casing every one of them?

      This is where duck typing (FEP-2277) and unified security model (FEP-fe34) become really handy. No matter what the client sends, you can figure out what it is (an object, an actor, or a collection), and enforce permissions.

      1 Reply Last reply
      1
      • silverpill@mitra.socialS silverpill@mitra.social

        @mariusor Mastodon supports all standard activities and has a wide variety of clients. I don't find softwares with similar capabilities impressive, although I respect your work (the only ActivityPub server-client project that is not a vaporware).

        I doubt that language choice makes much difference, and Rust is not a dynamically typed language anyway. The difficulty you might be facing is likely due to JSON-LD.

        The thanks was for your input with regards to collection management.

        mariusor@metalhead.clubM This user is from outside of this forum
        mariusor@metalhead.clubM This user is from outside of this forum
        mariusor@metalhead.club
        wrote last edited by
        #6

        > The thanks was for your input with regards to collection management.

        @silverpill of course, sorry for the misunderstanding. Doubly so, for forgetting Mitra is Rust, I remembered it to be Python. 😄

        And yes, the difficulty is indeed in massaging JSON-LD documents into strongly typed data that are meaningful for library consumers. However I've not despaired yet... there's light at the end of that boring tunnel. 😛

        1 Reply Last reply
        0
        • silverpill@mitra.socialS silverpill@mitra.social

          @mariusor Mastodon supports all standard activities and has a wide variety of clients. I don't find softwares with similar capabilities impressive, although I respect your work (the only ActivityPub server-client project that is not a vaporware).

          I doubt that language choice makes much difference, and Rust is not a dynamically typed language anyway. The difficulty you might be facing is likely due to JSON-LD.

          The thanks was for your input with regards to collection management.

          raphael@mastodon.communick.comR This user is from outside of this forum
          raphael@mastodon.communick.comR This user is from outside of this forum
          raphael@mastodon.communick.com
          wrote last edited by
          #7

          @silverpill

          > Mastodon supports all standard activities and has a wide variety of clients.

          What happens when you send a "Offer" message to an actor on Mastodon? Can they accept it?

          Can I create a group actor on Mastodon? Can I use this actor to boost other actor's posts and have it visible on a Lemmy client?

          How can a Mastodon client ask the server to get a collection of all images with an specific tag?

          @mariusor

          raphael@mastodon.communick.comR silverpill@mitra.socialS 2 Replies Last reply
          0
          • raphael@mastodon.communick.comR raphael@mastodon.communick.com

            @silverpill

            > Mastodon supports all standard activities and has a wide variety of clients.

            What happens when you send a "Offer" message to an actor on Mastodon? Can they accept it?

            Can I create a group actor on Mastodon? Can I use this actor to boost other actor's posts and have it visible on a Lemmy client?

            How can a Mastodon client ask the server to get a collection of all images with an specific tag?

            @mariusor

            raphael@mastodon.communick.comR This user is from outside of this forum
            raphael@mastodon.communick.comR This user is from outside of this forum
            raphael@mastodon.communick.com
            wrote last edited by
            #8

            @silverpill

            @mariusor

            Also, reading FEP-aea97 and I don't see anything there that my modest little server made with a "dynamic language" doesn't do already.

            And It's not even like what I am doing is novel or incredibly diffiicult. If you spent a little time embracing RDF and JSON-LD, you could take a look at what Vocata did and you'd see how easy it can be implement the AP API.

            raphael@mastodon.communick.comR silverpill@mitra.socialS 2 Replies Last reply
            0
            • raphael@mastodon.communick.comR raphael@mastodon.communick.com

              @silverpill

              @mariusor

              Also, reading FEP-aea97 and I don't see anything there that my modest little server made with a "dynamic language" doesn't do already.

              And It's not even like what I am doing is novel or incredibly diffiicult. If you spent a little time embracing RDF and JSON-LD, you could take a look at what Vocata did and you'd see how easy it can be implement the AP API.

              raphael@mastodon.communick.comR This user is from outside of this forum
              raphael@mastodon.communick.comR This user is from outside of this forum
              raphael@mastodon.communick.com
              wrote last edited by
              #9

              @silverpill @mariusor

              > And yes, the difficulty is indeed in massaging JSON-LD documents into strongly typed data that are meaningful for library consumers.

              Maybe this could help: https://activitypub.mushroomlabs.com/topics/reference_context_architecture/

              1 Reply Last reply
              0
              • raphael@mastodon.communick.comR raphael@mastodon.communick.com

                @silverpill

                > Mastodon supports all standard activities and has a wide variety of clients.

                What happens when you send a "Offer" message to an actor on Mastodon? Can they accept it?

                Can I create a group actor on Mastodon? Can I use this actor to boost other actor's posts and have it visible on a Lemmy client?

                How can a Mastodon client ask the server to get a collection of all images with an specific tag?

                @mariusor

                silverpill@mitra.socialS This user is from outside of this forum
                silverpill@mitra.socialS This user is from outside of this forum
                silverpill@mitra.social
                wrote last edited by
                #10

                @raphael

                What happens when you send a "Offer" message to an actor on Mastodon?

                The behavior of Offer activity is not described in ActivityPub, so Mastodon is not required to support it. Curiously, ActivityPub mentions Offer when it talks about the side effects of Accept:

                The side effect of receiving this in an inbox is determined by the type of the object received, and it is possible to accept types not described in this document (for example, an Offer).

                ...This statement is not compatible with the idea of a generic server.

                Can I create a group actor on Mastodon?

                I don't know. But it can create Service actors, I guess it can be easily patched to allow creation of Group actors too.

                Can I use this actor to boost other actor's posts and have it visible on a Lemmy client?

                I think FEP-1b12 Announce is not compatible with ActivityPub. It has different side effects, doesn't update shares collection.

                How can a Mastodon client ask the server to get a collection of all images with an specific tag?

                Maybe something like /api/v1/timelines/tag/{tag}?only_media=true ?

                @mariusor

                raphael@mastodon.communick.comR julian@activitypub.spaceJ 3 Replies Last reply
                0
                • silverpill@mitra.socialS silverpill@mitra.social

                  @raphael

                  What happens when you send a "Offer" message to an actor on Mastodon?

                  The behavior of Offer activity is not described in ActivityPub, so Mastodon is not required to support it. Curiously, ActivityPub mentions Offer when it talks about the side effects of Accept:

                  The side effect of receiving this in an inbox is determined by the type of the object received, and it is possible to accept types not described in this document (for example, an Offer).

                  ...This statement is not compatible with the idea of a generic server.

                  Can I create a group actor on Mastodon?

                  I don't know. But it can create Service actors, I guess it can be easily patched to allow creation of Group actors too.

                  Can I use this actor to boost other actor's posts and have it visible on a Lemmy client?

                  I think FEP-1b12 Announce is not compatible with ActivityPub. It has different side effects, doesn't update shares collection.

                  How can a Mastodon client ask the server to get a collection of all images with an specific tag?

                  Maybe something like /api/v1/timelines/tag/{tag}?only_media=true ?

                  @mariusor

                  raphael@mastodon.communick.comR This user is from outside of this forum
                  raphael@mastodon.communick.comR This user is from outside of this forum
                  raphael@mastodon.communick.com
                  wrote last edited by
                  #11

                  @silverpill @mariusor

                  > The behavior of Offer activity is not described in ActivityPub

                  You can still take the document and place in the target inboxes, leaving to the *client* to figure out what to do with it.

                  You don't need to describe the specific case if the general case (activities must be placed in the target inbox) is enough.

                  Is this your objection when you are talking about "Generic Servers"? Because if that is the case then I can definitely argue that my server is it.

                  silverpill@mitra.socialS 1 Reply Last reply
                  0
                  • raphael@mastodon.communick.comR raphael@mastodon.communick.com

                    @silverpill

                    @mariusor

                    Also, reading FEP-aea97 and I don't see anything there that my modest little server made with a "dynamic language" doesn't do already.

                    And It's not even like what I am doing is novel or incredibly diffiicult. If you spent a little time embracing RDF and JSON-LD, you could take a look at what Vocata did and you'd see how easy it can be implement the AP API.

                    silverpill@mitra.socialS This user is from outside of this forum
                    silverpill@mitra.socialS This user is from outside of this forum
                    silverpill@mitra.social
                    wrote last edited by
                    #12

                    @raphael

                    what Vocata did

                    This project is often brought up as an example of a generic server, but it never reached production stage. The last commit was in 2023.

                    It is one thing to have an idea and build a prototype, and a completely different thing to build an application that is secure and interoperates with the rest of the network.

                    @mariusor

                    raphael@mastodon.communick.comR trwnh@mastodon.socialT 2 Replies Last reply
                    0
                    • raphael@mastodon.communick.comR raphael@mastodon.communick.com

                      @silverpill @mariusor

                      > The behavior of Offer activity is not described in ActivityPub

                      You can still take the document and place in the target inboxes, leaving to the *client* to figure out what to do with it.

                      You don't need to describe the specific case if the general case (activities must be placed in the target inbox) is enough.

                      Is this your objection when you are talking about "Generic Servers"? Because if that is the case then I can definitely argue that my server is it.

                      silverpill@mitra.socialS This user is from outside of this forum
                      silverpill@mitra.socialS This user is from outside of this forum
                      silverpill@mitra.social
                      wrote last edited by
                      #13

                      @raphael Placing activities in the target inbox is not always enough, sometimes there are side effects.

                      In my FEP I discuss how we can deal with that.

                      There is more to it, see my response to @julian:

                      Link Preview Image
                      Post by @silverpill

                      Post by @silverpill

                      favicon

                      Mitra Zero (mitra.social)

                      @mariusor

                      raphael@mastodon.communick.comR 1 Reply Last reply
                      0
                      • silverpill@mitra.socialS silverpill@mitra.social

                        @raphael

                        what Vocata did

                        This project is often brought up as an example of a generic server, but it never reached production stage. The last commit was in 2023.

                        It is one thing to have an idea and build a prototype, and a completely different thing to build an application that is secure and interoperates with the rest of the network.

                        @mariusor

                        raphael@mastodon.communick.comR This user is from outside of this forum
                        raphael@mastodon.communick.comR This user is from outside of this forum
                        raphael@mastodon.communick.com
                        wrote last edited by
                        #14

                        @silverpill

                        That's what I saying, though: I took the *ideas* from Vocata and implemented in a way that can work in production.

                        @mariusor

                        1 Reply Last reply
                        0
                        • silverpill@mitra.socialS silverpill@mitra.social

                          @raphael Placing activities in the target inbox is not always enough, sometimes there are side effects.

                          In my FEP I discuss how we can deal with that.

                          There is more to it, see my response to @julian:

                          Link Preview Image
                          Post by @silverpill

                          Post by @silverpill

                          favicon

                          Mitra Zero (mitra.social)

                          @mariusor

                          raphael@mastodon.communick.comR This user is from outside of this forum
                          raphael@mastodon.communick.comR This user is from outside of this forum
                          raphael@mastodon.communick.com
                          wrote last edited by
                          #15

                          @silverpill

                          > generic server needs to maintain collections.

                          If you are talking about "any arbitrary collection beyond followers/following/inbox/outbox/shares/likes". I'll disagree with you.

                          @julian @mariusor

                          raphael@mastodon.communick.comR 1 Reply Last reply
                          0
                          • raphael@mastodon.communick.comR raphael@mastodon.communick.com

                            @silverpill

                            > generic server needs to maintain collections.

                            If you are talking about "any arbitrary collection beyond followers/following/inbox/outbox/shares/likes". I'll disagree with you.

                            @julian @mariusor

                            raphael@mastodon.communick.comR This user is from outside of this forum
                            raphael@mastodon.communick.comR This user is from outside of this forum
                            raphael@mastodon.communick.com
                            wrote last edited by
                            #16

                            @silverpill

                            > But then you want to introduce context collection. And then 50 other extensions. How to do that without special-casing every one of them?

                            You don't! An extension is an extension. A Generic server only needs to support the base protocol. Extensions are optional, not a requirement.

                            @julian @mariusor

                            smallcircles@social.coopS 1 Reply Last reply
                            0
                            • silverpill@mitra.socialS silverpill@mitra.social

                              @raphael

                              What happens when you send a "Offer" message to an actor on Mastodon?

                              The behavior of Offer activity is not described in ActivityPub, so Mastodon is not required to support it. Curiously, ActivityPub mentions Offer when it talks about the side effects of Accept:

                              The side effect of receiving this in an inbox is determined by the type of the object received, and it is possible to accept types not described in this document (for example, an Offer).

                              ...This statement is not compatible with the idea of a generic server.

                              Can I create a group actor on Mastodon?

                              I don't know. But it can create Service actors, I guess it can be easily patched to allow creation of Group actors too.

                              Can I use this actor to boost other actor's posts and have it visible on a Lemmy client?

                              I think FEP-1b12 Announce is not compatible with ActivityPub. It has different side effects, doesn't update shares collection.

                              How can a Mastodon client ask the server to get a collection of all images with an specific tag?

                              Maybe something like /api/v1/timelines/tag/{tag}?only_media=true ?

                              @mariusor

                              julian@activitypub.spaceJ This user is from outside of this forum
                              julian@activitypub.spaceJ This user is from outside of this forum
                              julian@activitypub.space
                              wrote last edited by
                              #17

                              > @silverpill@mitra.social said:
                              >
                              > I think FEP-1b12 Announce is not compatible with ActivityPub.

                              Shots fired 🔥

                              1 Reply Last reply
                              0
                              • silverpill@mitra.socialS silverpill@mitra.social

                                @raphael

                                What happens when you send a "Offer" message to an actor on Mastodon?

                                The behavior of Offer activity is not described in ActivityPub, so Mastodon is not required to support it. Curiously, ActivityPub mentions Offer when it talks about the side effects of Accept:

                                The side effect of receiving this in an inbox is determined by the type of the object received, and it is possible to accept types not described in this document (for example, an Offer).

                                ...This statement is not compatible with the idea of a generic server.

                                Can I create a group actor on Mastodon?

                                I don't know. But it can create Service actors, I guess it can be easily patched to allow creation of Group actors too.

                                Can I use this actor to boost other actor's posts and have it visible on a Lemmy client?

                                I think FEP-1b12 Announce is not compatible with ActivityPub. It has different side effects, doesn't update shares collection.

                                How can a Mastodon client ask the server to get a collection of all images with an specific tag?

                                Maybe something like /api/v1/timelines/tag/{tag}?only_media=true ?

                                @mariusor

                                raphael@mastodon.communick.comR This user is from outside of this forum
                                raphael@mastodon.communick.comR This user is from outside of this forum
                                raphael@mastodon.communick.com
                                wrote last edited by
                                #18

                                @silverpill

                                > I think FEP-1b12 Announce is not compatible with ActivityPub. It has different side effects, doesn't update shares collection.

                                Why?

                                Updating the shares collection is orthorgonal to the behavior expected from a Group actor that claims to support 1b12.

                                Sure, you can say that if the server does not update the shares collection, it's not fully compliant with AP APi, but there is nothing a Lemmy server to add every activity to the shares collection.

                                @mariusor

                                silverpill@mitra.socialS 1 Reply Last reply
                                0
                                • raphael@mastodon.communick.comR raphael@mastodon.communick.com

                                  @silverpill

                                  > But then you want to introduce context collection. And then 50 other extensions. How to do that without special-casing every one of them?

                                  You don't! An extension is an extension. A Generic server only needs to support the base protocol. Extensions are optional, not a requirement.

                                  @julian @mariusor

                                  smallcircles@social.coopS This user is from outside of this forum
                                  smallcircles@social.coopS This user is from outside of this forum
                                  smallcircles@social.coop
                                  wrote last edited by
                                  #19

                                  @raphael @silverpill @julian @mariusor

                                  I agree. Aboveall we need to know where protocol ends and 'app' begins. Be generally more deliberate in terminology use, and no longer talk in overloaded terms that have different unclear meanings to different people in different settings (to avoid using 'contexts' one of such overloaded words)

                                  I've noticed for instance people having a very different notion of what a 'generic server' is, in definitions that are almost diametrical opposites.

                                  My definition of generic is 'not specific' i.e. a generic server is a pure #ActivityPub protocol implementation (which is something to agree upon, what that exactly entails), having no knowledge of *any* app / solution built on top of it or 'passing through' its messaging architecture.

                                  In the other meaning a generic server 'knows/does/has it all' i.e. it understands everything we comprise to be 'the fediverse' in a kind of hard-wired fashion based on the functionalities that (marginally) interoperate today.

                                  smallcircles@social.coopS silverpill@mitra.socialS S 3 Replies Last reply
                                  0
                                  • smallcircles@social.coopS smallcircles@social.coop

                                    @raphael @silverpill @julian @mariusor

                                    I agree. Aboveall we need to know where protocol ends and 'app' begins. Be generally more deliberate in terminology use, and no longer talk in overloaded terms that have different unclear meanings to different people in different settings (to avoid using 'contexts' one of such overloaded words)

                                    I've noticed for instance people having a very different notion of what a 'generic server' is, in definitions that are almost diametrical opposites.

                                    My definition of generic is 'not specific' i.e. a generic server is a pure #ActivityPub protocol implementation (which is something to agree upon, what that exactly entails), having no knowledge of *any* app / solution built on top of it or 'passing through' its messaging architecture.

                                    In the other meaning a generic server 'knows/does/has it all' i.e. it understands everything we comprise to be 'the fediverse' in a kind of hard-wired fashion based on the functionalities that (marginally) interoperate today.

                                    smallcircles@social.coopS This user is from outside of this forum
                                    smallcircles@social.coopS This user is from outside of this forum
                                    smallcircles@social.coop
                                    wrote last edited by
                                    #20

                                    @raphael @julian @mariusor

                                    Another example of the need for careful terminology use is in the post that @silverpill quoted above:

                                    > prevent actors on the same server from deleting each other posts

                                    "post"? There is no post in #ActivityPub, not as a verb and neither as a noun. While I am not worried that silverpill used the word in a wrong meaning here, the terminology easily leads to confusion where someone who interprets AS/AP to be equivalent to the fediverse we have today, pictures in their mind as Mastodon posts or toots in fedi slang, or elsewhere called statuses.

                                    That is app terminology. AP only knows Actor, Activities, Objects, and perhaps Collections. Period. The rest is solution design.

                                    Where they are transferred they can be said to be messages, and messaging happens.

                                    1 Reply Last reply
                                    0
                                    • smallcircles@social.coopS smallcircles@social.coop

                                      @raphael @silverpill @julian @mariusor

                                      I agree. Aboveall we need to know where protocol ends and 'app' begins. Be generally more deliberate in terminology use, and no longer talk in overloaded terms that have different unclear meanings to different people in different settings (to avoid using 'contexts' one of such overloaded words)

                                      I've noticed for instance people having a very different notion of what a 'generic server' is, in definitions that are almost diametrical opposites.

                                      My definition of generic is 'not specific' i.e. a generic server is a pure #ActivityPub protocol implementation (which is something to agree upon, what that exactly entails), having no knowledge of *any* app / solution built on top of it or 'passing through' its messaging architecture.

                                      In the other meaning a generic server 'knows/does/has it all' i.e. it understands everything we comprise to be 'the fediverse' in a kind of hard-wired fashion based on the functionalities that (marginally) interoperate today.

                                      silverpill@mitra.socialS This user is from outside of this forum
                                      silverpill@mitra.socialS This user is from outside of this forum
                                      silverpill@mitra.social
                                      wrote last edited by
                                      #21

                                      @smallcircles @raphael @julian @mariusor I use the same definition of generic. With ActivityPub, it is not possible to have no knowledge at all, but we can try to minimize required knowledge and this is what my FEP is about.

                                      smallcircles@social.coopS 1 Reply Last reply
                                      0
                                      • silverpill@mitra.socialS silverpill@mitra.social

                                        @smallcircles @raphael @julian @mariusor I use the same definition of generic. With ActivityPub, it is not possible to have no knowledge at all, but we can try to minimize required knowledge and this is what my FEP is about.

                                        smallcircles@social.coopS This user is from outside of this forum
                                        smallcircles@social.coopS This user is from outside of this forum
                                        smallcircles@social.coop
                                        wrote last edited by
                                        #22

                                        @silverpill @raphael @julian @mariusor

                                        Yes, I see you working hard in that quest.

                                        But in the chaotic fediverse that evolved by post-facto interoperability that is a wicked challenge. Post-facto interop means "if I am first I can become law, and drag fediverse sideways in my image".

                                        In another branch of this thread, there's another confusing thing. "how can a mastodon client ask the server .." and you respond with a possible URL pattern that may be defined.

                                        > Maybe something like `/api/v1/timelines/tag/{tag}?only_media=true` ?

                                        Perhaps Mastodon's non-generic server may have that, but not a generic server, but it is unclear which one is referred to.

                                        Since microblogging nowhere aggregates comprehensive overview it is an echo chamber for confusion.

                                        smallcircles@social.coopS silverpill@mitra.socialS 2 Replies Last reply
                                        0
                                        • raphael@mastodon.communick.comR raphael@mastodon.communick.com

                                          @silverpill

                                          > I think FEP-1b12 Announce is not compatible with ActivityPub. It has different side effects, doesn't update shares collection.

                                          Why?

                                          Updating the shares collection is orthorgonal to the behavior expected from a Group actor that claims to support 1b12.

                                          Sure, you can say that if the server does not update the shares collection, it's not fully compliant with AP APi, but there is nothing a Lemmy server to add every activity to the shares collection.

                                          @mariusor

                                          silverpill@mitra.socialS This user is from outside of this forum
                                          silverpill@mitra.socialS This user is from outside of this forum
                                          silverpill@mitra.social
                                          wrote last edited by
                                          #23

                                          @raphael Nevermind, side effects wouldn't be a problem. However, it still doesn't seem to be compatible with ActivityPub... Because Announce activity is not defined in C2S context 🙂

                                          Link Preview Image
                                          ActivityPub

                                          The ActivityPub protocol is a decentralized social networking protocol based upon the [ActivityStreams] 2.0 data format. It provides a client to server API for creating, updating and deleting content, as well as a federated server to server API for delivering notifications and content.

                                          favicon

                                          (www.w3.org)

                                          @julian @mariusor

                                          smallcircles@social.coopS 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          Powered by NodeBB Contributors
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups