From ad485d2468b03707a5bf83cb8acb3842e3dd8ce4 Mon Sep 17 00:00:00 2001 From: Penelope Yong Date: Fri, 12 Jul 2024 03:07:00 +0800 Subject: [PATCH] Remove hard dependency on tzdata files by inlining London timezone Closes #16 --- meet.cabal | 2 + src/Utils.hs | 3691 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 3684 insertions(+), 9 deletions(-) diff --git a/meet.cabal b/meet.cabal index dcc7958..b07fbd8 100644 --- a/meet.cabal +++ b/meet.cabal @@ -43,6 +43,8 @@ library directory >= 1.3.8 && < 1.4, filepath >= 1.4.200 && < 1.5, unix >= 2.8.4 && < 2.9, + bytestring >= 0.12.1.0 && < 0.13, + binary >= 0.8.9.1 && < 0.9, executable meet main-is: Main.hs diff --git a/src/Utils.hs b/src/Utils.hs index ad50a36..c5370f2 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -1,10 +1,13 @@ module Utils where +import Data.Binary.Get (runGet) +import qualified Data.ByteString.Lazy as BS import Data.Text (Text) import qualified Data.Text as T import Data.Time.Clock (getCurrentTime) import Data.Time.LocalTime (LocalTime (..), TimeZone (..), getCurrentTimeZone, utcToLocalTime) -import Data.Time.Zones (loadTZFromDB, timeZoneForUTCTime, utcToLocalTimeTZ) +import Data.Time.Zones (TZ, timeZoneForUTCTime, utcToLocalTimeTZ) +import Data.Time.Zones.Read (olsonGet) import Entities (Minutes (..)) import Print (prettyThrow, prettyWarn) @@ -13,17 +16,11 @@ tshow = T.pack . show -- | Returns the current timezone in London (either GMT or BST). getCurrentLondonTZ :: IO TimeZone -getCurrentLondonTZ = do - now <- getCurrentTime - london <- loadTZFromDB "Europe/London" - pure $ timeZoneForUTCTime london now +getCurrentLondonTZ = timeZoneForUTCTime londonTZ <$> getCurrentTime -- | Returns the current time in London. getCurrentLondonTime :: IO LocalTime -getCurrentLondonTime = do - now <- getCurrentTime - london <- loadTZFromDB "Europe/London" - pure $ utcToLocalTimeTZ london now +getCurrentLondonTime = utcToLocalTimeTZ londonTZ <$> getCurrentTime -- | Returns the current local time, according to the user's system timezone. getCurrentLocalTime :: IO LocalTime @@ -57,3 +54,3679 @@ gracefulDivide (Minutes numerator) (Minutes denominator) = do "-minute meeting instead." ] pure q + +-- London time zone info. +londonTZ :: TZ +londonTZ = runGet olsonGet londonTZFileContents + +-- | The contents of London.zone, just inlined. We can't depend on tzdata as it +-- breaks on Homebrew installs. See +-- https://github.com/alan-turing-institute/meet/issues/16 +londonTZFileContents :: BS.ByteString +londonTZFileContents = + BS.pack + [ 84, + 90, + 105, + 102, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 242, + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 17, + 128, + 0, + 0, + 0, + 155, + 38, + 173, + 160, + 155, + 214, + 5, + 32, + 156, + 207, + 48, + 160, + 157, + 164, + 195, + 160, + 158, + 156, + 157, + 160, + 159, + 151, + 26, + 160, + 160, + 133, + 186, + 32, + 161, + 118, + 252, + 160, + 162, + 101, + 156, + 32, + 163, + 123, + 200, + 160, + 164, + 78, + 184, + 160, + 165, + 63, + 251, + 32, + 166, + 37, + 96, + 32, + 167, + 39, + 198, + 32, + 168, + 42, + 44, + 32, + 168, + 235, + 248, + 160, + 170, + 0, + 211, + 160, + 170, + 213, + 21, + 32, + 171, + 233, + 240, + 32, + 172, + 199, + 108, + 32, + 173, + 201, + 210, + 32, + 174, + 167, + 78, + 32, + 175, + 160, + 121, + 160, + 176, + 135, + 48, + 32, + 177, + 146, + 208, + 160, + 178, + 112, + 76, + 160, + 179, + 114, + 178, + 160, + 180, + 80, + 46, + 160, + 181, + 73, + 90, + 32, + 182, + 48, + 16, + 160, + 183, + 50, + 118, + 160, + 184, + 15, + 242, + 160, + 185, + 18, + 88, + 160, + 185, + 239, + 212, + 160, + 186, + 233, + 0, + 32, + 187, + 216, + 241, + 32, + 188, + 219, + 87, + 32, + 189, + 184, + 211, + 32, + 190, + 177, + 254, + 160, + 191, + 152, + 181, + 32, + 192, + 155, + 27, + 32, + 193, + 120, + 151, + 32, + 194, + 122, + 253, + 32, + 195, + 88, + 121, + 32, + 196, + 81, + 164, + 160, + 197, + 56, + 91, + 32, + 198, + 58, + 193, + 32, + 199, + 88, + 214, + 160, + 199, + 218, + 9, + 160, + 202, + 22, + 38, + 144, + 202, + 151, + 89, + 144, + 203, + 209, + 30, + 144, + 204, + 119, + 59, + 144, + 205, + 177, + 0, + 144, + 206, + 96, + 88, + 16, + 207, + 144, + 226, + 144, + 208, + 110, + 94, + 144, + 209, + 114, + 22, + 16, + 209, + 251, + 50, + 16, + 210, + 105, + 254, + 32, + 211, + 99, + 41, + 160, + 212, + 73, + 224, + 32, + 213, + 30, + 33, + 160, + 213, + 66, + 253, + 144, + 213, + 223, + 224, + 16, + 214, + 78, + 172, + 32, + 214, + 254, + 3, + 160, + 216, + 46, + 142, + 32, + 216, + 249, + 149, + 32, + 218, + 14, + 112, + 32, + 218, + 235, + 236, + 32, + 219, + 229, + 23, + 160, + 220, + 203, + 206, + 32, + 221, + 196, + 249, + 160, + 222, + 180, + 234, + 160, + 223, + 174, + 22, + 32, + 224, + 148, + 204, + 160, + 225, + 114, + 72, + 160, + 226, + 107, + 116, + 32, + 227, + 82, + 42, + 160, + 228, + 84, + 144, + 160, + 229, + 50, + 12, + 160, + 230, + 61, + 173, + 32, + 231, + 27, + 41, + 32, + 232, + 20, + 84, + 160, + 232, + 251, + 11, + 32, + 233, + 253, + 113, + 32, + 234, + 218, + 237, + 32, + 235, + 221, + 83, + 32, + 236, + 186, + 207, + 32, + 237, + 179, + 250, + 160, + 238, + 154, + 177, + 32, + 239, + 129, + 103, + 160, + 240, + 159, + 125, + 32, + 241, + 97, + 73, + 160, + 242, + 127, + 95, + 32, + 243, + 74, + 102, + 32, + 244, + 95, + 65, + 32, + 245, + 33, + 13, + 160, + 246, + 63, + 35, + 32, + 247, + 0, + 239, + 160, + 248, + 31, + 5, + 32, + 248, + 224, + 209, + 160, + 249, + 254, + 231, + 32, + 250, + 192, + 179, + 160, + 251, + 232, + 3, + 160, + 252, + 123, + 171, + 160, + 253, + 199, + 187, + 112, + 3, + 112, + 198, + 32, + 4, + 41, + 88, + 32, + 5, + 80, + 168, + 32, + 6, + 9, + 58, + 32, + 7, + 48, + 138, + 32, + 7, + 233, + 28, + 32, + 9, + 16, + 108, + 32, + 9, + 200, + 254, + 32, + 10, + 240, + 78, + 32, + 11, + 178, + 26, + 160, + 12, + 208, + 48, + 32, + 13, + 145, + 252, + 160, + 14, + 176, + 18, + 32, + 15, + 113, + 222, + 160, + 16, + 153, + 46, + 160, + 17, + 81, + 192, + 160, + 18, + 121, + 16, + 160, + 19, + 49, + 162, + 160, + 20, + 88, + 242, + 160, + 21, + 35, + 235, + 144, + 22, + 56, + 198, + 144, + 23, + 3, + 205, + 144, + 24, + 24, + 168, + 144, + 24, + 227, + 175, + 144, + 25, + 248, + 138, + 144, + 26, + 195, + 145, + 144, + 27, + 225, + 167, + 16, + 28, + 172, + 174, + 16, + 29, + 193, + 137, + 16, + 30, + 140, + 144, + 16, + 31, + 161, + 107, + 16, + 32, + 108, + 114, + 16, + 33, + 129, + 77, + 16, + 34, + 76, + 84, + 16, + 35, + 97, + 47, + 16, + 36, + 44, + 54, + 16, + 37, + 74, + 75, + 144, + 38, + 12, + 24, + 16, + 39, + 42, + 45, + 144, + 39, + 245, + 52, + 144, + 41, + 10, + 15, + 144, + 41, + 213, + 22, + 144, + 42, + 233, + 241, + 144, + 43, + 180, + 248, + 144, + 44, + 201, + 211, + 144, + 45, + 148, + 218, + 144, + 46, + 169, + 181, + 144, + 47, + 116, + 188, + 144, + 48, + 137, + 151, + 144, + 49, + 93, + 217, + 16, + 50, + 114, + 180, + 16, + 51, + 61, + 187, + 16, + 52, + 82, + 150, + 16, + 53, + 29, + 157, + 16, + 54, + 50, + 120, + 16, + 54, + 253, + 127, + 16, + 56, + 27, + 148, + 144, + 56, + 221, + 97, + 16, + 57, + 251, + 118, + 144, + 58, + 189, + 67, + 16, + 59, + 219, + 88, + 144, + 60, + 166, + 95, + 144, + 61, + 187, + 58, + 144, + 62, + 134, + 65, + 144, + 63, + 155, + 28, + 144, + 64, + 102, + 35, + 144, + 65, + 132, + 57, + 16, + 66, + 70, + 5, + 144, + 67, + 100, + 27, + 16, + 68, + 37, + 231, + 144, + 69, + 67, + 253, + 16, + 70, + 5, + 201, + 144, + 71, + 35, + 223, + 16, + 71, + 238, + 230, + 16, + 73, + 3, + 193, + 16, + 73, + 206, + 200, + 16, + 74, + 227, + 163, + 16, + 75, + 174, + 170, + 16, + 76, + 204, + 191, + 144, + 77, + 142, + 140, + 16, + 78, + 172, + 161, + 144, + 79, + 110, + 110, + 16, + 80, + 140, + 131, + 144, + 81, + 87, + 138, + 144, + 82, + 108, + 101, + 144, + 83, + 55, + 108, + 144, + 84, + 76, + 71, + 144, + 85, + 23, + 78, + 144, + 86, + 44, + 41, + 144, + 86, + 247, + 48, + 144, + 88, + 21, + 70, + 16, + 88, + 215, + 18, + 144, + 89, + 245, + 40, + 16, + 90, + 182, + 244, + 144, + 91, + 213, + 10, + 16, + 92, + 160, + 17, + 16, + 93, + 180, + 236, + 16, + 94, + 127, + 243, + 16, + 95, + 148, + 206, + 16, + 96, + 95, + 213, + 16, + 97, + 125, + 234, + 144, + 98, + 63, + 183, + 16, + 99, + 93, + 204, + 144, + 100, + 31, + 153, + 16, + 101, + 61, + 174, + 144, + 102, + 8, + 181, + 144, + 103, + 29, + 144, + 144, + 103, + 232, + 151, + 144, + 104, + 253, + 114, + 144, + 105, + 200, + 121, + 144, + 106, + 221, + 84, + 144, + 107, + 168, + 91, + 144, + 108, + 198, + 113, + 16, + 109, + 136, + 61, + 144, + 110, + 166, + 83, + 16, + 111, + 104, + 31, + 144, + 112, + 134, + 53, + 16, + 113, + 81, + 60, + 16, + 114, + 102, + 23, + 16, + 115, + 49, + 30, + 16, + 116, + 69, + 249, + 16, + 117, + 17, + 0, + 16, + 118, + 47, + 21, + 144, + 118, + 240, + 226, + 16, + 120, + 14, + 247, + 144, + 120, + 208, + 196, + 16, + 121, + 238, + 217, + 144, + 122, + 176, + 166, + 16, + 123, + 206, + 187, + 144, + 124, + 153, + 194, + 144, + 125, + 174, + 157, + 144, + 126, + 121, + 164, + 144, + 127, + 142, + 127, + 144, + 4, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 3, + 1, + 3, + 1, + 3, + 1, + 3, + 1, + 3, + 1, + 2, + 1, + 2, + 1, + 3, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 5, + 7, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 255, + 255, + 255, + 181, + 0, + 0, + 0, + 0, + 14, + 16, + 1, + 4, + 0, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 28, + 32, + 1, + 12, + 0, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 14, + 16, + 0, + 4, + 0, + 0, + 14, + 16, + 1, + 4, + 0, + 0, + 0, + 0, + 0, + 8, + 76, + 77, + 84, + 0, + 66, + 83, + 84, + 0, + 71, + 77, + 84, + 0, + 66, + 68, + 83, + 84, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 84, + 90, + 105, + 102, + 50, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 242, + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 17, + 255, + 255, + 255, + 255, + 26, + 93, + 9, + 203, + 255, + 255, + 255, + 255, + 155, + 38, + 173, + 160, + 255, + 255, + 255, + 255, + 155, + 214, + 5, + 32, + 255, + 255, + 255, + 255, + 156, + 207, + 48, + 160, + 255, + 255, + 255, + 255, + 157, + 164, + 195, + 160, + 255, + 255, + 255, + 255, + 158, + 156, + 157, + 160, + 255, + 255, + 255, + 255, + 159, + 151, + 26, + 160, + 255, + 255, + 255, + 255, + 160, + 133, + 186, + 32, + 255, + 255, + 255, + 255, + 161, + 118, + 252, + 160, + 255, + 255, + 255, + 255, + 162, + 101, + 156, + 32, + 255, + 255, + 255, + 255, + 163, + 123, + 200, + 160, + 255, + 255, + 255, + 255, + 164, + 78, + 184, + 160, + 255, + 255, + 255, + 255, + 165, + 63, + 251, + 32, + 255, + 255, + 255, + 255, + 166, + 37, + 96, + 32, + 255, + 255, + 255, + 255, + 167, + 39, + 198, + 32, + 255, + 255, + 255, + 255, + 168, + 42, + 44, + 32, + 255, + 255, + 255, + 255, + 168, + 235, + 248, + 160, + 255, + 255, + 255, + 255, + 170, + 0, + 211, + 160, + 255, + 255, + 255, + 255, + 170, + 213, + 21, + 32, + 255, + 255, + 255, + 255, + 171, + 233, + 240, + 32, + 255, + 255, + 255, + 255, + 172, + 199, + 108, + 32, + 255, + 255, + 255, + 255, + 173, + 201, + 210, + 32, + 255, + 255, + 255, + 255, + 174, + 167, + 78, + 32, + 255, + 255, + 255, + 255, + 175, + 160, + 121, + 160, + 255, + 255, + 255, + 255, + 176, + 135, + 48, + 32, + 255, + 255, + 255, + 255, + 177, + 146, + 208, + 160, + 255, + 255, + 255, + 255, + 178, + 112, + 76, + 160, + 255, + 255, + 255, + 255, + 179, + 114, + 178, + 160, + 255, + 255, + 255, + 255, + 180, + 80, + 46, + 160, + 255, + 255, + 255, + 255, + 181, + 73, + 90, + 32, + 255, + 255, + 255, + 255, + 182, + 48, + 16, + 160, + 255, + 255, + 255, + 255, + 183, + 50, + 118, + 160, + 255, + 255, + 255, + 255, + 184, + 15, + 242, + 160, + 255, + 255, + 255, + 255, + 185, + 18, + 88, + 160, + 255, + 255, + 255, + 255, + 185, + 239, + 212, + 160, + 255, + 255, + 255, + 255, + 186, + 233, + 0, + 32, + 255, + 255, + 255, + 255, + 187, + 216, + 241, + 32, + 255, + 255, + 255, + 255, + 188, + 219, + 87, + 32, + 255, + 255, + 255, + 255, + 189, + 184, + 211, + 32, + 255, + 255, + 255, + 255, + 190, + 177, + 254, + 160, + 255, + 255, + 255, + 255, + 191, + 152, + 181, + 32, + 255, + 255, + 255, + 255, + 192, + 155, + 27, + 32, + 255, + 255, + 255, + 255, + 193, + 120, + 151, + 32, + 255, + 255, + 255, + 255, + 194, + 122, + 253, + 32, + 255, + 255, + 255, + 255, + 195, + 88, + 121, + 32, + 255, + 255, + 255, + 255, + 196, + 81, + 164, + 160, + 255, + 255, + 255, + 255, + 197, + 56, + 91, + 32, + 255, + 255, + 255, + 255, + 198, + 58, + 193, + 32, + 255, + 255, + 255, + 255, + 199, + 88, + 214, + 160, + 255, + 255, + 255, + 255, + 199, + 218, + 9, + 160, + 255, + 255, + 255, + 255, + 202, + 22, + 38, + 144, + 255, + 255, + 255, + 255, + 202, + 151, + 89, + 144, + 255, + 255, + 255, + 255, + 203, + 209, + 30, + 144, + 255, + 255, + 255, + 255, + 204, + 119, + 59, + 144, + 255, + 255, + 255, + 255, + 205, + 177, + 0, + 144, + 255, + 255, + 255, + 255, + 206, + 96, + 88, + 16, + 255, + 255, + 255, + 255, + 207, + 144, + 226, + 144, + 255, + 255, + 255, + 255, + 208, + 110, + 94, + 144, + 255, + 255, + 255, + 255, + 209, + 114, + 22, + 16, + 255, + 255, + 255, + 255, + 209, + 251, + 50, + 16, + 255, + 255, + 255, + 255, + 210, + 105, + 254, + 32, + 255, + 255, + 255, + 255, + 211, + 99, + 41, + 160, + 255, + 255, + 255, + 255, + 212, + 73, + 224, + 32, + 255, + 255, + 255, + 255, + 213, + 30, + 33, + 160, + 255, + 255, + 255, + 255, + 213, + 66, + 253, + 144, + 255, + 255, + 255, + 255, + 213, + 223, + 224, + 16, + 255, + 255, + 255, + 255, + 214, + 78, + 172, + 32, + 255, + 255, + 255, + 255, + 214, + 254, + 3, + 160, + 255, + 255, + 255, + 255, + 216, + 46, + 142, + 32, + 255, + 255, + 255, + 255, + 216, + 249, + 149, + 32, + 255, + 255, + 255, + 255, + 218, + 14, + 112, + 32, + 255, + 255, + 255, + 255, + 218, + 235, + 236, + 32, + 255, + 255, + 255, + 255, + 219, + 229, + 23, + 160, + 255, + 255, + 255, + 255, + 220, + 203, + 206, + 32, + 255, + 255, + 255, + 255, + 221, + 196, + 249, + 160, + 255, + 255, + 255, + 255, + 222, + 180, + 234, + 160, + 255, + 255, + 255, + 255, + 223, + 174, + 22, + 32, + 255, + 255, + 255, + 255, + 224, + 148, + 204, + 160, + 255, + 255, + 255, + 255, + 225, + 114, + 72, + 160, + 255, + 255, + 255, + 255, + 226, + 107, + 116, + 32, + 255, + 255, + 255, + 255, + 227, + 82, + 42, + 160, + 255, + 255, + 255, + 255, + 228, + 84, + 144, + 160, + 255, + 255, + 255, + 255, + 229, + 50, + 12, + 160, + 255, + 255, + 255, + 255, + 230, + 61, + 173, + 32, + 255, + 255, + 255, + 255, + 231, + 27, + 41, + 32, + 255, + 255, + 255, + 255, + 232, + 20, + 84, + 160, + 255, + 255, + 255, + 255, + 232, + 251, + 11, + 32, + 255, + 255, + 255, + 255, + 233, + 253, + 113, + 32, + 255, + 255, + 255, + 255, + 234, + 218, + 237, + 32, + 255, + 255, + 255, + 255, + 235, + 221, + 83, + 32, + 255, + 255, + 255, + 255, + 236, + 186, + 207, + 32, + 255, + 255, + 255, + 255, + 237, + 179, + 250, + 160, + 255, + 255, + 255, + 255, + 238, + 154, + 177, + 32, + 255, + 255, + 255, + 255, + 239, + 129, + 103, + 160, + 255, + 255, + 255, + 255, + 240, + 159, + 125, + 32, + 255, + 255, + 255, + 255, + 241, + 97, + 73, + 160, + 255, + 255, + 255, + 255, + 242, + 127, + 95, + 32, + 255, + 255, + 255, + 255, + 243, + 74, + 102, + 32, + 255, + 255, + 255, + 255, + 244, + 95, + 65, + 32, + 255, + 255, + 255, + 255, + 245, + 33, + 13, + 160, + 255, + 255, + 255, + 255, + 246, + 63, + 35, + 32, + 255, + 255, + 255, + 255, + 247, + 0, + 239, + 160, + 255, + 255, + 255, + 255, + 248, + 31, + 5, + 32, + 255, + 255, + 255, + 255, + 248, + 224, + 209, + 160, + 255, + 255, + 255, + 255, + 249, + 254, + 231, + 32, + 255, + 255, + 255, + 255, + 250, + 192, + 179, + 160, + 255, + 255, + 255, + 255, + 251, + 232, + 3, + 160, + 255, + 255, + 255, + 255, + 252, + 123, + 171, + 160, + 255, + 255, + 255, + 255, + 253, + 199, + 187, + 112, + 0, + 0, + 0, + 0, + 3, + 112, + 198, + 32, + 0, + 0, + 0, + 0, + 4, + 41, + 88, + 32, + 0, + 0, + 0, + 0, + 5, + 80, + 168, + 32, + 0, + 0, + 0, + 0, + 6, + 9, + 58, + 32, + 0, + 0, + 0, + 0, + 7, + 48, + 138, + 32, + 0, + 0, + 0, + 0, + 7, + 233, + 28, + 32, + 0, + 0, + 0, + 0, + 9, + 16, + 108, + 32, + 0, + 0, + 0, + 0, + 9, + 200, + 254, + 32, + 0, + 0, + 0, + 0, + 10, + 240, + 78, + 32, + 0, + 0, + 0, + 0, + 11, + 178, + 26, + 160, + 0, + 0, + 0, + 0, + 12, + 208, + 48, + 32, + 0, + 0, + 0, + 0, + 13, + 145, + 252, + 160, + 0, + 0, + 0, + 0, + 14, + 176, + 18, + 32, + 0, + 0, + 0, + 0, + 15, + 113, + 222, + 160, + 0, + 0, + 0, + 0, + 16, + 153, + 46, + 160, + 0, + 0, + 0, + 0, + 17, + 81, + 192, + 160, + 0, + 0, + 0, + 0, + 18, + 121, + 16, + 160, + 0, + 0, + 0, + 0, + 19, + 49, + 162, + 160, + 0, + 0, + 0, + 0, + 20, + 88, + 242, + 160, + 0, + 0, + 0, + 0, + 21, + 35, + 235, + 144, + 0, + 0, + 0, + 0, + 22, + 56, + 198, + 144, + 0, + 0, + 0, + 0, + 23, + 3, + 205, + 144, + 0, + 0, + 0, + 0, + 24, + 24, + 168, + 144, + 0, + 0, + 0, + 0, + 24, + 227, + 175, + 144, + 0, + 0, + 0, + 0, + 25, + 248, + 138, + 144, + 0, + 0, + 0, + 0, + 26, + 195, + 145, + 144, + 0, + 0, + 0, + 0, + 27, + 225, + 167, + 16, + 0, + 0, + 0, + 0, + 28, + 172, + 174, + 16, + 0, + 0, + 0, + 0, + 29, + 193, + 137, + 16, + 0, + 0, + 0, + 0, + 30, + 140, + 144, + 16, + 0, + 0, + 0, + 0, + 31, + 161, + 107, + 16, + 0, + 0, + 0, + 0, + 32, + 108, + 114, + 16, + 0, + 0, + 0, + 0, + 33, + 129, + 77, + 16, + 0, + 0, + 0, + 0, + 34, + 76, + 84, + 16, + 0, + 0, + 0, + 0, + 35, + 97, + 47, + 16, + 0, + 0, + 0, + 0, + 36, + 44, + 54, + 16, + 0, + 0, + 0, + 0, + 37, + 74, + 75, + 144, + 0, + 0, + 0, + 0, + 38, + 12, + 24, + 16, + 0, + 0, + 0, + 0, + 39, + 42, + 45, + 144, + 0, + 0, + 0, + 0, + 39, + 245, + 52, + 144, + 0, + 0, + 0, + 0, + 41, + 10, + 15, + 144, + 0, + 0, + 0, + 0, + 41, + 213, + 22, + 144, + 0, + 0, + 0, + 0, + 42, + 233, + 241, + 144, + 0, + 0, + 0, + 0, + 43, + 180, + 248, + 144, + 0, + 0, + 0, + 0, + 44, + 201, + 211, + 144, + 0, + 0, + 0, + 0, + 45, + 148, + 218, + 144, + 0, + 0, + 0, + 0, + 46, + 169, + 181, + 144, + 0, + 0, + 0, + 0, + 47, + 116, + 188, + 144, + 0, + 0, + 0, + 0, + 48, + 137, + 151, + 144, + 0, + 0, + 0, + 0, + 49, + 93, + 217, + 16, + 0, + 0, + 0, + 0, + 50, + 114, + 180, + 16, + 0, + 0, + 0, + 0, + 51, + 61, + 187, + 16, + 0, + 0, + 0, + 0, + 52, + 82, + 150, + 16, + 0, + 0, + 0, + 0, + 53, + 29, + 157, + 16, + 0, + 0, + 0, + 0, + 54, + 50, + 120, + 16, + 0, + 0, + 0, + 0, + 54, + 253, + 127, + 16, + 0, + 0, + 0, + 0, + 56, + 27, + 148, + 144, + 0, + 0, + 0, + 0, + 56, + 221, + 97, + 16, + 0, + 0, + 0, + 0, + 57, + 251, + 118, + 144, + 0, + 0, + 0, + 0, + 58, + 189, + 67, + 16, + 0, + 0, + 0, + 0, + 59, + 219, + 88, + 144, + 0, + 0, + 0, + 0, + 60, + 166, + 95, + 144, + 0, + 0, + 0, + 0, + 61, + 187, + 58, + 144, + 0, + 0, + 0, + 0, + 62, + 134, + 65, + 144, + 0, + 0, + 0, + 0, + 63, + 155, + 28, + 144, + 0, + 0, + 0, + 0, + 64, + 102, + 35, + 144, + 0, + 0, + 0, + 0, + 65, + 132, + 57, + 16, + 0, + 0, + 0, + 0, + 66, + 70, + 5, + 144, + 0, + 0, + 0, + 0, + 67, + 100, + 27, + 16, + 0, + 0, + 0, + 0, + 68, + 37, + 231, + 144, + 0, + 0, + 0, + 0, + 69, + 67, + 253, + 16, + 0, + 0, + 0, + 0, + 70, + 5, + 201, + 144, + 0, + 0, + 0, + 0, + 71, + 35, + 223, + 16, + 0, + 0, + 0, + 0, + 71, + 238, + 230, + 16, + 0, + 0, + 0, + 0, + 73, + 3, + 193, + 16, + 0, + 0, + 0, + 0, + 73, + 206, + 200, + 16, + 0, + 0, + 0, + 0, + 74, + 227, + 163, + 16, + 0, + 0, + 0, + 0, + 75, + 174, + 170, + 16, + 0, + 0, + 0, + 0, + 76, + 204, + 191, + 144, + 0, + 0, + 0, + 0, + 77, + 142, + 140, + 16, + 0, + 0, + 0, + 0, + 78, + 172, + 161, + 144, + 0, + 0, + 0, + 0, + 79, + 110, + 110, + 16, + 0, + 0, + 0, + 0, + 80, + 140, + 131, + 144, + 0, + 0, + 0, + 0, + 81, + 87, + 138, + 144, + 0, + 0, + 0, + 0, + 82, + 108, + 101, + 144, + 0, + 0, + 0, + 0, + 83, + 55, + 108, + 144, + 0, + 0, + 0, + 0, + 84, + 76, + 71, + 144, + 0, + 0, + 0, + 0, + 85, + 23, + 78, + 144, + 0, + 0, + 0, + 0, + 86, + 44, + 41, + 144, + 0, + 0, + 0, + 0, + 86, + 247, + 48, + 144, + 0, + 0, + 0, + 0, + 88, + 21, + 70, + 16, + 0, + 0, + 0, + 0, + 88, + 215, + 18, + 144, + 0, + 0, + 0, + 0, + 89, + 245, + 40, + 16, + 0, + 0, + 0, + 0, + 90, + 182, + 244, + 144, + 0, + 0, + 0, + 0, + 91, + 213, + 10, + 16, + 0, + 0, + 0, + 0, + 92, + 160, + 17, + 16, + 0, + 0, + 0, + 0, + 93, + 180, + 236, + 16, + 0, + 0, + 0, + 0, + 94, + 127, + 243, + 16, + 0, + 0, + 0, + 0, + 95, + 148, + 206, + 16, + 0, + 0, + 0, + 0, + 96, + 95, + 213, + 16, + 0, + 0, + 0, + 0, + 97, + 125, + 234, + 144, + 0, + 0, + 0, + 0, + 98, + 63, + 183, + 16, + 0, + 0, + 0, + 0, + 99, + 93, + 204, + 144, + 0, + 0, + 0, + 0, + 100, + 31, + 153, + 16, + 0, + 0, + 0, + 0, + 101, + 61, + 174, + 144, + 0, + 0, + 0, + 0, + 102, + 8, + 181, + 144, + 0, + 0, + 0, + 0, + 103, + 29, + 144, + 144, + 0, + 0, + 0, + 0, + 103, + 232, + 151, + 144, + 0, + 0, + 0, + 0, + 104, + 253, + 114, + 144, + 0, + 0, + 0, + 0, + 105, + 200, + 121, + 144, + 0, + 0, + 0, + 0, + 106, + 221, + 84, + 144, + 0, + 0, + 0, + 0, + 107, + 168, + 91, + 144, + 0, + 0, + 0, + 0, + 108, + 198, + 113, + 16, + 0, + 0, + 0, + 0, + 109, + 136, + 61, + 144, + 0, + 0, + 0, + 0, + 110, + 166, + 83, + 16, + 0, + 0, + 0, + 0, + 111, + 104, + 31, + 144, + 0, + 0, + 0, + 0, + 112, + 134, + 53, + 16, + 0, + 0, + 0, + 0, + 113, + 81, + 60, + 16, + 0, + 0, + 0, + 0, + 114, + 102, + 23, + 16, + 0, + 0, + 0, + 0, + 115, + 49, + 30, + 16, + 0, + 0, + 0, + 0, + 116, + 69, + 249, + 16, + 0, + 0, + 0, + 0, + 117, + 17, + 0, + 16, + 0, + 0, + 0, + 0, + 118, + 47, + 21, + 144, + 0, + 0, + 0, + 0, + 118, + 240, + 226, + 16, + 0, + 0, + 0, + 0, + 120, + 14, + 247, + 144, + 0, + 0, + 0, + 0, + 120, + 208, + 196, + 16, + 0, + 0, + 0, + 0, + 121, + 238, + 217, + 144, + 0, + 0, + 0, + 0, + 122, + 176, + 166, + 16, + 0, + 0, + 0, + 0, + 123, + 206, + 187, + 144, + 0, + 0, + 0, + 0, + 124, + 153, + 194, + 144, + 0, + 0, + 0, + 0, + 125, + 174, + 157, + 144, + 0, + 0, + 0, + 0, + 126, + 121, + 164, + 144, + 0, + 0, + 0, + 0, + 127, + 142, + 127, + 144, + 4, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 3, + 1, + 3, + 1, + 3, + 1, + 3, + 1, + 3, + 1, + 2, + 1, + 2, + 1, + 3, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 5, + 7, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 1, + 2, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 6, + 7, + 255, + 255, + 255, + 181, + 0, + 0, + 0, + 0, + 14, + 16, + 1, + 4, + 0, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 28, + 32, + 1, + 12, + 0, + 0, + 0, + 0, + 0, + 8, + 0, + 0, + 14, + 16, + 0, + 4, + 0, + 0, + 14, + 16, + 1, + 4, + 0, + 0, + 0, + 0, + 0, + 8, + 76, + 77, + 84, + 0, + 66, + 83, + 84, + 0, + 71, + 77, + 84, + 0, + 66, + 68, + 83, + 84, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 10, + 71, + 77, + 84, + 48, + 66, + 83, + 84, + 44, + 77, + 51, + 46, + 53, + 46, + 48, + 47, + 49, + 44, + 77, + 49, + 48, + 46, + 53, + 46, + 48, + 10 + ]