﻿Beta 7.82.866 changes:
1.Item 7, added.
2.Item 6, I was finally able to reproduce this and can confirm that
  this fix resolves the issue.
3.Item 8, added.

  Punycode itself is straightforward but the unicode mapping, bidi
  checking, NFC normalization, and meeting the Unicode Technical
  Standard at https://www.unicode.org/reports/tr46/#ToUnicode is
  a lot harder. I ended up looking at the IDNA and UPA libraries:

  https://github.com/ada-url/idna
  https://github.com/upa-url/upa
  
  Both worked well, although the IDNA library needed some minor code
  changes to compile under Visual Studio 2017 C++17 as it was using
  several C++20 functions. This does mean that it may not be usable
  in future if I need to maintain XP support. For now, I am using
  the IDNA library.

  There are many Punycode encoders/decoders online. The only one I
  found that worked properly was https://www.punycoder.com.

4.Item 9, added https://forums.mirc.com/ubbthreads.php/topics/273673
6.Item 4, fixed https://forums.mirc.com/ubbthreads.php/topics/273702
7.Item 1, https://forums.mirc.com/ubbthreads.php/topics/273707
8.Item 10, updated.

Beta 7.82.526 changes:
1.Item 1, fixed.
2.Item 2, added.
3.Item 3, updated. These are minimal code changes that clear up minor
  warnings for specific sections of code.
4.Item 4, added.
5.Item 5, fixed. The code was being used in different contexts, so I
  have changed it to be more strict. Unit tests across different
  features where this is used seem to be working correctly.
6.Item 6, fixed. This was reported for the Options dialog listbox but
  I was not able to reproduce it. However, code was changed that relates
  to listbox line heights, so has been changed to work as before.

Changes:
1.Fixed nickserv logon bug where the nickserv message was not being
  sent on connecting to a server.
2.Added support for key derivation functions pkbdf2 and argon2 as
  identifiers:

  $pbkdf2(text|&binvar, salt|&binvar, hash, length, iterations, opts)

  $argon2(text|&binvar, salt|&binvar, hash, length, iterations,
  parallelism, memcost, opts)

  The opts parameter is optional and can be set to 'b' to indicate
  &binvar parameters. The return value is the derived key.

3.Updated code to clear all remaining minor static code analysis issues
  reported by the compiler. This will make it easier to spot unhandled
  issues in the future across 32-bit/64-bit/ARM64 versions.
4.Added custom dialog editbox option 'optional' for grayed out optional
  text indicator. If followed by "quoted" text, this is used as the
  optional text.
5.Fixed IPv6 parser change that affected a number of features, such as
  the /dcc send/chat commands with nicknames that contain brackets.
6.Fixed listbox text not being displayed correctly for some features
  when Windows DPI scaling is changed.
7.Added /drawdll command that calls a custom DLL and passes a picture
  @window's memHDC and HBITMAP handles to it. The DLL can then either
  draw to the memHDC or modify the HBITMAP directly.
  
  /drawdll -n <@window> <dllname> <procname> [data]

  The DLL must then return a data string in the format:

  <update> <left> <top> <right> <bottom>

  Where <update> is 0 or 1 indicating whether to update the display or
  not. If -1, uses the default. <left> <top> <right> <bottom> are
  window coordinates of the changed area. If not specified, the whole
  bitmap is marked as changed.
8.Added $encode()/$decode() 'y' switch that Punycode-encodes/decodes
  text with the ADA IDNA library using IDNA2008 and UTS46.
9.Added support for internationalized domain names when resolving
  addresses.
10.Updated CA root certificates cacert.pem file.
