Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Biatec Wallet to UseWallet #202

Closed
wants to merge 13 commits into from
Closed

Biatec Wallet to UseWallet #202

wants to merge 13 commits into from

Conversation

scholtz
Copy link
Contributor

@scholtz scholtz commented Jul 18, 2024

Support for Biatec Wallet (known before as AWallet) in use-wallet lib

@drichar
Copy link
Collaborator

drichar commented Jul 19, 2024

Hi @scholtz thank you for the PR! It's an interesting approach – simply extending the WalletConnect provider and overriding the name and logo – but I'm not keen on the precedent it sets.

Biatec Wallet can already be used with the existing WalletConnect provider. If a developer wants to explicitly show Biatec as an option in their app's wallet menu, it could be done by setting WalletConnect's metadata property:

import { NetworkId, WalletId, WalletManager } from '@txnlab/use-wallet'

const walletManager = new WalletManager({
  wallets: [
    {
      id: WalletId.WALLETCONNECT,
      options: { projectId: '<YOUR_PROJECT_ID>' },
      metadata: {
        name: 'Biatec',
        icon: 'data:image/svg+xml;base64,...'
      }
    },
  ],
  network: NetworkId.TESTNET
})

The console output and error messages (if any) would show "Biatec" instead of "WalletConnect", since they use the value for this.metadata.name instead of a hardcoded value.

But having duplicate providers for every WalletConnect-compatible wallet just adds unnecessary clutter to the library. That said, I understand why you did it. In addition to the alternative approach I described above, there are two other potential solutions that I'd prefer:

  1. You can add Biatec to WalletConnect Explorer. Then it could be shown in the "recommended wallets" that appear in the WalletConnect modal. This is how we show Fireblocks as a predefined option in the NFDomains frontend:
// in the WalletConnect provider's options
explorerRecommendedWalletIds: [
  '5864e2ced7c293ed18ac35e0db085c09ed567d67346ccb6f58a0327a75137489' // Fireblocks ID
]
  1. A better solution in the library itself would be to expose an API to dynamically extend the WalletConnect provider in the consuming application's configuration. This would achieve the same outcome, and show Biatec Wallet as a separate option in an app's wallet menu (even though it would open an identical modal to the WalletConnect provider). I'll have to think about the best way to do this without introducing breaking changes. But I think it can be done. You are also welcome to give it a try!

For now, though, since Biatec is indeed already compatible with the library's existing WalletConnect provider, I would prefer not to go down the path of having duplicate providers that just extend WalletConnect. I hope you understand.

@scholtz
Copy link
Contributor Author

scholtz commented Jul 19, 2024

I would prefer this way.. you make the list of algorand capable wallets, and i believe naming the Biatec wallet (first open source algorand wallet) in this list is important

Its quite strange thinking all devs will have the biatec logo included in their wallet setup scripts.

i have tried WalletConnect Explorer approach before and that was one of the reasons why we rebranded AWallet to Biatec.. WalletConnect is centralized service and they decided that the AWallet logo is too similar to algorand so they just declined it.. hopefully as Biatec wallet they will approve it

nevertheless i think this PR should be included because i have feedback what people should do to include AWallet into their website and when i just say them implement wallet connect its quite strange for them as they do not have it listed on their website as supported option

@pbennett
Copy link
Collaborator

This looks to just be WalletConnect itself, popping the exact same dialog, but with Biatec logo as if it does something 'different' - but it doesn't. This isn't a new provider and shouldn't be accepted as such.

@drichar
Copy link
Collaborator

drichar commented Jul 19, 2024

I understand the importance of visibility for Biatec Wallet. I'd be happy to add it to the list of supported wallets in the documentation, and I can highlight its compatibility with the WalletConnect provider. This should help clarify for developers that Biatec is a supported option. If the rebranded wallet is added to WalletConnect Explorer I can also include its ID with explicit instructions to use it in explorerRecommendedWalletIds.

But I don't think adding a separate provider that's essentially just a reskin of WalletConnect makes sense from a library maintenance perspective.

If you add any additional features/functionality/UI to Biatec Wallet beyond what the WalletConnect provider already has – warranting its own separate provider – I'd be happy to add it. To @pbennett's point, ideally it would distinguish itself visually from the WalletConnect modal to avoid confusion.

In the meantime, let me know if any of the alternative solutions I offered would be acceptable and I'll make sure to include clear instructions for developers in the documentation.

@drichar
Copy link
Collaborator

drichar commented Jul 20, 2024

@scholtz I've added Biatec to the list of supported wallets: https://txnlab.gitbook.io/use-wallet/fundamentals/supported-wallets#biatec

Let me know if there are any changes you'd like me to make to the description, image, or links.

@scholtz
Copy link
Contributor Author

scholtz commented Jul 20, 2024

additional features/functionality/UI to Biatec Wallet beyond what the WalletConnect provider already has – warranting its own separate provider – I'd be happy to add it. To @pbennett's point, ideally it would distinguish itself visually from the WalletConnect modal

Ok, but the most important thing for me is that in the examples there is a example on how to setup the biatec wallet.. Perhaps this will require somewhere to store the icon.. where is the best place to store the icon so that people does not have to search for it by them selfs?

@drichar
Copy link
Collaborator

drichar commented Jul 22, 2024

Ok, but the most important thing for me is that in the examples there is a example on how to setup the biatec wallet.. Perhaps this will require somewhere to store the icon.. where is the best place to store the icon so that people does not have to search for it by them selfs?

If you host the image somewhere, I could show the following example in the Biatec section:

import { NetworkId, WalletId, WalletManager } from '@txnlab/use-wallet'

const walletManager = new WalletManager({
  wallets: [
    {
      id: WalletId.WALLETCONNECT,
      options: { projectId: '<YOUR_PROJECT_ID>' },
      metadata: {
        name: 'Biatec',
        icon: 'https://wallet.biatec.io/logo.svg'
      }
    }
  ]
})

Otherwise, the example can still use a data URI. But the SVG logo you provided is massive, even after I removed a lot of extraneous markup/attributes and base64 encoded it:

import { NetworkId, WalletId, WalletManager } from '@txnlab/use-wallet'

