The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • Home
  • Wiert.me
  • About the Wiert Corner
  • Privacy Policy
  • Conferences, seminars and other public appearances
  • Posting categories
  • Archives
  • Toolbox
  • Contact form
  • License
  • Subscribe

    • Entries (RSS)
    • Comments (RSS)
  • April 2026
    M T W T F S S
     12345
    6789101112
    13141516171819
    20212223242526
    27282930  
    « Mar    
  • Archives

    • April 2026 (38)
    • March 2026 (45)
    • February 2026 (47)
    • January 2026 (48)
    • December 2025 (54)
    • November 2025 (47)
    • October 2025 (50)
    • September 2025 (49)
    • August 2025 (47)
    • July 2025 (50)
    • June 2025 (47)
    • May 2025 (48)
    • April 2025 (46)
    • March 2025 (44)
    • February 2025 (48)
    • January 2025 (55)
    • December 2024 (48)
    • November 2024 (44)
    • October 2024 (51)
    • September 2024 (46)
    • August 2024 (53)
    • July 2024 (50)
    • June 2024 (36)
    • May 2024 (33)
    • April 2024 (33)
    • March 2024 (36)
    • February 2024 (28)
    • January 2024 (28)
    • December 2023 (27)
    • November 2023 (24)
    • October 2023 (24)
    • September 2023 (29)
    • August 2023 (31)
    • July 2023 (33)
    • June 2023 (26)
    • May 2023 (26)
    • April 2023 (31)
    • March 2023 (26)
    • February 2023 (27)
    • January 2023 (24)
    • December 2022 (33)
    • November 2022 (27)
    • October 2022 (23)
    • September 2022 (25)
    • August 2022 (24)
    • July 2022 (26)
    • June 2022 (26)
    • May 2022 (23)
    • April 2022 (32)
    • March 2022 (69)
    • February 2022 (63)
    • January 2022 (66)
    • December 2021 (75)
    • November 2021 (66)
    • October 2021 (64)
    • September 2021 (67)
    • August 2021 (69)
    • July 2021 (69)
    • June 2021 (69)
    • May 2021 (68)
    • April 2021 (67)
    • March 2021 (72)
    • February 2021 (63)
    • January 2021 (65)
    • December 2020 (70)
    • November 2020 (64)
    • October 2020 (68)
    • September 2020 (67)
    • August 2020 (67)
    • July 2020 (71)
    • June 2020 (68)
    • May 2020 (64)
    • April 2020 (67)
    • March 2020 (70)
    • February 2020 (61)
    • January 2020 (74)
    • December 2019 (70)
    • November 2019 (63)
    • October 2019 (73)
    • September 2019 (68)
    • August 2019 (66)
    • July 2019 (68)
    • June 2019 (68)
    • May 2019 (72)
    • April 2019 (73)
    • March 2019 (64)
    • February 2019 (68)
    • January 2019 (78)
    • December 2018 (87)
    • November 2018 (77)
    • October 2018 (79)
    • September 2018 (77)
    • August 2018 (76)
    • July 2018 (74)
    • June 2018 (63)
    • May 2018 (70)
    • April 2018 (63)
    • March 2018 (72)
    • February 2018 (48)
    • January 2018 (83)
    • December 2017 (67)
    • November 2017 (62)
    • October 2017 (63)
    • September 2017 (52)
    • August 2017 (62)
    • July 2017 (48)
    • June 2017 (57)
    • May 2017 (68)
    • April 2017 (55)
    • March 2017 (59)
    • February 2017 (58)
    • January 2017 (60)
    • December 2016 (59)
    • November 2016 (74)
    • October 2016 (61)
    • September 2016 (87)
    • August 2016 (57)
    • July 2016 (51)
    • June 2016 (49)
    • May 2016 (48)
    • April 2016 (51)
    • March 2016 (49)
    • February 2016 (50)
    • January 2016 (48)
    • December 2015 (59)
    • November 2015 (57)
    • October 2015 (37)
    • September 2015 (31)
    • August 2015 (41)
    • July 2015 (31)
    • June 2015 (37)
    • May 2015 (30)
    • April 2015 (32)
    • March 2015 (37)
    • February 2015 (52)
    • January 2015 (50)
    • December 2014 (43)
    • November 2014 (39)
    • October 2014 (40)
    • September 2014 (41)
    • August 2014 (58)
    • July 2014 (32)
    • June 2014 (23)
    • May 2014 (38)
    • April 2014 (105)
    • March 2014 (145)
    • February 2014 (81)
    • January 2014 (56)
    • December 2013 (58)
    • November 2013 (32)
    • October 2013 (26)
    • September 2013 (26)
    • August 2013 (54)
    • July 2013 (47)
    • June 2013 (41)
    • May 2013 (33)
    • April 2013 (41)
    • March 2013 (50)
    • February 2013 (47)
    • January 2013 (55)
    • December 2012 (32)
    • November 2012 (23)
    • October 2012 (37)
    • September 2012 (52)
    • August 2012 (46)
    • July 2012 (40)
    • June 2012 (30)
    • May 2012 (27)
    • April 2012 (30)
    • March 2012 (29)
    • February 2012 (32)
    • January 2012 (25)
    • December 2011 (38)
    • November 2011 (28)
    • October 2011 (46)
    • September 2011 (63)
    • August 2011 (35)
    • July 2011 (24)
    • June 2011 (24)
    • May 2011 (24)
    • April 2011 (29)
    • March 2011 (50)
    • February 2011 (48)
    • January 2011 (18)
    • December 2010 (5)
    • November 2010 (18)
    • October 2010 (22)
    • September 2010 (29)
    • August 2010 (24)
    • July 2010 (27)
    • June 2010 (29)
    • May 2010 (25)
    • April 2010 (23)
    • March 2010 (10)
    • February 2010 (6)
    • January 2010 (16)
    • December 2009 (12)
    • November 2009 (3)
    • October 2009 (11)
    • September 2009 (21)
    • August 2009 (11)
    • July 2009 (11)
    • June 2009 (5)
    • May 2009 (12)
    • April 2009 (20)
  • *nix *nix-tools .NET About Apple C# Conferences Conference Topics Delphi Development Event Google Hardware Hardware Development History Internet LifeHacker Linux Mac OS X / OS X / MacOS Personal Power User Scripting Security SocialMedia Software Development Source Code Management VMware Web Development Windows Windows 7
  • Recent Comments

    jpluimers's avatarjpluimers on Sony STR-DE205 Receiver…
    jpluimers's avatarjpluimers on Position paper nachtsluiting D…
    jpluimers's avatarjpluimers on Position paper nachtsluiting D…
    Nic3's avatarNic3 on Position paper nachtsluiting D…
    Attila Kovacs's avatarAttila Kovacs on Crowbarring Windows 95 into Wi…
  • Recent Posts

    • Watering plants; nice Dutch thread with lots of useful tips
    • ANWB slaat alarm over uitblijven oplossing stoppen met 2G netwerk | Kassa – YouTube
    • Screenshot of Pitfall II: Lost Caverns (Apple II, 1984) – MobyGames
    • Shoe horning Arm Mac hardware plus OLED screen in a iMac G3 case 
    • Is Agile dead? Only for places where it is suffocated by rules
  • Blog Stats

    • 3,650,823 hits
  • Meta title

    • Create account
    • Log in
    • Entries feed
    • Comments feed
    • WordPress.com
  • Tag Cloud Title

    .NET Framework 1 2 3 3dprinting 4 6 7 8 14 16 18 25 32 android Apple arts aviation batch file bitbucket blogging computer Conferences define Delphi delphi 1 delphi 5 design developer documentation education embarcadero flickr gadgets geeks gmail google google search include infosec internet iOS iphone jeroen mac os x Media microsoft surface mobile nick hodges pascal path names pdf photography Privacy Python RaspberryPi research science scott hanselman shorts software sourcecode language sourceforge ssd stack overflow technology transportation Travel twitter vcl vm VMware VMware Fusion wordpress xkcd
  • Top Clicks

    • web.archive.org/web/20190…
    • social.antefriguserat.de/…
    • social.antefriguserat.de/…
    • web.archive.org/web/2019*…
    • web.archive.org/web/*/htt…
    • vpngate.net/en/about_over…
    • somoit.net/windows/window…
    • web.archive.org/web/20100…
    • plus.google.com
    • docs.microsoft.com/en-us/…
  • Top Posts

    • VPN Gate Public VPN Relay Servers List
    • When NTFS shrink fails, despite using the default settings from the shrink dialog
    • DELL fans use a different pin-layout than normal fans, so watch out before connecting them!
    • How to access Archive.org's Google+ communities archive? : googleplus
    • Calls from +18553308653 might be because someone is trying to use your phone number to setup a Microsoft account two factor authentication
    • C13/C14 wiring diagram live/neutral/earth
    • Archives
    • Turning off AI during Google Search with the "new" UDM parameter
    • Mercedes R171 SLK fuel pump/filter replacement links”
    • Error 13EC when installing The .NET Framework 4.5.1 means you need to free more disk space. 3GB that is.
  • My badges

    Mastodon
  • Twitter Updates

    Tweets by jpluimers
  • Pages

    • About the Wiert Corner
      • bio
      • Music I like
    • Archives
    • Conferences, seminars and other public appearances
    • Contact form
    • License
    • Posting categories
    • Privacy Policy
    • Toolbox
      • DNS
      • Links
      • spring4d
      • Status
    • Wiert.me
  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,854 other subscribers

Archive for the ‘Delphi’ Category

« Previous Entries
Next Entries »

Microsoft Research’s manual memory management for .NET: exactly one owner which provides shields for accessing the objects

Posted by jpluimers on 2017/08/01

A very interesting piece of research, in which I see a very familiar concept of single owners and I new concept of them providing shields for accessing the manually managed memory. I do miss mentions of Anders Hejlsberg, Chuck (Charles) Jazdzewski, or others that lay the foundation of ownership in the [WayBack] TComponent Branch.

Microsoft Research’s manual memory management for .NET: https://www.microsoft.com/en-us/research/wp-content/uploads/2017/07/snowflake-extended.pdf

Interesting concept of manual but safe memory management with exactly one owner of an object at any given moment and shields that prevent an object’s destruction while it’s still in use by other threads.

Source: [WayBack] Christopher Wosinski – Google+

–jeroen

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in .NET, Delphi, Development, History, Software Development | Leave a Comment »

There is a way to convert ‘array of const’ (open array) to TValue: Asbjørn Heid found one.

Posted by jpluimers on 2017/07/27

Brilliant solution by Asbjørn Heid:

So the solution I came up with is to use the observation that the “array of const” is “array of TVarRec”, and that “array of TVarRec” is passed as as two arguments: a pointer to the data and the length of the array (or rather, the highest index in the array).

Source: Is there a way to convert ‘array of const’ (open array) to TValue? For example,… [WayBack]

–jeroen

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in Delphi, Development, Software Development | 1 Comment »

Sending various HTTP request kinds using curl

Posted by jpluimers on 2017/07/25

I’ve been using cURL but always had a feeling not to its potential basically because the cURL man page [WayBack] is both massive and lacks concrete useful practical examples.

For instance, I knew about the --header and --verbose options (I always use verbose names even though shorter -H and -v exist) to pass a specific header and get verbose output, but the man page basic examples like this by Tader:

curl --header --verbose "X-MyHeader: 123" www.google.com

source: How to send a header using a HTTP request through a curl call? – Stack Overflow [WayBack]

There are some more examples at bropages.org/curl but they’re hardly organised or documented.

So I was really glad I found the below answer [WayBack] by Amith Koujalgi to web services – HTTP POST and GET using cURL in Linux – Stack Overflow.

But first note that recent versions (around 7.22 or higher) of cURL now need to combine the --silent and --show-error (or in short -sS) parameters to suppress progress but show errors: linux – How do I get cURL to not show the progress bar? – Stack Overflow [WayBack]

Back to the examples

Read the rest of this entry »

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in *nix, Communications Development, cURL, Delphi, Development, HTTP, https, Internet protocol suite, JavaScript/ECMAScript, JSON, Power User, REST, Scripting, Security, Software Development, TCP, TLS, XML, XML/XSD | 1 Comment »

Anyone knows if Raize subscription before the Raize acquisition is still valid?

Posted by jpluimers on 2017/07/18

It’s from a while ago, so I wonder if this is still true:

  I just got my Embarcadero update to RC6 that includes #10Seattle support.

–jeroen

Source: Can I say that I’m a bit disappointed by the way the Raize acquisition has been…

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in Delphi, Development, Software Development | 1 Comment »

A slightly optimized TDateTime functions (YearOf, MonthOf, DayOf) …

Posted by jpluimers on 2017/07/13

Besides the optimised versions of these functions, I learned the most from these comments:

 The DivMod should be faster. Should really be a single division. The CPU instruction will give you both div and mod from a single instruction. No point doing the divide twice.

http://stackoverflow.com/questions/20270596/how-do-i-implement-an-efficient-32-bit-divmod-in-64-bit-code

Updated code, added lookup-table optimizations, Lazarus / FPC support and test project:

https://github.com/davidberneda/FastDateTime

+Javier Hernández In the past I used AQTime but now I’m using NexusDB Quality suite (http://www.nexusdb.com/support/index.php?q=qualitysuite) and +Eric Grange SamplingProfiler (https://www.delphitools.info/samplingprofiler/).

But in this FastDateTime code the test project uses TStopWatch (GetTickCount in FPC) to compare speed

–jeroen

Source: A slightly optimized TDateTime functions (YearOf, MonthOf, DayOf) …

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in Delphi, Development, Software Development | 2 Comments »

BorCon 97, 20 years ago, Star Wars, 40 years ago

Posted by jpluimers on 2017/07/13

Marco Cantu (right) and Jeroen Pluimers (left) in 1997

Marco Cantu (right) and Jeroen Pluimers (left) in 1997

The BorCon 97 opening – today 20 years ago – was so much fun: the a Star Wars like opening crawl about a tiny company fighting the – then regarded – Evil Empire called Microsoft.

It was back in the days when lots of new things in the Delphi world were happening: Delphi 2 – the first 32-bit version – came out half a year before and the upcoming Delphi 3 was going to be a game changer as well. New features were rock solid and sales were booming.

Personally, I was much slimmer (yes, that’s me in the Tie-Dye), and could do a pre-conference tutorial on CORBA and VisiBroker (The ORB by Visigenic which was about to be acquired by Borland – which now is owned by Micro Focus only after spinning of the CodeGear which got acquired by Embarcadero that is now owned by Idera which feels like the Inprise story all over again).

I got triggered to this after watching the Opening Night Excitation episode 194 of the Big Bang Theory:

Read the rest of this entry »

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in Delphi, Delphi 2, Delphi 3, Development, Software Development | Leave a Comment »

https://www.youtube.com/watch?v=INzECItF6ew Delphi, where are you? 

Posted by jpluimers on 2017/07/12

Edit: in the mean time, the author took his video off-line. The G+ thread however is still interesting.

From a while ago:

[WayBack] https://www.youtube.com/watch?v=INzECItF6ew
Delphi, where are you? – Jacek Laskowski – Google+

 

YouTube video C++ Cool Debugging Tips and Tricks

–jeroen

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in C++, Delphi, Development, Software Development | 4 Comments »

MarcoDelphiBooks on GitHub

Posted by jpluimers on 2017/07/04

Just in case I need any of them: now in chronological order.

MarcoDelphiBooks – http://www.marcocantu.com

  • ObjectPascalHandbook
  • MasteringDelphi3
  • MasteringDelphi4
  • MasteringDelphi5
  • MasteringDelphi6 
  • MasteringDelphi7
  • MasteringDelphi2005
  • Delphi2007Handbook
  • Delphi2009Handbook
  • Delphi2010Handbook
  • DelphiXEHandbook

Source: MarcoDelphiBooks

–jeroen

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in Delphi, Delphi 2005, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Delphi XE, Development, Software Development | Leave a Comment »

Bug: Initialisation of Delphi Record containing a dynamic array with ‘Implicit’ class operator – Stack Overflow

Posted by jpluimers on 2017/06/28

Bug: Initialisation of Delphi Record containing a dynamic array with ‘Implicit’ class operator – Stack Overflow [WayBack]

Filed as [RSP-16084] Compiler produces wrong code: Initialisation of Delphi Record containing a dynamic array with ‘Implicit’ class operator – Embarcadero Technologies

Analysed in Source: Initialisation of Delphi Record containing a dynamic array with ‘Implicit’ class operator – Stack Overflow [WayBack]

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in Delphi, Delphi 10.1 Berlin (BigBen), Development, Software Development | 2 Comments »

When someone writes UTF-8 and UTF-16 strings to the same file in binary format without converting between them…

Posted by jpluimers on 2017/06/21

A while ago, I had to fix some stuff in an application that would write – using a binary mechanism – UTF-8 and UTF-16 strings (part of it XML in various flavours)  to the same byte stream without converting between the two encodings.

Some links that helped me investigate what was wrong, choose what encoding to use for storage and fix it:

  • unicode – How to Convert Ansi to UTF 8 with TXMLDocument in Delphi – Stack Overflow
  • delphi – What should I use? UTF8 or UTF16? – Stack Overflow
  • IXMLDocument.SaveToStream does not always use UTF-16 encoding | Marc Durdin’s Blog
  • delphi – Length() vs Sizeof() on Unicode strings – Stack Overflow
  • TEncoding.UTF8.GetBytes: utf 8 – String to byte array in UTF-8? – Stack Overflow
  • SysUtils.ByteLength() is not the nicest function, so use only for a quick-fix Delphi Unicode String Length in Bytes – Stack Overflow
  • AnsiString, UnicodeString et al: String Types (Delphi) – RAD Studio
  • Question about type identity – delphi
  • On the type compatibility in Delphi | The Programming Works
  • Joe White’s Blog » Blog Archive » Grammar details of Delphi’s “type type” feature
  • Type Compatibility and Identity (Delphi) – RAD Studio
  • Delphi “type types”: similar types but not the same type identity, some examples.
  • Converting in various Delphi versions (pre-Unicode and post-Unicode versions): Delphi: Encoding Strings as Python do – Stack Overflow
  • UTF-8 Conversion Routines – RAD Studio

–jeroen

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi XE8, Development, Encoding, Software Development, UTF-16, UTF-8, UTF16, UTF8, XML, XML/XSD | 3 Comments »

« Previous Entries
Next Entries »
 
Blog at WordPress.com.
  • Subscribe Subscribed
    • The Wiert Corner - irregular stream of stuff
    • Join 717 other subscribers
    • Already have a WordPress.com account? Log in now.
    • The Wiert Corner - irregular stream of stuff
    • Subscribe Subscribed
    • Sign up
    • Log in
    • Report this content
    • View site in Reader
    • Manage subscriptions
    • Collapse this bar
  • Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
    To find out more, including how to control cookies, see here: Cookie Policy
  • %d