const walletManager = new WalletManager({
  wallets: [
    {
      id: WalletId.WALLETCONNECT,
      options: { projectId: '<YOUR_PROJECT_ID>' },
      metadata: {
        name: 'Biatec',
        icon: 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAwIDE4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBzdHlsZT0iZmlsbDp0ZWFsO3N0cm9rZS13aWR0aDouMjY0NTgzIiBkPSJNOTQuMjcgMTUxLjYyOWMtLjg2MS0uNTI2LTEuNTEtMS4zNy0xLjgzLTIuMzg2LS4xOTctLjYyLS4xOC0uNjI3IDEuMDgyLS40MzcuNzA1LjEwNSAxLjYuMzU2IDEuOTg4LjU1Ny42OTYuMzYgMS44MTUgMS44NzYgMS44MTUgMi40NTkgMCAuNDg2LTIuMTY2LjM0OC0zLjA1NC0uMTkzbTIzLjk1My0uMjYzYy0uNzg4LS40MTktMi4wOTUtMi4xMjMtMi4xMDgtMi43NS0uMDEtLjQzMyAyLjQ2Ny0uMTgyIDMuNDAzLjM0NS45NTUuNTM2IDIuMTQ4IDEuOTcgMi4xNDggMi41ODIgMCAuNTAzLTIuMzk3LjM4LTMuNDQzLS4xNzdtLTkuMDI0LTEuMTY1Yy0xLjU2Ny0xLjE5My0yLjM4LTIuNzQtMi41NS00Ljg0OS0uMDc1LS45MzMtLjA1NC0xLjY5Ny4wNDUtMS42OTcuODY2IDAgMi43MTQgMS42NyAzLjQzOSAzLjEwNy4zOTguNzg5LjY1NyAzLjg4OC4zNTEgNC4xOTUtLjA3LjA3LS42NDgtLjI3LTEuMjg1LS43NTZtLTguOTA2LTEuMzU0Yy0uNjMtLjY4NC0xLjIxLTEuNjQ4LTEuMzg3LTIuMzA1LS4zMTgtMS4xOC0uMTM2LTMuNDE2LjI3OC0zLjQxNi41NTUgMCAyLjEwOCAxLjY5NyAyLjUwNSAyLjczNy40NzIgMS4yMzcuNDU3IDMuOTA1LS4wMjMgNC4wNjMtLjE2LjA1My0uNzc3LS40MzMtMS4zNzMtMS4wOG0tNi44MDUtMS43NzVjLTIuNzY0LS42MTItNS4yMjMtMS40MjUtNS4zNTctMS43NzItLjA4LS4yMS4xNjktMS4wMjcuNTU1LTEuODE0cy43MDEtMS40NjkuNzAxLTEuNTE1YzAtLjA0Ny0uODAzLjA2Ny0xLjc4Ni4yNTMtLjk4Mi4xODUtMS44NTcuMjU2LTEuOTQ0LjE1Ny0uMDg4LS4xLS4zNjUtLjcxNS0uNjE4LTEuMzY3LS4yNTItLjY1Mi0uODU4LTEuNzI5LTEuMzQ1LTIuMzkzLTEuMjkzLTEuNzYtNS4yODUtNS41MjYtNy4yNzItNi44NTgtMy44MjYtMi41NjQtNC45Ni0zLjg1NS00LjY2Ny01LjMxNi4wOC0uNDAyLjY5Mi0xLjU3NCAxLjM1OS0yLjYwNiAxLjY1LTIuNTUxIDIuNTEtNC40NzIgMi41MTItNS42Mi4wMDItLjU3MS0uMzY0LTEuNjktLjkwMS0yLjc1OGwtLjkwNS0xLjc5Ni43MDYtLjUzMmMxLjkzNi0xLjQ2IDQuNjQ5LTQuOTE2IDQuMjA1LTUuMzYtLjA2LS4wNi0uODQ2LjcyLTEuNzQ1IDEuNzMyLTMuNTUzIDMuOTk3LTcuODE0IDYuNDYzLTE2LjAxNCA5LjI3LTUuMzI0IDEuODIzLTUuODUzIDIuMDYtNy4xODMgMy4yMjgtMS41NTUgMS4zNjUtMS45NjIgMi41MDItMi41MzEgNy4wNjMtLjI4NCAyLjI3NS0uNzA2IDQuNzktLjkzNyA1LjU5MS0uMjMxLjgtLjQwMyAyLjE3LS4zODIgMy4wNDMuMDMyIDEuMzQ2LS4xNTcgMi4wNi0xLjI0OCA0LjY5OC0xLjQ5OCAzLjYyMi0xLjA2OCAzLjcwOC00LjEzOC0uODI3bC0yLjAzNi0zLjAwOC43NDctLjc4NGMuNDExLS40MyAxLjA3NS0uOTc4IDEuNDc1LTEuMjE2Ljk1NS0uNTY4LjkxOS0uOTIyLS4yMzYtMi4zMzEtLjUzLS42NDctLjkxNy0xLjIwOS0uODYtMS4yNXMuNDMtLjI3Ny44My0uNTI2YzEuNzg4LTEuMTIgMi43LTQuNzI3IDIuOTg3LTExLjgyMi4yMTQtNS4yNzQuNTk1LTYuNDYgMi4xOTUtNi44MyA2LjYzNC0xLjUzNSA3LjU4LTEuOTggOC42MTgtNC4wNjYuOTI2LTEuODU4LjktMy43MDEtLjEyMS04LjQ3NS0uODctNC4wNzItMS4wNDctNy4yMS0uNTE2LTkuMjIzLjYwNi0yLjMwMyAzLjc1OS03LjQzMyA1LjY2Ny05LjIyMS4zNzYtLjM1My42ODQtLjcyOS42ODQtLjgzNSAwLS4yNTQtMy4zMjUtMi42OTctNC40NDgtMy4yNjgtLjQ4Mi0uMjQ1LTEuNDU1LS40NS0yLjE2My0uNDU2LTMuODkyLS4wMy02LjYyOCAxLjg3Ny04LjcyMiA2LjA4LS42MDMgMS4yMTItMS41ODIgMi43My0yLjE3NiAzLjM3NC0yLjczMyAyLjk2NS04LjYwMiA0LjA5LTEyLjY2NiAyLjQzbC0uOTEzLS4zNzQgMS4zMjMtLjA1YzEuNDIyLS4wNTQgMy40OTgtLjk0IDMuOTQ0LTEuNjgzLjQxNC0uNjkuMDc2LS43OS0xLjA2LS4zMTQtMS40NDMuNjA1LTQuMDc1LjU5Ny01LjAzOS0uMDE1LTEuMjU5LS44LTIuMjMtMS44MS0yLjc5NS0yLjkwOGwtLjUzNS0xLjA0MiAxLjI0MyAxLjA5NWMxLjUxIDEuMzI4IDIuNjkxIDEuNzUyIDQuNDI1IDEuNTg1IDEuNTA2LS4xNDUgMi41MjMtLjg1MSAxLjY1LTEuMTQ3LTMuMTk1LTEuMDgtNS44MzQtMy4wNzgtNy4wNy01LjM1LS44MDktMS40ODUtMS41MTMtMy45ODItMS41MDQtNS4zMzRsLjAwNi0uOTM2LjQyLjg1NGMuMjMyLjQ3Ljk0MSAxLjMzMyAxLjU3NiAxLjkxOGwxLjE1NSAxLjA2NCAyLjE4OS0uMDEyIDIuMTg4LS4wMTEtMS4wMTItLjUzNWMtLjk3NS0uNTE0LTMuMzUzLTIuNzY2LTMuMzUzLTMuMTc1IDAtLjExLjUwNi4wNzkgMS4xMjQuNDE4IDEuMjgyLjcwMyAzLjg4OCAxLjMyIDQuMjEuOTk2LjEyLS4xMTgtLjIwNC0uNjEyLS43MTgtMS4wOTctLjUxMy0uNDg0LTEuMTctMS4zNDQtMS40Ni0xLjkxMWwtLjUyNS0xLjAzIDEuMTc0Ljg5NWMyLjAyIDEuNTQyIDMuODgzIDEuNTA2IDYuMzQyLS4xMjMuNjktLjQ1NyAxLjIxOC0uODYzIDEuMTc1LS45MDNzLS45ODkuMjI3LTIuMTAzLjU5NGMtMS44Ny42MTgtMi4xMS42NC0zLjE1MS4zMDUtMS4yODQtLjQxNS0yLjAyMy0xLjI3My0yLjI1LTIuNjEzbC0uMTU4LS45MjYuNDg2LjU5NWMxLjA3IDEuMzEgMi42NTIgMS4yNTUgNi4zNjMtLjIyNCAxLjEzMi0uNDUxIDIuODkyLTEuMDM2IDMuOTEtMS4zIDIuNzMyLS43MDYgMS41NjEtLjkyNi0yLjI5OC0uNDMtMS43NzguMjI4LTMuMjcuMzc2LTMuMzE4LjMyOS0uMDQ3LS4wNDcuNjYyLS40MTUgMS41NzUtLjgxOCAyLjAwMi0uODgzIDQuNzgtMS4xNTIgNi44NTgtLjY2MyAxLjgxNy40MjcgMi41NTUuODEgNC4wMzIgMi4wODcgMS4xNTEuOTk3IDMuNjU0IDIuMTU2IDQuNjA1IDIuMTMzLjU5NS0uMDE1LTIuOTYtMy4zOTUtNC41NTItNC4zMjgtMS42MzktLjk2LTQuMTEtMS41NDItNi4xMDctMS40MzgtLjkyLjA0OS0xLjYyNy4wMTYtMS41NzEtLjA3My4yNDItLjM4OCAzLjQ0LS44MjUgNS4yMDMtLjcxIDQuMDQ4LjI2NSA2Ljk2IDIuNTQ2IDEwLjkwMiA4LjUzNyAyLjU1MyAzLjg4MyA0LjIzNCA1LjY3IDYuMTM3IDYuNTI0bDEuMDkyLjQ5IDIuMjE1LTEuMDI3YzQuNzQ3LTIuMiA4Ljc5Ny0yLjUxOCAxNi4wOTctMS4yNiAyLjI1LjM4NyA0LjcxNy43MDQgNS40ODIuNzA0aDEuMzlsLjA3NCAzLjIwMy4wNzQgMy4yMDMuODk0LTEuMTEzYy44OC0xLjA5Ni44OTQtMS4xNTIuODQ2LTMuNTE2bC0uMDQ5LTIuNDAyLTEuNjEtMS43MjFjLTQuMTQtNC40MjUtNC4zMzUtNi41MzYtMS4xMzUtMTIuMjEzIDIuNzQ0LTQuODcgMi43MDQtNC40MS44MTMtOS4zMi0uODgzLTIuMjkyLTEuNjk2LTQuMTY3LTEuODA3LTQuMTY3LS4zMzkgMC0uMjA1IDQgLjE5NiA1LjgyMS43MTYgMy4yNTYuNDM1IDQuODIyLTEuMDA2IDUuNjAzLS4zNzEuMi0yLjE0NC4zMy00LjkwNC4zNi0zLjYuMDM2LTQuMzQ4LS4wMjItNC40NzMtLjM0OC0uMDg3LS4yMjcuMTAyLS41ODIuNDUxLS44NDUuNTMtLjQuNTYzLS41My4yNzQtMS4wOS0uMTgtLjM1LS42OTItMS4wMjItMS4xMzctMS40OTNzLS43MzQtLjkzMy0uNjQtMS4wMjZjLjA5My0uMDk0IDEuMDcyLS4wMzYgMi4xNzUuMTI4IDMuMDIzLjQ1IDMuNzYuMzk4IDQuMjExLS4yOTcuNC0uNjE1IDIuODg3LTkuNzI1IDIuNzA0LTkuOTA3LS4xOTYtLjE5Ni0xLjU1IDEuNjItMi43NTkgMy43LTEuNzgyIDMuMDY4LTMuMTQgMy44OTUtNi4zNzkgMy44ODktMi40ODUtLjAwNS01LjQzLTEuMDk4LTguNjU4LTMuMjEzLTEuNDM5LS45NDMtMy4wMi0xLjg1NS0zLjUxNC0yLjAyNy0xLjUyNC0uNTMxLTMuNzUtLjM5Mi01LjE2My4zMjRsLTEuMjYuNjM4LjU2Ny0uNjAzYy44OTItLjk1IDMuMDQ4LTIuMDA0IDQuNDMyLTIuMTY3IDEuOTQtLjIzIDMuMy4yODMgNS43ODYgMi4xOCAyLjM5IDEuODIzIDMuMTYzIDIuMjI1IDQuMjggMi4yMjUuNiAwIC40OTctLjEyLS43NDUtLjg3Mi0uNzkyLS40OC0yLjQxNi0xLjU5OC0zLjYwOS0yLjQ4Ni0yLjY1OC0xLjk3OC00LjExOS0yLjU4LTUuODMxLTIuNGwtMS4yNi4xMzIuOTI2LS4zOWMuNjY3LS4yODEgMS42MDktLjM2IDMuMzczLS4yODQgMS4zNDYuMDU5IDIuNDQ4LjA3NyAyLjQ0OC4wNCAwLS4yNzgtMi41MzctMS40NTUtMy43MS0xLjcyMi0uODktLjIwMi0xLjIzMS0uMzY1LS44ODQtLjQyMS4zMTItLjA1MSAxLjg2LjIyNSAzLjQ0LjYxNCAyLjU2NC42MyAzLjE2Ny42ODcgNS42MDIuNTI1IDUuNTM2LS4zNjkgNy4wMzItMS4xNDQgOS4yMTgtNC43NzRsMS40MzMtMi4zODItMS4yMjQgMS4zMjNjLS42NzMuNzI4LTEuNzc5IDEuOTI4LTIuNDU3IDIuNjY2LS42NzcuNzM5LTEuNTMgMS40MTctMS44OTMgMS41MDhsLS42NjIuMTY1LjYxLS41MDNjLjMzNC0uMjc3IDEuMDg4LTEuNDkxIDEuNjc1LTIuNjk4IDEuNzcyLTMuNjQ4IDMuMjI4LTQuNzc5IDYuNzcyLTUuMjU3IDMuNTIyLS40NzYgNC43OTctLjc5MSA1LjQyMS0xLjM0Mi4zMzItLjI5My40MjktLjQ0LjIxNS0uMzI5LS4yMTMuMTEyLTEuOTQuMjc3LTMuODM2LjM2Ny0yLjk1NS4xNC0zLjY2Ni4yNjMtNC45Ny44Ni0xLjYzMi43NDktNC4wOTIgMi44OTMtNC45OTYgNC4zNTYtLjc2NCAxLjIzNi0uOTIzLjkwNS0uMjI0LS40NjUgMS4zODctMi43MTggNC42ODUtNC45NDUgOC4zNjYtNS42NTFsMS44MTUtLjM0OS0xLjA1OC0uMjM1Yy0uNTgyLS4xMy0xLjk1Mi0uMjI0LTMuMDQzLS4yMDlsLTEuOTg0LjAyNyAxLjcyLS44MmMxLjQyNy0uNjgyIDIuMDQtLjgyMiAzLjYxMS0uODIyIDEuNjA3IDAgMS44Ni0uMDYgMS42NzktLjQtLjUzOS0xLjAwNS0xLjM3Ny0xLjQ1Mi0yLjY5LTEuNDMyLS43NjkuMDExLTEuMTU2LS4wNjctLjkzNy0uMTkuNTM0LS4yOTggMi4xNjgtLjM0IDQuMTY5LS4xMDQgMS42NDguMTk0IDEuODIuMTU5IDMuNTktLjczMyAxLjAyMy0uNTE1IDIuNDcyLTEuMDQ3IDMuMjItMS4xODMgMS4zODgtLjI1MyAzLjYwNy0uMDQgNC40NzIuNDI5Ljk0Mi41MSAxLjk1OCAxLjgyNSAyLjA5NSAyLjcxMi4xMTYuNzQ2IDAgMS4wNTItLjY3MSAxLjc3Ny0uNzUyLjgxMy0uODExIDEuMDE4LS44MTEgMi44MiAwIDEuNzA2LS4xMDUgMi4xMjctLjg1IDMuNDI0LS40NjcuODE0LS45NzMgMS40NzYtMS4xMjQgMS40NzNzLS43OTctLjI0Mi0xLjQzNS0uNTMyYy0xLjI3Ny0uNTc5LTEuNzE0LS40MzUtMS45ODguNjU1LS4xMTUuNDYuMDQ1Ljg0LjYwNSAxLjQ0LjQyLjQ0OCAxLjYyMSAyLjIzNyAyLjY3MSAzLjk3NSAxLjg4MyAzLjExNiAxLjkwNSAzLjE3NSAxLjU4NSA0LjE0Ni0uMjU4Ljc4LS4yNTggMS41NiAwIDMuNzMuMTc5IDEuNTEuMjUzIDMuMDMxLjE2NiAzLjM4LS4xMjguNTA5LjAzMy43OTUuODA1IDEuNDMyIDEuMzY3IDEuMTI2IDUuMDIgMi45NDcgNS45MTQgMi45NDcgMS4yNjggMCAxLjU4OC4yNDcgMS41ODggMS4yMjcgMCAxLjA1Ny0uNjQyIDIuNzQyLTEuMDQ1IDIuNzQyLS4xNTMgMC0uMjc4LS4yOTgtLjI3OC0uNjYyIDAtLjU1OC0uMTIzLS42NjEtLjc5My0uNjYxLS40MzYgMC0yLjE2Mi0uNDY3LTMuODM2LTEuMDM2bC0zLjA0NC0xLjAzNnYxLjc4OGMwIC45ODQtLjA3NyAzLjA1Ny0uMTcyIDQuNjA4bC0uMTczIDIuODJoMy4wMTVsLS4xMzMuODZjLS4wNzMuNDcyLS4yMDYgMi4xMS0uMjk1IDMuNjM3LS4zNzMgNi40Mi0uNjM0IDcuMjAzLTQuMjA3IDEyLjY1LTQuMTE5IDYuMjc4LTQuNjM1IDcuOTg0LTMuNDkzIDExLjU0OC4zNyAxLjE1OC42NDcgMi4xMzMuNjEzIDIuMTY3LS4yNDYuMjQ2LTIuNTY5LTEuMTktMy43ODMtMi4zNC0yLjYxNi0yLjQ3My0yLjkyMi0zLjk3NS0xLjE0Ni01LjYxOS45NTQtLjg4MiAxLjA1NC0xLjA4Ny44OTItMS44MjgtLjQxNy0xLjkxLS41NTMtMS45NzYtMS0uNDgyLS4yMzIuNzc3LS42OTMgMS44NDktMS4wMjQgMi4zODItLjUyNi44NDYtLjYwMyAxLjMxOC0uNjAzIDMuNzA1djIuNzM2bDMuMTc1IDEuMDIyYzEuNzQ2LjU2MiAzLjQ0NiAxLjAyOCAzLjc3NyAxLjAzNC41ODMuMDEyLjU5LS4wMTIuMTk0LS43NzYtLjIyNC0uNDM0LS40NzktMS4zMDctLjU2Ni0xLjkzOS0uMjA4LTEuNTIzLjUzLTMuMDY1IDMuOTA1LTguMTU5IDQuNTM3LTYuODQ1IDUuNDc4LTkuMjUgNS42ODEtMTQuNTEzLjA3LTEuODIuMTktMy45My4yNjctNC42OTIuMTM3LTEuMzUzLjE3LTEuMzk4IDEuMzc5LTEuOTMzIDIuMjctMS4wMDQgNC4yNDUtMy43MTcgNi4yNTMtOC41ODkuNTI2LTEuMjc0LjQ1OS0xLjIwNC0xLjg5MSAxLjk4NS0xLjAxOSAxLjM4Mi0yLjEzIDIuNzUxLTIuNDcgMy4wNDItLjYwNC41MTYtLjYwMy41MDYuMDQ4LS4zOTcuOTM4LTEuMjk5IDEuMjE2LTIuMTQ0IDEuNjg1LTUuMTA3LjY2My00LjE5MyAxLjY5OS02LjI1NSA0LjYwNC05LjE2IDMuNjM5LTMuNjM4IDkuNDctNi4zNDggMTMuNy02LjM2NS42MzUtLjAwMyAxLjIwMS0uMTU1IDEuMzIyLS4zNTYuMTE3LS4xOTIgMS4xMDUtLjkyIDIuMTk2LTEuNjE1IDEuMDkyLS42OTYgMi4yNTItMS41MTEgMi41NzktMS44MTIuMzI3LS4zLjY2LS40OC43NC0uNC4wODEuMDgxLS4wMzguOTQyLS4yNjMgMS45MTRzLS40MSAxLjg4LS40MSAyLjAxNmMwIC4zNyAxLjM5My4zIDEuOTkyLS4xMDIuMjg3LS4xOTIgMS4yOTYtLjYyIDIuMjQxLS45NTNzMS45OTgtLjc4IDIuMzM4LS45OTRjLjM0LS4yMTUuNjY1LS4zNDUuNzIyLS4yODguMzAyLjMwMi0xLjk4MiAzLjUyNi0yLjkyNyA0LjEzMmwtMS4xNTIuNzRjLS4yNzcuMTc5IDEuMjAyIDMuNzMyIDEuOTc1IDQuNzQ1LjY3NC44ODIuODYyIDEuMzQ3Ljc0MiAxLjgyNS0uMDg5LjM1NC4wNDUgMS4yNzMuMjk2IDIuMDQ0LjY0NSAxLjk4IDIuOTEzIDYuNzUxIDMuNjk4IDcuNzc5LjgwOCAxLjA2LjgyIDEuNDE2LjA3NSAyLjM2My0uMzIuNDA4LS42NDggMS4yMjUtLjcyOCAxLjgxNi0uMTE4Ljg3OS0uMjc5IDEuMTItLjg5IDEuMzM1LTEuNDU3LjUxMi0yLjI5OC0uNDQ5LTIuOTQtMy4zNTgtLjExMy0uNTEyLS4zMjUtLjcyOC0uNzE1LS43MjgtLjYzNCAwLS42MTkuMDk5LjM5OCAyLjUxNC4zNjguODczLjU3MiAxLjY4NS40NTMgMS44MDQtLjEyLjExOS0uNjc5LjE3OC0xLjI0NC4xMzItMS4wMDYtLjA4Mi0xLjAzLS4xMDgtMS4xNjUtMS4yOS0uMTEtLjk1OC0uNDA3LTEuNTE1LTEuNDQ0LTIuNzE2LTEuMjgtMS40ODMtMS41MjMtMS42MTctMy45NzQtMi4xODYtLjQzNi0uMTAyLTEuMjM1LS40MDYtMS43NzYtLjY3N2wtLjk4MS0uNDkxLS4zMTEgMS4xMjRjLS40NjIgMS42NjgtLjM4MSA3LjU5Mi4xNCAxMC4zNS4yNDQgMS4yOS45MjYgMy41NTIgMS41MTYgNS4wMjcgMS44NjQgNC42NTUgMS45MzMgNC45OCAxLjkyNCA5LjAzMS0uMDA2IDIuODUzLS4xMTIgMy45NzItLjQ2MSA0Ljg3LS4yNS42NDEtLjQxNSAxLjIwNC0uMzY3IDEuMjUyLjA0Ny4wNDcgMi45MzUuMjAzIDYuNDE5LjM0NyA0LjIuMTc0IDYuNzg2LjM5NyA3LjY3OS42NjQgMS40MzMuNDI5IDIuOTU1IDEuMzQxIDMuMzI4IDEuOTk1LjEyNS4yMTkgMS4yOTIgMy43MTggMi41OTQgNy43NzcgMi41NiA3Ljk3OCAyLjUxNSA3LjYxMyAxLjE0MiA5LjI2My0uNTgyLjctLjYyMy45MTgtLjQ1OCAyLjQ1NWwuMTggMS42ODYtMS42ODUgMS41OWMtMi40NzYgMi4zMzUtMi40ODcgMi4zMzgtMi44MzMuNzAybC0uODI1LTMuODk0Yy0uNDk3LTIuMzQ0LS41MDMtMi41MzUtLjA5LTIuODQ0LjI0NS0uMTgyLjc1LS4zMzIgMS4xMjEtLjMzNSAxLjI1OS0uMDA3IDEuNDQ0LS4zNi42NzItMS4yNzdsLS43LS44MzMuNDYxLTEuMjA5Yy40MDMtMS4wNTQuNDIxLTEuNDI4LjE0Ni0yLjkyNC0uODU2LTQuNjQ3LTMuNDYzLTcuNzU1LTYuNTE2LTcuNzY5LTEuMTk4LS4wMDYtNS42MjYuNzI2LTYuMTQzIDEuMDE1LS40MTkuMjM1IDEuMzYgMi4wMzUgNC4wMjYgNC4wNzMgMS45NTQgMS40OTQgMi40ODcgMi4yNjUgMi43MDggMy45MTguMTE1Ljg1OC0uMDMxIDEuMjc4LS45NjMgMi43NTMtMS4xMjIgMS43NzYtMi41OTYgNC45NDEtNC4wMTUgOC42Mi0uNDM3IDEuMTMzLTEuMDQ4IDIuMzgzLTEuMzU4IDIuNzc3LS41NDYuNjk1LS42MjMuNzEyLTIuNDM0LjU0NC0xLjUxLS4xNC0yLjAzNC0uMDg1LTIuNzI2LjI4Ny0uOTMzLjUwMy0xLjAzMi40ODgtNS4yMzQtLjc1NGwtMS44NTItLjU0NyAxLjA1OC0uOTNjMi40NTItMi4xNTUgNC45Ni00LjAzNSA1LjM3NS00LjAyOC4yNDUuMDA0Ljc0My40MTcgMS4xMDcuOTE5LjM2NC41Ljc0LjkxNC44MzUuOTE4LjMzNi4wMTQgMi42NzMtMi43NzcgMy40MjMtNC4wOS45MjgtMS42MjIgMS40MjktMy43MjEgMS4xOS00Ljk5Mi0uNDE0LTIuMjA4LTIuMTA1LTMuMi04LjgzNi01LjE4My00LjYwNC0xLjM1Ni01LjQ0LTEuNjM3LTYuODM3LTIuMy0uODEtLjM4NC0uOTItLjM2LTMuMDQ3LjY2NC0yLjU5MyAxLjI0OC01LjUwNyAyLjI1MS04LjY2NSAyLjk4My0zLjMwNC43NjYtOS42ODYuOTUtMTIuOTg4LjM3Ni0zLjIyNy0uNTYyLTcuNjM5LTIuMDM1LTkuNjI2LTMuMjE0LS44NTYtLjUwOC0xLjYxOC0uODYyLTEuNjkzLS43ODctLjE1LjE1IDEuMTIgMi4wNzkgMS42NjUgMi41My4yNzEuMjI2LjIzOS43MzItLjE2NiAyLjU4Ni0xLjI0NSA1LjcxMy0yLjY2IDguNjEyLTcuMTg5IDE0LjczLTIuODUyIDMuODUyLTMuNDAyIDUuNjg1LTIuMzI3IDcuNzYyLjY2IDEuMjc0IDkuMjc4IDkuNzYzIDExLjAxNiAxMC44NS43OTcuNDk4IDEuNTc2IDEuMjYgMS45MjkgMS44ODkuNDk2Ljg4MyAyLjE1OCA1LjI3NSAyLjE1OCA1LjcwNCAwIC4yLTEuNTc3LjExMS0yLjc3OS0uMTU0bTQ2Ljc2LTEuNjhjLTIuOTgtMS4xMDctNS4zNDgtMy4xMTEtNy4wNTQtNS45Ny0xLjAyNS0xLjcyLTIuMTYtNC40MjgtMS45NDYtNC42NDMuMjI5LS4yMjkgMy4wMzkuNjQ0IDQuOTE2IDEuNTI3IDMuNDE3IDEuNjA4IDYuMjc1IDUuMTk4IDYuNTk0IDguMjgzLjE3OCAxLjcyMy4wNjMgMS43Ni0yLjUxLjgwM20tNzAuMzk5LjEwN2MtMi45MjMtLjQtNi44ODctMi4wNDMtNy41Ni0zLjEzMi0uMjMtLjM3MSAxLjY5My0xLjc3MiAzLjY4My0yLjY4MyA0LjExOS0xLjg4NyA5LjIyLTEuNzc5IDEzLjA3NS4yNzcgMS42MzcuODczIDQuMzQ3IDIuOTQzIDQuMzA3IDMuMjktLjAxNC4xMjItLjg5NS40OTktMS45NTcuODM3LTQuMDYgMS4yOS04LjQ4MiAxLjgzMS0xMS41NDggMS40MTFtNTEuMjY0LTEuNTVjLTEuNjg3LS42Ni0zLjMxNS0xLjgzMS00Ljg3LTMuNTAzbC0xLjMyMy0xLjQyMSAyLjExNi0uMTgzYzMuNDY3LS4yOTggNi40MjQuMzU0IDguNzU3IDEuOTMyIDEuMDk2Ljc0MiAyLjc1MyAyLjQ1NiAyLjc1MyAyLjg0OCAwIC44NTktNS40NiAxLjA5OS03LjQzMy4zMjZtMzguNTIxLTEuMjZjLTMuODQtLjc5OC02Ljk2Ni0yLjMzMS05LjcwNS00Ljc2MS0yLjE1Ni0xLjkxMy0zLjE3OS0yLjUxMi01LjA4LTIuOTc4LTEuNDc4LS4zNjItMy4zMzktMS4yNDktMy4zMzktMS41OTEgMC0uMzE4IDIuODI0LS44MSA1LjY4OS0uOTkxIDcuMDQ2LS40NDYgMTMuNTQ5IDIuNzQxIDE2LjEzMyA3LjkwOC41MTMgMS4wMjQuOTMyIDIuMDI1LjkzMiAyLjIyNCAwIC4yNzctLjQ3OS4zNTQtMi4wNS4zMy0xLjEyOC0uMDE2LTIuMjg5LS4wOC0yLjU4LS4xNG0tNjEuMjE3LTIuMDc2Yy0xLjM1LS40MjEtMi41Mi0xLjQ0OS0zLjIzOC0yLjg0NWwtLjUxLS45OTJoMS4xNzhjMS40NzkgMCAyLjQ2LjM2NSAzLjQyIDEuMjczLjY1LjYxNSAxLjc2MiAyLjM5MiAxLjc2MiAyLjgxNyAwIC4yNTUtMS40MjYuMTE3LTIuNjEyLS4yNTNtNS40NS0xLjUwNGMtMS41ODMtMS4xNTMtMi4zOTYtMy41MDktMS44NzgtNS40NDIuMTkyLS43MTUuNTYzLS43NDIgMS4zMzQtLjA5OCAxLjE4Ljk4NiAxLjY3MyAyLjE3NyAxLjY3NCA0LjA1MSAwIC45NzQtLjA5IDEuODI2LS4yIDEuODk1LS4xMTIuMDY4LS41My0uMTE0LS45My0uNDA2bS0yNi4yNTQtMS4wNzVhMTUwIDE1MCAwIDAgMC0zLjk2OC0xLjk3bC0yLjM4Mi0xLjEzOCAxLjIxLS4wMDFjMi41MjctLjAwMiA0LjkyOCAxLjIwMyA2LjMzOSAzLjE4NS4zMDYuNDMuNTIuNzc3LjQ3My43Ny0uMDQ2LS4wMDctLjc5OS0uMzg4LTEuNjcyLS44NDV6bS0xNC4zNTQtMy42MDhjLS43NjQtLjI2NC0xLjYzMS0uNjk5LTEuOTI3LS45NjYtLjU5LS41MzQtMS42OTUtMi4yMi0xLjU0Mi0yLjM1Mi4wNTMtLjA0NS41NzMtLjE5MiAxLjE1NS0uMzI1IDEuMzI0LS4zMDMgMS40NS0uOTI1LjY2Mi0zLjI2NS0uMzA2LS45MDgtLjUwMy0xLjcwNS0uNDM4LTEuNzcuMDY2LS4wNjYuNjM3LjAxOCAxLjI3LjE4Ny45NS4yNTMgMS42ODMuODQ5IDQuMTk0IDMuNDExIDIuNDgzIDIuNTM0IDMuMjg2IDMuMTkgNC4zNjYgMy41NjYuNzI3LjI1MyAxLjYyLjU4NyAxLjk4NC43NDJsLjY2Mi4yOC0uNjYyLjE5OWMtLjc3OS4yMzQtNi4xMDIuNzk0LTcuNDIuNzgyLS41MDMtLjAwNS0xLjU0LS4yMjUtMi4zMDQtLjQ4OW0xMDQuMzEzLS44M2MtMS41MjgtLjQ4NC00LjcxOS0yLjcwNC00Ljc1LTMuMzAzLS4wMDYtLjE0NS44OC0uNDIgMS45NzItLjYxIDIuMzY4LS40MTQgNC42NzYtLjExIDYuNTgyLjg2NCAxLjQxLjcyMSAzLjA4MiAyLjM1IDIuODMgMi43NTYtLjU1Ljg5MS00LjIzNyAxLjA1NC02LjYzNC4yOTRtLTU2LjU4LS4xMTdjLTIuMDYtLjczNC0zLjM1LTIuNjUtMy4zNDUtNC45NjEuMDA2LTIuMzA0LjE1LTIuNTc0IDEuMjc5LTIuMzk3IDEuNTE2LjIzOSAzLjAxMy44MyAzLjY3NyAxLjQ1NWwuNjA5LjU3MiAxLjUyMy0xLjUwN2MuODM4LS44MjkgMS41OTMtMS41MDcgMS42NzktMS41MDcuMDg1IDAgLjM2Mi43MzUuNjE0IDEuNjMzLjk0IDMuMzUtLjM4MyA1Ljk3NC0zLjQzMSA2LjgwNi0xLjMwMi4zNTYtMS4zNS4zNTQtMi42MDUtLjA5NG0tNzUuMzE1LS42OThjLTYuNTMzLS45NDItMTEuMDE4LTIuOTY3LTE0LjU1Mi02LjU3MS0xLjk3Mi0yLjAxLTMuMTc1LTMuODEtMi44LTQuMTg2LjEwOS0uMTA5IDEuMzItLjIzOSAyLjY5My0uMjkgNS4yMzUtLjE5MiA5LjI2NiAxLjQ0OSAxMy4yMiA1LjM4MSAyLjA5NyAyLjA4NSA1LjEwMSA1Ljg1MyA0LjgzOCA2LjA2OC0uMDUuMDQxLTEuNTgtLjE0LTMuNC0uNDAybTk3LjMyNy0xLjI1YzQuMjY3LTUuMDk2IDguOTU5LTcuNDQyIDEzLjMzNC02LjY2Ni45ODIuMTc0IDEuODQuNDA1IDEuOTA2LjUxMy4xOTguMzItMS41NCAyLjcxMy0yLjgzNCAzLjkwNC0yLjMxNCAyLjEzLTUuNDIgMy4xNDgtMTAuNDkyIDMuNDM4bC0zLjA1NS4xNzV6bTE3LjUwMi0uNTU5YzAtLjY0NiAxLjcwMi01LjMxOCAyLjQ0Ny02LjcxNSAxLjQ3Mi0yLjc2MiA0Ljg0LTUuOTY1IDUuNTM4LTUuMjY3LjE2MS4xNjEuMjM0IDEuMTguMTc2IDIuNDgxLS4xMTQgMi42MDMtLjcwNSA0LjAyMy0yLjUxIDYuMDMtMS41MjQgMS42OTUtNS42NTEgNC4yMy01LjY1MSAzLjQ3MW04LjA0LTEuMTU3YzMuNzI4LTIuMzU2IDcuNzI1LTUuMTMzIDguODY0LTYuMTU4IDEuMzUzLTEuMjE4IDEuNDAzLTEuMjQuOTg0LS40My0xLjA5MyAyLjExMy00Ljg1IDUuMTA0LTcuOTMgNi4zMS0xLjczNC42OC0yLjc5OC44MzQtMS45MTkuMjc4bTIuNDU3LTQuODI4Yy0uMjQzLS41MTEtLjQ0My0xLjM4My0uNDQzLTEuOTM3IDAtMS4wMTguOTczLTMuMjIzIDEuNS0zLjM5OS4zNjgtLjEyMyAxLjE0NiAxLjgxNCAxLjE0NiAyLjg1MyAwIC44NTUtLjc4IDIuNi0xLjM5IDMuMTA1LS4yOTguMjQ3LS40NTYuMTI3LS44MTMtLjYyMm0xMS4zNDMuMzczYy0xLjE1Ny0uMTM1LTIuMTUtLjI5Mi0yLjIwNi0uMzQ4LS4xNi0uMTYgMS45NjYtMi4wMTcgMy43MS0zLjI0IDIuMzg3LTEuNjczIDQuNTQtMi4zMTcgNy43NDUtMi4zMTYgMi4xODIgMCAyLjg3NC4xMDQgMy45NDkuNTk2bDEuMzAzLjU5NS0uOTA3LjkzNmMtMi45MzUgMy4wMy03Ljk4NiA0LjQzMy0xMy41OTQgMy43NzdtLTEzNS41NDMtNS45OGMtMy4xNy01Ljk1My0zLjgwMi0xMS44MDktMS43NjktMTYuNDA3Ljc2Ni0xLjczIDIuNDA4LTQuMDMzIDIuODc4LTQuMDMzLjE4NSAwIC43LjY4NSAxLjE0MiAxLjUyMiAyLjAyIDMuODIgMi42NDMgOC41NjkgMS43MDggMTMuMDMtLjUxNSAyLjQ1NC0yLjM4MyA3LjkzOC0yLjcwNSA3LjkzOC0uMDg5IDAtLjY1My0uOTIzLTEuMjU0LTIuMDVtMTMxLjU0My0uMDI2Yy0yLjExLTEuNTUtMy4wMjMtMy4wOTMtMy4wMjMtNS4xMDggMC0xLjIxNS43Ny0zLjA1NiAxLjU4Ny0zLjc5Ni40OTQtLjQ0Ny41NzQtLjQzOCAxLjk2NS4yNDMgMS43MTMuODM4IDIuNjc2IDEuODkyIDMuMDcyIDMuMzYzLjQ2NCAxLjcyNS0uMjU3IDMuODcyLTEuNzkxIDUuMzI4bC0uNzcxLjczM3ptLTE0Mi4zNDEtMi4zOTJjLS45NTUtLjQzNC0zLjAyOC0yLjQ2Mi0zLjAyOC0yLjk2MyAwLS4xMDYuNTg5LS4yNzMgMS4zMDktLjM3MiAyLjAzMi0uMjggMy45MjMuMzgxIDUuMjY5IDEuODQuNjAyLjY1NCAxLjA5NSAxLjI5NSAxLjA5NSAxLjQyNiAwIC4yODktMS4zMDguNTctMi42MTMuNTYyLS41MjctLjAwMy0xLjQ0Mi0uMjI1LTIuMDMyLS40OTNtMTM0LjkyNy0zLjEzOWMxLjIxOC0zLjk1NCAxLjQ3MS0xMy41OS40NzctMTguMjAzYTU3IDU3IDAgMCAwLTEuNDcyLTUuMjkxYy0xLjAyNS0zLTEuMTg3LTMuNTA4LTEuMDMxLTMuMjI5LjA2LjExLjIyNy4xOTkuMzY5LjE5OXMuMTg1LS4xMi4wOTUtLjI2NS0uMDk5LS4yNjUtLjAxOS0uMjY1Yy4yODUgMCAyLjI4NCA0LjI3IDIuOTQgNi4yOC45NDIgMi44ODQgMS40ODggNi41ODQgMS40ODEgMTAuMDM3LS4wMDggNC4yMDUtLjYzIDcuMTU2LTIuMTI2IDEwLjA4OC0uNTc3IDEuMTMtLjk3NCAxLjQ5MS0uNzE0LjY1bTE1LjYyMi0uNTNjLjA5Ni0uNC42OTQtMS43OTggMS4zMy0zLjEwOCAxLjc4LTMuNjczIDQuMzk2LTYuMDQzIDcuNjEtNi44OTkgMi4yNjEtLjYwMiAyLjQxMi0uNTU1IDIuMjQ0LjY5OS0uMzkgMi45MDMtMy4zNDggNi40MTMtNi45NzEgOC4yNy0uNDU1LjIzMy0xLjYzLjcyNi0yLjYwOCAxLjA5NGwtMS43OC42N3ptLTE1MC41OTItMy42MjFjLTUuNTUxLTIuNjgzLTguODY1LTUuMjk1LTExLjQzNi05LjAxMy0yLjA5Mi0zLjAyOC0zLjcyLTcuMDY2LTMuNzItOS4yMzEgMC0uNjM2LjA4OS0uNjkgMS4xMzUtLjY5IDIuOTEzIDAgNi43OTYgMS43NCA5LjU4NSA0LjI5NiAzLjI4MyAzLjAwOCA1LjAzMyA2LjA3MyA2LjU4NyAxMS41MzQgMS4xNSA0LjA0MyAxLjI2MyA0LjU0NCAxLjAyIDQuNTQtLjExMSAwLTEuNTM5LS42NDctMy4xNy0xLjQzNm0xNDUuMDc1LjQ4NWMtLjA5Mi0uMjQxLS4zMDktMS41NTItLjQ4LTIuOTE0LS41NjItNC40NDMuNDMtOC4xODMgMi43NzItMTAuNDU2LjU4LS41NjIgMS4xNjQtMS4wMjIgMS4zLTEuMDIyLjQwNSAwIDEuMDEgMS43NSAxLjE4NiAzLjQzLjMyNCAzLjEtLjkgNi42My0zLjQyMSA5Ljg3Mi0uOTI2IDEuMTktMS4yMjYgMS40MzEtMS4zNTcgMS4wOW0tNi4zNTMtNy42NzVjLjM0LTEuNDEzLjkwOC0yLjIxIDEuOTU3LTIuNzQ1IDEuNTUtLjc5MiAxLjk2LS43MTggMS43NTQuMzE0LS4zMjYgMS42MjgtMS4zOTcgMi42OTUtMy4wMzQgMy4wMjItLjg0LjE2OC0uODU2LjE1NC0uNjc3LS41OTFtMTguNDMyLTIuMDg0Yy0uNDczLS4yMDYtLjg1Ny0uNDY5LS44NTQtLjU4NS4wMS0uMzY4IDEuOTQ1LTEuNTkyIDIuODE2LTEuNzgxLjQ2MS0uMSAxLjM0LS4wNDcgMS45NTIuMTE4bDEuMTE0LjMtLjg4Mi45MDljLS43NjQuNzg5LTIuMTcgMS40NS0zLjAyMiAxLjQyMi0uMTQ1LS4wMDUtLjY1MS0uMTc4LTEuMTI0LS4zODNtLTQuMTktMi4wMTRjLjQzNy01LjI0MyAxLjg1LTguOTkyIDQuNDM0LTExLjc1NCAxLjU4OS0xLjY5OCA0LjAxMS0zLjE3MiA1LjUxLTMuMzUzLjYwOC0uMDczLjY2OS4wMTYuNzQ1IDEuMDg3LjEyNSAxLjc0Mi0uNjU1IDQuODEyLTEuODEgNy4xMTctMS4yMzMgMi40NjYtMy4yNDQgNC43NS02LjE2IDctMy4xODUgMi40NTctMi45MzIgMi40NjYtMi43MTktLjA5N00xNjQuNTM1IDk2LjJjLjAxMS0uNjAxLjk5Ni0yLjQzMiAxLjYxMy0yLjk5Ny43NC0uNjggMS44Ni0xLjE0MiAyLjc2NC0xLjE0Mi43NCAwIC43ODMuMjEzLjI4NyAxLjQwMi0uMzI4Ljc4NC0yLjA1IDIuNTU4LTIuNDk2IDIuNTczLS4xMDUuMDA0LS42MzYuMTEtMS4xODIuMjM3LS43MDMuMTYzLS45OS4xNDItLjk4Ni0uMDczTTM5LjM4IDkyLjUxMWwtMS4xOS0uMjg3IDEuODk0LS4xODRjMi40MjktLjIzNyA0LjIxMS0uODM2IDUuNzU1LTEuOTMzIDEuNzA1LTEuMjEyIDIuNDMtMi4zIDMuMTg3LTQuNzc3LjM1OC0xLjE3MyAxLjAyNy0yLjY0NCAxLjQ4Ny0zLjI3Ljg1NS0xLjE2IDEuMzI4LTEuMzU0Ljc3Mi0uMzE1LS4xNy4zMTctLjQyIDEuNzUzLS41NTUgMy4xOTFzLS4zNzEgMi45NDQtLjUyNCAzLjM0N2MtMS4yOSAzLjM5LTYuMjU1IDUuMzMtMTAuODI2IDQuMjI4bTEzMi4zNTMtMy4wMjJjLTEuMzctMy4wMDQtMS43MjItNC42Mi0xLjU5Ni03LjMyMi4xMi0yLjU4NC42NjMtNC4yMDkgMS45ODQtNS45NDFsLjY5OC0uOTE1LjU5My42ODljMS41MzggMS43ODcgMi4zNyA2LjM2NiAxLjcyIDkuNDU3LS4zNzUgMS43OS0xLjkwMyA1LjYxLTIuMjkzIDUuNzM0LS4xNTguMDUtLjY1Ni0uNzE1LTEuMTA2LTEuNzAybTYuNjU1LjMyM2MuMDk0LS41ODIuMjQ1LTMuNjE4LjMzNi02Ljc0Ny4xNi01LjUxNC0uMDk3LTExLjE3NS0uNzI2LTE2LjAwNy0uNjYtNS4wNzgtMi41ODQtMTEuNDM4LTQuNzg4LTE1LjgzNC0uNTcyLTEuMTQyLS45MTQtMS45OTgtLjc2LTEuOTAzLjE1NC4wOTYuMjguMDIuMjgtLjE3IDAtLjYwOCAxLjkwNSAyLjQ2NSAzLjA1NiA0LjkzIDMuMTkgNi44MyA1LjQ5MiAxOC40ODIgNS4wMzkgMjUuNS0uMjE5IDMuMzc5LS43OSA2Ljc4LTEuNTIgOS4wNC0uNjcyIDIuMDg0LTEuMTY0IDIuNzIyLS45MTcgMS4xOTFtLTUuMTI5LTM5LjkzNmMwLS4wNjUtLjExOS0uMTktLjI2NC0uMjhzLS4yNjUtLjAzOC0uMjY1LjExNi4xMi4yOC4yNjUuMjguMjY0LS4wNTIuMjY0LS4xMTZNMjEuMzkgODcuNDZjLTYuODg1LTYuMjYyLTkuNjM0LTEwLjk4My0xMC4zMTItMTcuNzEtLjIxOC0yLjE1My4wOTgtNi4yMTEuNTE0LTYuNjI4LjM3Ny0uMzc3IDIuODYuNzU3IDQuNzE0IDIuMTUzIDQuMjg3IDMuMjI4IDcuMTI4IDguNjcgNy45NzYgMTUuMjc2LjM0OSAyLjcxNy43NDYgOS45MjMuNTQ3IDkuOTItLjA3My0uMDAxLTEuNjItMS4zNTYtMy40NC0zLjAxbTE0MS44MTggMS40OTVjLjAwMi0xLjIyMy41MS0yLjY1NCAxLjI1NC0zLjUzOS42ODEtLjgxIDIuNjM1LTEuOTAyIDIuOTk5LTEuNjc3LjI0OC4xNTQtLjE5MyAyLjM0Ny0uNjUgMy4yMjQtLjUyMyAxLjAwNy0xLjQ0NCAxLjgyLTIuNjE2IDIuMzFsLS45ODkuNDEzem0xOS43MTUtOS42NWMuMTAxLS40OC40MTQtMS4yNS42OTQtMS43MTIuNTMtLjg3MiAyLjM2MS0xLjkzNyAzLjMzMS0xLjkzNy41MTUgMCAuNTM3LjA3NS4yOS45OTItLjQzMiAxLjU5OS0xLjg5MSAyLjkwMS0zLjc0OSAzLjM0Ny0uNzMzLjE3Ni0uNzQ2LjE2LS41NjYtLjY5bS0xLjA3OC00Ljg2NGMtLjQzNC0zLjQ3NC40MjYtNy45NDkgMi4wMDQtMTAuNDI3Ljk5Mi0xLjU1NyAzLjMwOC0zLjcwNCAzLjk5Ni0zLjcwNC43OSAwIDEuMDIzIDUuMDk4LjM0IDcuNDI3LS43NzUgMi42MzktMy4yMiA2LjEwMi01LjQxIDcuNjYxbC0uNzQ0LjUzek0yNy4xMDYgNzAuNzRjLS44My0yLjE2My44NTItOS4yODUgMy40NDItMTQuNTc3IDMuNDE0LTYuOTc3IDkuODc2LTE0LjE3MyAxNS41MTgtMTcuMjggMS4zMzgtLjczNiAxLjMwNi0uNjk2LS43MzIuOTIxLTMuNTU0IDIuODItNi45MyA2LjUxLTkuNjE3IDEwLjUxNC0yLjc4IDQuMTQyLTQuMTg0IDcuNTgyLTUuODI1IDE0LjI3NC0uNTkzIDIuNDE5LTEuMjczIDQuODg1LTEuNTEyIDUuNDgyLS40NDYgMS4xMTYtLjk5MSAxLjQwMS0xLjI3NC42NjZtMTQ4LjQxNS00LjQyOWMtMy4zMS0xLjc3NS01LjcxNC00Ljg3LTYuMDUtNy43ODctLjEyMy0xLjA3My0uMDk3LTEuMTI0LjU3My0xLjEyMiAxLjc0Mi4wMDYgNC41MzcgMi4zOCA1LjgzMyA0Ljk1NC40NjguOTI4IDEuNDM3IDQuNTcyIDEuMjYzIDQuNzQ2LS4wMjguMDI4LS43NTctLjMyOC0xLjYyLS43OU0yNC40NjUgNjMuODE3Yy0xLjM5Mi0yLjc2Ny0yLjA0Ni01LjE3NS0yLjIwOC04LjEzOC0uMTYtMi45MjQuMjkyLTYuNDguODIzLTYuNDguNjMyIDAgMi43MyAxLjUzNiAzLjY1NCAyLjY3NiAxLjY1IDIuMDM2IDIuMTczIDMuMzI1IDIuMTg1IDUuMzkzLjAxIDEuNzI5LS4wOTQgMi4wNjktMS41NTQgNS4wOTQtLjg2IDEuNzgyLTEuNjYzIDMuMjQtMS43ODMgMy4yNHMtLjYyMy0uODAzLTEuMTE3LTEuNzg1bTE1NS4wNDktNC40N2MtLjYwMi0zLjA0NS0uMzU2LTUuNTcxLjc1Ny03Ljc2Ny43OTUtMS41NyAyLjcwOC0zLjM1MSAzLjEzNy0yLjkyMS4xODcuMTg3LjMwMiAxLjMzLjMwMiAzIDAgMi42MTctLjAzIDIuNzU2LTEuMDAxIDQuNTczLS41NTEgMS4wMy0xLjQ2MiAyLjMyMi0yLjAyNCAyLjg3MWwtMS4wMjIuOTk4em0tNjguNDMyLTIuODMxYzAtLjQ1MS43NDgtMS4xMTUgMS41MjEtMS4zNS43NjItLjIzMy43NDMuMDY0LS4wNjEuOTc4LS42NzguNzctMS40Ni45NjktMS40Ni4zNzJNMzMuNTkgNTQuNzUyYzEuMDQ2LTEuODc3IDMuNDItNC4wODIgNS40MzMtNS4wNDUgMS40NTctLjY5OSAyLjIzLS44OTIgMy45My0uOTgyIDIuMTUtLjExNSAzLjg2My4xOCA0LjcyOC44MTIuNDQ0LjMyNC4zOTMuNDQyLS43NCAxLjcwMS0xLjQ3IDEuNjM1LTMuNDM4IDIuOTctNS41NzUgMy43NzgtMS4yNDIuNDctMi4zMy42My00Ljk5OC43MzVsLTMuNDEuMTM1em03Ni45NjUuMTk0YzAtLjgwMiAxLjI4Mi0yLjE5IDIuMTctMi4zNS45NjktLjE3NiAxLjUzNC4wNDEgMS41MzQuNTg3IDAgLjM4Mi0uMzA1LjU4My0xLjI0NS44Mi0uNjg1LjE3Mi0xLjUxOC42MDgtMS44NTIuOTY4bC0uNjA3LjY1NXptNTcuMDE4LS42MDVjLS40MzctLjIyNS0uOTY1LS41NzgtMS4xNzMtLjc4My0uMzI3LS4zMjMtLjIyLS40NDYuNzk0LS45MDUgMS4zMTQtLjU5NyAyLjc3NC0uNjU5IDQuMzQ3LS4xODQgMS4zODYuNDE3IDEuMzQ3Ljk1LS4xMjIgMS42OS0xLjM3Ny42OTUtMi43My43Ni0zLjg0Ni4xODJtLTU4LjMwNi0xLjE2Yy4xNzQtLjUuODE1LTEuNDA2IDEuNDI0LTIuMDE1LjkxOC0uOTE4IDEuMzY4LTEuMTUyIDIuNjM3LTEuMzcgMS40Mi0uMjQ2IDIuMDI0LS4yMjQgMy4wNDguMTA3LjguMjYtLjc2NSAxLjE0OC0yLjAyMiAxLjE0OC0xLjU4NCAwLTIuOTE1LjYtNC4yNyAxLjkyOGwtMS4xMzMgMS4xMDl6bTY1LjU3Ny0yLjg3Yy0uNzUtMS40OTctLjkwNi0yLjEyOS0xLjAwMS00LjA0OC0uMDk0LTEuODg2LS4wMi0yLjQ4NS40MzEtMy41MDYuMy0uNjc3LjY1NS0xLjIzMS43OS0xLjIzMS4zMyAwIDEuNDc1IDEuNzc3IDEuODU2IDIuODgzLjQ5NyAxLjQ0Mi4zODMgNC4zMS0uMjM2IDUuOTY1LS4zLjgwMy0uNjM4IDEuNTE3LS43NSAxLjU4Ni0uMTEuMDY5LS42MDItLjY3My0xLjA5LTEuNjQ5bS02NS4zNTkuMjM5Yy42NjItMS4yNSAyLjQ1My0yLjkxOCAzLjYwNC0zLjM1NyAxLjM4NC0uNTMgNC4zMTgtLjQyIDUuNTEyLjIwNmwuNzU3LjM5Ny0uNTc2LjQwM2MtLjQ1LjMxNS0xLjA4NC4zNzQtMi45MDQuMjctMi44NTQtLjE2My0zLjkzOC4xNTUtNS41NCAxLjYyNS0uODc2LjgwMi0xLjEuOTIyLS44NTMuNDU2bS03OS42MDItMS4wMzZjLTEuODk1LTEuODk0LTIuNDc0LTMuMTgzLTIuNjItNS44MjQtLjA2Ni0xLjIxMS0uMDA4LTIuMzE0LjEyOC0yLjQ1LjMzMi0uMzMyIDIuMDE5Ljk0NSAyLjgzMSAyLjE0NS4zNDguNTEzLjgyNSAxLjUgMS4wNiAyLjE5Mi40NyAxLjM4NC41ODEgNC44MTguMTY0IDUuMDc2LS4xNDQuMDg5LS44NDgtLjQyMy0xLjU2My0xLjEzOW03OC42OTgtLjU4Yy41MjgtMS44NDggMi4yMjctMy45MzQgMy45NC00Ljg0MSAxLjY0OC0uODcyIDQuMTEzLS43NCA3LjMzMS4zOTJsMi41NS44OTctLjkzNi42MTRjLS45MTkuNjAyLS45NjcuNjA2LTIuNTUuMi0yLjczMi0uNjk4LTMuMjA5LS43MzktNS4wMTQtLjQyNC0yLjAyNS4zNTItMy44MjYgMS40MTktNC44NCAyLjg2NS0uNTQzLjc3Ny0uNjM1LjgzMy0uNDgxLjI5N201NC45NTctLjAyOGMtLjYxOS0uMzA2LTEuMTI1LS42NjUtMS4xMjUtLjc5NyAwLS4xMzMuMzg3LS40NzcuODYtLjc2NSAxLjQ1NS0uODg3IDQuNDc1LS42NSA2LjI0NC40OWwuNjIxLjQwMS0xLjE1LjYwMmMtMS41NDcuODEtMy44OTQuODQtNS40NS4wN20tMTEzLjUxLTUuMDI5Yy0uNjIxLS4zMDctMS4zNzYtLjg3Mi0xLjY3Ny0xLjI1NWwtLjU0OC0uNjk2Ljg4My0uMzcyYzIuMDctLjg3MiA1LjI5Ni0uMjYxIDYuNjc1IDEuMjYzLjQ5OC41NS40OTQuNTU2LS42NjIgMS4wOC0xLjUyLjY5LTMuMjUzLjY4Mi00LjY3Mi0uMDJtNjkuMTI2LS4yOTNjLTIuOTA1LTEuMTI4LTUuNjQ3LTEuMTc5LTcuODcxLS4xNDctLjgzNy4zODgtMS41MjIuNjY1LTEuNTIyLjYxNSAwLS4yOTIgMi43MzgtMS43NTEgMy45NS0yLjEwNiAxLjc5Ni0uNTI1IDQuNzI2LS41MzUgNi42MzQtLjAyMyAxLjc1OS40NzIgMy41NjQuNDg5IDQuNjEuMDQzLjY5Ni0uMjk4LjU5LS4zMi0xLjA3LS4yMjYtMS44My4xMDMtMS44NTIuMDk2LTMuNjgzLTEuMTYtMS4wMTMtLjY5NC0yLjMxOC0xLjQxMy0yLjktMS41OTZsLTEuMDU4LS4zMzMuOTg4LS4wMThjLjU0NC0uMDEgMi4xMzUuMjggMy41MzUuNjQ0IDIuNi42NzUgNC42MDUuODU2IDQuNjA1LjQxNSAwLS4zNDctMS40NzktMS4zNi0yLjYxNi0xLjc5MS0uOTM1LS4zNTUtLjkxNS0uMzYxLjktLjI2MSAyLjEuMTE1IDMuODYyLjc5IDQuOTU3IDEuODk5LjcyLjcyOS43MjcuNzMuNzI3LjEzIDAtLjkzNC0xLjgxLTIuNDg0LTMuNDctMi45NzMtMS43MzItLjUxLS45LS41OTguOTU3LS4xMDIgMi42OC43MTYgNS4zOSAyLjUxNSA2LjIxIDQuMTI0LjI5NS41NzguNTM3IDEuMTUuNTM3IDEuMjczIDAgLjEyMi0xLjEwMi4zNjEtMi40NDguNTMycy0zLjUxMS42NzEtNC44MTIgMS4xMTJjLTMuMDMgMS4wMjctNC40MSAxLjAxNy03LjE2LS4wNW0tODMuMDYtMi4yNDZjLS4zMzEtNC42NzIuOTUtOC42NTUgMy42MjItMTEuMjU3bDEuMzQzLTEuMzA4LjQxOC43NTRjLjMxLjU2LjQxOSAxLjUwNi40MTkgMy42NjQgMCAyLjgwMy0uMDM2IDIuOTg0LS45NTggNC44OTUtLjg4NyAxLjg0LTMuNjg3IDUuNTI0LTQuMzY1IDUuNzQ1LS4xOTcuMDY0LS4zNTgtLjc3Mi0uNDgtMi40OTNtMTI1Ljg3LS4zM2MtLjQ2NC0uMjgzLTEuMDUtLjgyOS0xLjMwMS0xLjIxMi0uNTU2LS44NDgtLjIyLTEuMTcgMS4yMjEtMS4xNzYgMS42NTItLjAwNyA0LjEwNCAxLjc4IDMuNTg4IDIuNjE1LS4zLjQ4Ni0yLjU3OS4zNC0zLjUwNy0uMjI3bS0xMDQuOTIyLS45MDJjLTEuODMxLS42ODMtNC4xNjYtMi45NjUtMy43NC0zLjY1NS4yMDMtLjMyOCAzLjYwMy0uMjYgNC42MjguMDkzLjQ5NC4xNyAxLjM0MS42IDEuODgyLjk1NSAxLjA1NS42OTIgMi40NzcgMi4zNzQgMi4yMjMgMi42MjgtLjM1Mi4zNTMtNC4wMzMuMzM3LTQuOTkzLS4wMjFtLjk5My01LjI5NmMtLjcyNy0uMTkxLTIuMDM0LS41Ni0yLjkwMi0uODJsLTEuNTgtLjQ3My44OTgtLjc1YzIuNTMtMi4xMTIgNi45Mi0zLjU5NSA5LjYyLTMuMjUgMS44NzYuMjM5IDMuODUgMS4wMDMgNC45MzcgMS45MWwuOTA3Ljc1OC0xLjE0LjgyNWMtMS45NDMgMS40MDktMy44MDUgMS45NzctNi43NzEgMi4wNjgtMS42MDcuMDUtMy4xNjUtLjA1Ni0zLjk2OS0uMjY4Ii8+PC9zdmc+'
      }
    }
  ]
})

@drichar
Copy link
Collaborator

drichar commented Jul 22, 2024

Here is the optimized version: https://www.svgviewer.dev/s/MT5Pixbj

@drichar
Copy link
Collaborator

drichar commented Aug 2, 2024

Closing this, but if you provide a URL for the hosted image I'll update the documentation with an example.

@drichar drichar closed this Aug 2, 2024
@scholtz
Copy link
Contributor Author

scholtz commented Aug 18, 2024

@drichar

i am sad with your decision.. i dont want to publish the github repo just to host the image.. you host the image for the wallet connect

your arguement that wallets which support wallet connect and will do the simple new class in your lib is vague.. there is not that many algorand wallets out there, and even if there was it would be quite simple solution for all of them to get support by your library

the hosting of just the image in specific npm has bad consequences as people will have to install more npms and it will increase the security risk for them.. especially in the wallets business

@drichar
Copy link
Collaborator

drichar commented Aug 19, 2024

@scholtz I think you misunderstood what I was suggesting. Hosting the image would not mean changing anything about your GitHub repository or publishing anything to NPM.

Just add the logo SVG image to a directory on the Biatec website. Like the flag images, e.g., https://wallet.biatec.io/flags/3x2/en.svg

That's it.

you host the image for the wallet connect

No, I don't. The library inlines wallet logo images using base64 data URIs. I showed you what that would look like w/ Biatec in the second example above. I can show that example in the documentation if you'd prefer, but since the Biatec logo is so large I think a shorter URL would be better.

@scholtz
Copy link
Contributor Author

scholtz commented Aug 19, 2024

@drichar

Dont read me wrong, but i dont want users to be tracked by the image loading.. its quite dangerous way as there are a way to inject js into the websites through img tag..

this is the most secure way for users:
https://github.com/scholtz/use-wallet/blob/4d40ee22879190378ee7efc85fb1ec4c07b11902/packages/use-wallet/src/wallets/biatec.ts

i embeded the image into the library the same way as you embeded it with the wallet connect logo in here: https://github.com/scholtz/use-wallet/blob/4d40ee22879190378ee7efc85fb1ec4c07b11902/packages/use-wallet/src/wallets/walletconnect.ts#L52

why do you complicate it? lets make it for users most easy and most secure pls

@drichar
Copy link
Collaborator

drichar commented Aug 19, 2024

@scholtz After my last comment I've given this some more thought.

My initial objection was that since your provider didn't offer any unique functionality, it didn't warrant being added. Users could already use Biatec with the existing WalletConnect provider. All that was lacking was the ability to display the Biatec name/logo.

As I said before, I do understand that discoverability is a major contributing factor when it comes to wallet adoption. While my proposed solution to add Biatec support would technically work,

  1. it's non-standard (with extra steps)
  2. it doesn't scale (you can only rename the WC provider once)
  3. it discourages using existing solutions (like WC)

When the library was first created, every wallet had its own unique provider implementation. That was the problem it solved. It informed design decisions like the 1-to-1 association of WalletIds with an instance of an extended BaseWallet class. Added later on, the WalletConnect provider doesn't really fit that pattern, since it's not a wallet provider but a protocol provider.

Having wallets extend that provider vs rolling their own implementation is actually a good thing, that should be encouraged. That's what I wasn't really considering. I was picturing all of these WalletConnect-supported wallets adding unnecessary bloat to the library, when in fact, every wallet that extends the WalletConnect provider is actually one less wallet with its own implementation that needs to be maintained, tested, and potentially debugged.

In fact, I'll probably be doing something similar soon since Kibisis and the Defly extension wallet both make use of the AVM Web Provider. A single provider that both wallets extend follows the DRY principle and totally makes sense.

Apologies for all of the back-and-forth, and for the long reply to explain my shift in perspective. I'll reopen the pull request and give it a review ASAP.

@drichar drichar reopened this Aug 19, 2024
@drichar
Copy link
Collaborator

drichar commented Aug 19, 2024

The size of the Biatec logo is an issue, at ~20Kb it would be the largest logo in the library (more than 3x bigger than the largest one currently). Since they are inlined these increase the size of the NPM package's bundle.

Can you please provide a smaller logo?

@scholtz
Copy link
Contributor Author

scholtz commented Aug 20, 2024

Thanks for reopening this PR. I am ok with the one you suggested (optimized logo).. I have updated it in the repo

i faced the same issue as in TxnLab#203 the issue is that the import in vuejs has the default, so fixed it the same way as it is done in defly f.e.
@drichar
Copy link
Collaborator

drichar commented Aug 30, 2024

@scholtz There's a typo in your Biatec provider causing the build to fail. Please update your branch and be sure to locally run the build, lint, prettier, and test scripts in the root of the repository to ensure checks will pass.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants