Improve is_emoji.

This commit is contained in:
levlam 2023-05-17 20:04:12 +03:00
parent 20b312b144
commit 7bea39b6fa
2 changed files with 193 additions and 269 deletions

View File

@ -13,274 +13,184 @@
namespace td {
bool is_emoji(Slice str) {
constexpr size_t MAX_EMOJI_LENGTH = 38;
constexpr size_t MAX_EMOJI_LENGTH = 35;
static const FlatHashSet<Slice, SliceHash> emojis = [max_emoji_length = MAX_EMOJI_LENGTH] {
#if TD_HAVE_ZLIB
Slice packed_emojis(
"eJyVvWly20qztTuVL-L7d36dvpmdTcuSbXUm1YKSLDcwIQmSTImSqAZNxB3KewdwdsSdwN1YWAlkVpIQFHGwnE9VViaYVQBYoM5-_7Ex_j__"
"2Bj_7-P23_"
"8cVQfM7fPqqM2L6qjNtDpq87I6anNaHbU5qw6YB3l11GZRHTAPd6ujNveqA2b0qTpq83N11OaX6qjN9eqozY3qqM3N6qjNreqoTRy1-"
"bU6anNYHbU5qo7a3KmO2iyrA-"
"Z4pzpq80d11OZFddRmWh21mVdHbRbVAfNopTpq82N11OZWddTmbnXU5kV11OZtddTmrDpq8746avO5Omozrw6Yxx-roza_"
"VEdtrldHbZ5VB8yTjeqoza3qqM2d6qjN3eqozb3qqM2D6oD5ba86anO_OmrzoDpqc1odtVlWB8zLo-qozePqgHn1tTpqc686KvOv03crkBo-"
"1FLD6haEMIQQRhDCDoSwCyHsQQj7EMIBhHAIIUQQwhhSw6f3EMIYQvgDIdxCCDMI4Q5CuIcQHiCERwjhCUJ4htTw-"
"SuEMITUsPEOQngPIQwghA8QwgqE8BFCWIUQ1iCETxDCZwjhC4SwDiFsQAibEMIWhFAL4SuEMIQQRhDCDoSwCyHsQQj7EMIBhHAIIUQQwhhCOII"
"QjiGEEwjhG4RwCiF8hxCuIIRrCOEPhDCFEG4ghFsIYQYh3EEI9xDCHEJ4hBCeIIRnCOEFQsgghBxCKCCEElLD5jsI4T2EMIAQPkAIKxDCRwhhF"
"UJYgxA-"
"QQifIYQvEMI6hLABIWxCCFsQQi2ErxDCEEIYQQg7EMIuhLAHIexDCAcQwiGEEEEIYwjhCEI4hhBOIIRvEMIphPAdQvgBIfyEEH5BCDGE8BtCmE"
"AICYRwBiGcQwgXEEIKIVxCCFcQwjWE8AdCmEIINxDCLYQwgxDuIIR7COEBQphDCI8QwhOE8AwhvEAIGYRQQAglpIatdxDCewhhACF8gBBWIISP"
"EMIqhLAGIXyCED5DCF8ghHUIYQNC2IQQtiCEWghfIYQhhDCCEHYghO8Qwg8I4SeE8AtCiCGE3xDCBEJIIIQzCOEcQriAEFII4RJCuIIQriGEPx"
"DCFEK4gRBuIYQZhHAHIdxDCA8QwhxCeIQQniCEZwjhBULIIIQcQigghBJSw_"
"Y7COE9hDCAED5ACCsQwkcIYRVCWIMQPkEInyGELxBCLYSvEMIQQhhBCDsQwncI4QeE8BNC-"
"AUhxBDCbwhhAiEkEMIZhHAOIVxACCmEcAkhXEEI1xDCHwhhCiHcQQiPEMIThPAMIbxACBmEkEMIBYRQQmr4-"
"g5CeA8hDCCEDxDCCoTwEUJYhRDWIIRPEMJnCOELhLAOIWxACJsQwhaEUAvhK4QwhBBGEMIOhLALIexBCPsQwgGEcAghRBDCGEI4ghCOIYQTCOE"
"bhHAKIXyHEH5ACD8hhF8QQgwh_IYQJhBCAiGcQQjnEMIFhJBCCJcQwhWEcA0h_"
"IEQphDCDYRwCyHMIIQ7COEeQniAEOYQwiOE8AQhPEMILxBCBiHkEEIBqWH4DkIYQAgfIIQVCOEjhLAKIaxBCJ8ghM8QwhcIYR1C2IAQNiGELQi"
"hFsJXCGEIIYwghB0IYRdC2IMQ9iGEAwjhEEKIIIQxhHAEIRxDCCcQwjcI4RRC-A4h_"
"IAQfkIIvyCEGEL4DSFMIIQEQjiDEM4hhAsIIYUQLiGEKwjhGkL4AyFMIYQbCOEWQphBCHcQwj2E8AAhzCGERwjhCUJ4hhBeIIQMQsghhAJCKCE"
"1jN5BCO8hhAGE8AFCWIEQPkIIqxDCGoTwCUL4DCF8gRDWIYQNCGETQtiCEGohfIUQhhDCCELYgRB2IYQ9CGEfQjiAEA4hhAhCGEMIRxDCMYRwA"
"iF8gxBOIYTvEMIPCOEnhPALQoghhN8QwgRCSCCEMwjhHEK4gBBSCOESQriCEK4hhD8QwhRCuIEQbiGEGYRwByHcQwgPEMIcQniEEJ4ghGcI4QV"
"CyCCEHEIoIIQSUsPOOwjhPYQwgBA-"
"QAgrEMJHCGEVQliDED5BCJ8hhC8QwjqEsAEhbEIIWxBCLYSvEMIQQhhBCDsQwi6EsAch7EMIBxDCIYQQQQhjCOEIQjiGEE4ghG8QwimE8B1C-"
"AEh_"
"IQQfkEIMYTwG0KYQAgJhHAGIZxDCBcQQgohXEIIVxDCNYTwB0KYQgg3EMIthDCDEO4ghHsI4QFCmEMIjxDCE4TwDCG8QAgZhFBCath9ByG8hxA"
"GEMIHCGEFQvgIIaxCCGsQwicI4TOE8AVCWIcQNiCETQhhC0KohfAVQhhCCCMIYQdC2IUQ9iCEfQjhAEI4hBAiCGEMIRxBCMcQwgmE8A1COIUQv"
"kMIPyCEnxDCLwghhhB-QwgTCCGBEM4ghHMI4QJCSCGESwjhCkK4hhD-"
"QAhTCOEGQriFEGYQwh2EcA8hPEAIcwjhEUJ4ghCeIYQXCCGDEHJIDXvrEMIGhLAJIWxBCF8hhCGEMIIQdiCEXQhhD0LYhxAOIIRDCCGCEMYQwh"
"GEcAwhnEAI3yCEUwjhO4TwA0L4CSH8ghBiCOE3hDCBEBII4RlSw_"
"4ehLAPIcSQGg5eIIQMQsghhAJCKCE1HL6DEN5DCAMI4QOEsAIhfIQQViGENQjhE4TwGUL4AiGsQwgbEMImhLAFIdRC-"
"AohDCGEEYSwAyHsQgh7EMI-"
"hHAAIRxCCBGEMIYQjiCEYwjhBEL4BiGcQgjfIYQfEMJPCOEXhBBDCL8hhAmEkEAIZxDCOYRwASGkEMIlhHAFIVxDCH8ghCmEcAMh3EIIMwjhDk"
"K4hxAeIIQ5hPAIITxBCM8QwguEkEEIOYRQQAglpIboHYTwHkIYQAgfIIQVCOEjhLAKIaxBCJ8ghM8QwhcIYR1C2IAQNiGELQihlhrG7yCE9xDC"
"AEL4ACGsQAgfIYRVCGENQvgEIXyGEL5ACOsQwgaEsAkhbEEItRC-"
"QghDCGEEIexACLsQwh6EsA8hHEAIhxBCBCGMIYQjCOEYQjiBEL5BCKcQwncI4QeE8BNC-"
"AUhxBDCbwhhAiEkEMIZhHAOIVxACCmEcAkhXEEI1xDCHwhhCiHcQAi3EMIMQriDEO4hhAcIYQ4hPEIITxDCM4TwAiFkEEIOIRQQQgmp4egdhPA"
"eQhhACB8ghBUI4SOEsAEhfIUQhhDCCELYgxD2IYQDCOEYQjiBEL5BCKcQQgohXEIIdxDCPYTwACHMIYRHCOEJQniGEF4ghAxSw-"
"l3COEHhPATQvgFIcQQwm8IYQIhJBDCGYRwDiFcQAgphDCF1BBvQAibEMIWhFAL4SuEMIQQRhDCDoSwCyHsQQj7EMIBhHAIIUQQwhhCOIIQjiGE"
"EwjhG4RwCiF8hxB-QAg_"
"IYRfEEIMIfyGECYQQgIhnEEI5xDCBYSQQgiXEMIVhHANIfyBEKYQwg2EcAshzCCEOwjhHkJ4gBDmEMIjhPAEITxDCBmEkEMIBYRQQmr4_"
"Q5CeA8hDCCEDxDCCoTwEUJYgxA-"
"QQifIYQvEMI6hLABIWxCCFsQQi2ErxDCEEIYQQg7EMIuhLAHIexDCAcQwiGEEEEIYwjhCEI4hhBOIIRvEMIphPAdQvgBIfyEEH5BCDGE8BtCmE"
"AICYRwBiGcQwgXEEIKIVxCCFcQwjWE8AdCmEIINxDCLYQwgxDuIIR7COEBQphDCI8QwhOE8AwhvEAIGYSQQwgFhFBCapi8gxDeQwgDCOEDhLAC"
"IXyEEFYhhDUI4ROE8BlC-AIhrEMIGxDCJoSwBSHUQvgKIQwhhBGEsAMh7EIIexDCPoRwACEcQggRhDCGEI4ghGMI4QRC-"
"AYhnEII3yGEHxDCTwjhF4QQQwi_IYQJhJBACGcQwjmEcAEhpBDCJYRwBSFcQwh_"
"IIQphHADIdxCCDMI4Q5CuIcQHiCEOYTwCCE8QQjPEMILhJBBCDmEUEAIJaSG5B2E8B5CGEAIHyCEFQjhI4SwCiGsQQifIITPEMIXCGEdQtiAED"
"YhhC0IoRbCVwhhCCGMIIQdCGEXQtiDEPYhhAMI4RBCiCCEMYRwBCEcQwgnEMI3COEUQvgOIfyAEH5CCL8ghBhC-"
"A0hTCCEBEI4gxDOIYQLCCGFEC4hhCsI4RpC-"
"AMhTCGEGwjhFkKYQQh3EMI9hPAAIcwhhEcI4QlCeIYQXiCEDELIIYQCQighNZxPIYQbCOEWQphBCHcQwj2E8AAhzCGERwjhCUJ4hhBeIIQMUsP"
"FOwjhPYQwgBA-"
"QAgrEMJHCGEVQliDED5BCF8hhCGEMIIQdiCEXQhhD0LYhxAOIIRDCCGCEMYQwhGEcAwhnEAI3yCEUwjhO4TwA0L4CSH8ghBiCOE3hDCBEBII4Q"
"xCOIcQLiCEFEK4hBCuIIRrCOEPhDCFEG4ghFsIYQYh3EEI9xDCA4QwhxAeIYQnCOEZQniBEDIIIYcQSkgN6TsI4T2EMIAQPkAIKxDCRwhhC0Ko"
"hfAVQhhCCCMIYQdC2IUQ9iCEfQjhAEI4hBAiCGEMIRxBCN8hhB8Qwk8I4ReEEEMIvyGECYSQQAhnEMIUQriBEG4hhBmEcAch3EMIDxDCHEJ4hF"
"Tw_5z__X8wrv_-v8r4x7usOmC-_1wdMFd-VkdtPlUHzNXd6qjNveqozf3qqM2D6qjNw-"
"qozag6avO8OmrzojpgbpxVB8xtHLV5VR21eV0dtfmnOmrzpjpq87Y6avOxOmrzqTpq87k6YO4MqgPm_kV11GZaHbX5UB0wD95VR22-"
"VEdtZtUB8_BdddTm--qozUF11OaH6qjNleqoza3qqM1hddTmYXXU5kl11Ob36qjNn9VRm7-qozYn1VGbF9VRm9fVUZt_qqM2H6ujNp-"
"qozafqwNm9K46anNQHbV5Wh21-b06avNXddTm7-qozUl11OZZddTmS3XUZlEdMMej6qjN3eqozb3qqM396qjNg-"
"qozag6avOoOmrzuDpq83t11GZSHbU5rY7avKkOmEefqqM2cdTmsDpqc6c6avO8OmpzWh21eVMdtXlXHbU5r47afKyO2nyqDpjHg-qozU_"
"VUZufq6M2N6qjNjerozZx1OaoOmpztzpqc786avOkOmrzR3XU5qw6avOuOmCerFRHba5VR23-"
"qo7ajKsD5rcf1QEzvquO2ryvDpiXH6ujNlerozbXqqMy_9930-qozbw6YH45qI7ajKqjvoV9nEIINxBCASGUkBo-DSCEOaSGjR8QQgwh_"
"IYQJhBCAiGcQQjnEMIFhJBCCJcQwgOkhs0cUsPWPoRwACFEEMIYQjiCEL5BCKeQGrbXIYQNCGETQtiCEHYhhD0IYR9COIAQDiGECEIYQwhHEMI"
"xhHACIXyDEE4hhBmEcA8hzCE1fC0hNQzfQ2rYySE17H2GEL5ACH8ghCmEMIMQ7iCEewjhAUKYQwiPEMITpIb9NQjhC4SwDiFsQAibEMJXCOE3h"
"HAGIdxACLcQQgap4WAAIXyAEFYghCGEMIIQdiCEYwjhBEL4BiH8gBB-QQhnEMIfCGEGITxDajhahxA2IYQtCKEWwncI4QeE8BNC-"
"AUhxBDCbwjhHEKYQggzSAX_9x8ffv2f__u3pf6t2v-p4n9i-z-17f9c8T-z_Z_b9n-p-F_Y_i9t-79W_K9s_9e2_d8q_je2_1vb_u8V_zvb_"
"71t_4-K_4Pt_9G2_2fF_8n2_2zb_6vi_2L7f7Xt_13xf7P9v9v2_6n4f9j-P237X6drk7-"
"Ps8ZQjeeNoRovGkM1po2hGi8bQzVeN4ZqvGkM1XjbGKrxrjFU40NjqMZ5Y6jGx8ZQjU-"
"NoRqfG0M1Zo2hGvPGUI1lY7AxqbgxVGPSGKrxvDFU40VjqMa0MVTjZWOoxqvGUI3XjaEa_"
"zSGarxpDNV42xiqcdYYqvGuMVTjQ2OoxnljqMbHxlCNT42hGl8aQzVmjaEai8ZQjWVjsPFMJu5MTVxlnzWGajxvDNWYNoZqvGwM1XjVGKrxujF"
"U47QxVONNY6jG28ZQjbPGUI13jaEa7xtDNc4bQzU-"
"N4ZqfGkM1Zg1hmrMG0M1Fo2hGsvGYOP5X7w6YKjGy8ZQjX8aQzVOG0M13jaGarxrDNVYNgYbL2TZXKhlcyHL5kItmws5-"
"Qt18hdy8hfq5C9khVyoFXIh03GhpqOyHxtDNT41hmp8bgw2prLqUrXqUildqkqXSulSVbpUSpeq0qVSulSVLpWTT9XJX0rpLlXpKjtpDNV43hi"
"q8aIxVGPaGKrxsjFU41VjqMbrxlCNN42hGm8bQzXOGkM13jeGanxoDNU4bwzV-NgYqvGpMVTjc2OoxqwxVGPRGGy8kim-UlN8JR_zSn3MK_"
"mYV-pjXsnJX6mTv5LzvFLneSXneaXO8_ovXjIwVON5Y6jGi8ZQjTeNoRpvG0M1zhpDNd41hmp8aAzVOG8M1fjYGKrxqTHY-EdO_o86-T9ynn_"
"Uef6RU_qjTumPrKU_ai1NJeZUxazsy8ZQjVeNoRqvG0M13jaGapw1hmq8bwzVOG8M1Zg1hmosGkM1lo3Bxpu_"
"eLuAoRqTxlCNZ42hGq8bQzVOG0M1zhtDNT42hmp8agzV-NwYqvGlMVRj0RhsvJWPeas-"
"5q18olv1iSr7vDFU40VjqMa0MVTjZWOoxqvGUI3TxlCNN42hGm8bQzXOGkM13jWGarxvDNX40Biqcd4YqvGxMVTjU2OoxufGUI0vjaEas8ZQjX"
"ljqMaiMVRj2RhsnMkUz9QUz2SKZ2qKZzKbMzWbM5nNmZrNmczmTM1mZV83hmq8aQzVeNcYqvG-"
"MVTjvDFU43NjqMayMdh4JyvkTq2QeynIvSrIvXz2e_XZ7-Wz36vPfi-f_V599sq-"
"agzVOG0M1XjTGKrxtjFU46wxVOO8MVTjY2OoxqfGUI1ZY6jGojHY-"
"CBVelBVmkuV5qpKc5nNuZrNuZzSXJ3SXCZuriZuLqc0V6f0KNkfVfbKThpDNZ41hmo8bwzVeNEYqvGyMVTjVWOoxuvGUI1_"
"GkM1ThtDNd40hmq8bQzVOGsM1XjXGKpx3hiq8bExVONTY6jGl8ZQjXljqMaiMVRj2RhsfJKJe1IT9yRz9KTm6Enm6EnNUWWnjaEaLxtDNV41hm"
"r80xiqcdoYqvGmMVTjbWOoxlljqMa7xlCN88ZQjU-NoRpfGkM1Zo2hGsvGYOOzFPlZFflZqvSsqvQsn-hZfaJn-"
"UTP6hM9y7J5VsvmWeb9Wc37s5zSszqlFzmlF3VKLzLvL2reK_"
"uiMVTjZWOoxuvGUI2zxlCNz43BxkzWUqbWUiYfM1MfM5cVkqsVUsh5Fuo8C5nNQs1mKZ-9VJ-9lMqXqvKlTHHZTvH23f_3_X3y9_Hz7-"
"P338c1uezsXDB49vfx6-_jbtFg07lg8Pzv45J-brDprAb_4_AE_2E3_ts2ZfJv25TLv21TIf-2TaX8i6ajpzp8_W_blMm_bVMu_"
"7ZNhfzbNpXyL5qOv9Th63_bpkz-bZty-bdtKuTftqmUf-umdYZfb8OvM_x6G36d4dfb8OsMv96GX2f49Tb8BsNvtOE3GH6jDb_B8Btt-"
"A2G32jDbzD8Rht-k-E32_CbDL_Zht9k-M02_CbDb7bhNxl-s_3P-W195H8TsDZUY9YYqjFvDNVYNIZqLBuD63sg__"
"HBgfoPEA7kP0I4UP8hwgET1YZqLBpDNZaNwcYPkuiDSvRBEn1QiT5Iog8q0QdJ9EEl-"
"iCJPqhEK5JoRSVakUQrKtGKJFpRiVYk0YpKtCKJVlSiNUm0phKtSaI1lWhNEq2pRGuSaE0lWpNEayrRF0n0RSX6Iom-"
"qERfJNEXleiLJPqiEn2RRF9UonVJtK4SrUuidZVoXRKtq0TrkmhdJVqXROsq0YYk2lCJNiTRhkq0IYk2VKINSbShEm1Ioo020VCW91At76Es76"
"Fa3kNZ3kO1vIeyvIdqeQ9leQ_V8h7K8h6q5T2U5T1Uy3soy3uolvdQlvdQLe-hLO-hWt7DVUm0qhKtSqJVlWhVEq2qRKuSaFUlWpVEqyqRLO-"
"hWt5DWd5DtbyHsryHankPZXkP1fIeyvIequU9_CSJPqlEnyTRJ5XokyT6pBJ9kkSfVKJPkuiTSvRZEn1WiT5Los8q0WdJ9Fkl-"
"iyJPqtEnyXRZ5VILtihumCHcsEO1QU7lAt2qC7YoVywQ3XBDuWCHaoLdigX7FBdsEO5YIfqgh3KBTtUF-"
"xQLtihumCHcsEO1QU7lAt2qC7YoVywQ3XBDuWCHaoLdigX7FBdsEO5YIf6gt2URJsq0aYk2lSJNiXRpkq0KYk2VaJNSaSesMMtSbSlEm1Joi2V"
"aEsSbalEW5JoSyXakkRbKtG2JNpWibYl0bZKtC2JtlWibUm0rRJtS6JtleirJPqqEn2VRF9Voq-"
"S6KtK9FUSfVWJvkqiryrRRBJNVKKJJJqoRBNJNFGJJpJoohJNJNFEJUokUaISJZIoUYkSSZSoRIkkSlSiRBIlKtGZJDpTic4k0ZlKdCaJzlSiM"
"0l0phKdSaIzlehcEp2rROeS6FwlOpdE5yrRuSQ6V4nOJdG5SpRKolQlSiVRqhKlkihViVJJlKpEqSRKVaJLSXSpEl1KokuV6FISXapEl5LoUiW"
"6lESXKtGVJLpSia4k0ZVKdCWJrlSiK0l0pRJdSaIrlehaEl2rRNeS6FolupZE1yrRtSS6VomuJdG1SjSVRFOVaCqJpirRVBJNVaKpJJqqRFNJN"
"FWJbiTRjUp0I4luVKIbSXSjEt1IohuV6EYS3ahEt5LoViW6lUS3KtGtJLpViW4l0a1KdCuJblWimSSaqUQzSTRTiWaSaKYSzSTRTCWaSaKZSnQ"
"nie5UojtJdKcS3UmiO5XoThLdqUR3kuhOJbqXRPcq0b0kuleJ7iXRvUp0L4nuVaJ7SXSvEj1IogeV6EESPahED5LoQSV6kEQPKtGDJHpQieaSa"
"K4SzSXRXCWaS6K5SjSXRHOVaC6J5irRoyR6VIkeJdGjSvQoiR5VokdJ9KgSPUqiR5Uok0SZSpRJokwlyiRRphJlkihTiTJJlLWJRu-"
"ZqDZUY9YYqjFvDNVYNIZqLBuDjbI_Gqn90Uj2RyO1PxrJ_mik9kcj2R-N1P5oJPujkdofjWR_NFL7o5Hsj0ZqfzSS_"
"dFI7Y9Gsj8aqf3RSPZHI7U_"
"Gsmbk5F6czKSNycj9eZkJG9ORurNyUjenIzUm5ORvDkZqTcnI9mIjdRGbCQbsZHaiI1kIzZSG7GRbMRGaiM2ko3YSG3ERrIRG6mN2Eg2YiO1ER"
"vJRmykNmIj2YiN1EZsJBuxkdqIjeSb6kh9Ux3JN9WR-qY6km-qI_VNdSTfVEfqm-"
"pIvqmO1DfV0VASDVWioSQaqkRDSTRUiYaSaKgSDSXRUCW6kEQXKtGFJLpQiS4k0YVKdCGJLlSiC0l00Sbak8fEnnpM7MljYk89JvbkMbGnHhN7"
"8pjYU4-JPXlM7KnHxJ48JvbUY2JPHhN76jGxJ4-"
"JPfWY2JPHxJ56TOzJY2JPPSb2niXRs0r0LImeVaJnSfSsEj1LomeV6FkSPbeJ9r8yUW2oxqwxVGPeGKqxaAzVWDYGG_"
"ck0Z5KtCeJ9lSiPUm0pxLtSaI9lWhPEu2pRPuSaF8l2pdE-yrRviTaV4n2JdG-"
"SrQvifbbRJHc6yJ1r4vkXhepe10k97pI3esiuddF6l4Xyb0uUve6SO51kbrXRXKvi9S9LpJ7XaTudZHc6yJ1r4vkXhepe10k97pI3esiuddF6l"
"4Xyb0uUve6SO51kbrXRXKvi9S9LpI3J5F6cxLJm5NIvTmJ5M1JpN6cRPLmJFJvTiJ5cxKpNyeRvDmJ1JuTSN6cROrNSSRvTiL15iSSNyeRenMS"
"yZuTSL05ieTNSaTenETy5iRSb04ieXMSqTcnkbw5idSbk0jenETqzUkkb04i9eYkkjcnkXpzEsmbk0i9OYnkzUmk3pxE8uYkUm9OInkeRep5FM"
"nzKFLPo0ieR5F6HkXyPIrU8yiS51GknkfjX0xUG6oxawzVmDeGaiwaQzWWjcFGeUyM1WNiLI-"
"JsXpMjOUxMVaPibE8JsbqMTGWx8RYPSbG8pgYq8fEWB4TY_"
"WYGMtjYqweE2N5TIzVY2Isj4mxekyMZTcxVruJsewmxmo3MZbdxFjtJsaymxir3cRYdhNjtZs4esdEtaEas8ZQjXljqMaiMVRj2RhslAv2SF2w"
"R3LBHqkL9kgu2CN1wR7JBXukLtgjuWCP1AUbS6JYJYolUawSxZIoVoliSRSrRLEkinUiuY5idR3Fch3F6jqK5TqK1XUUy3UUq-"
"solusoVtdRfCiJDlWiQ0l0qBIdSqJDlehQEh2qRIeS6FAliiRRpBJFkihSiSJJFKlEkSSKVKJIEkUq0VgSjVWisSQaq0RjSTRWicaSaKwSjSXR"
"WCU6kkRHKtGRJDpSiY4k0ZFKdCSJjlSiI0l0pBIdS6JjlehYEh2rRMeS6FglOpZExyrRsSQ6VolOJNGJSnQiiU5UohNJdKISnUiiE5XoRBKdqE"
"TfJNE3leibJPqmEn2TRN9Uom-S6JtK9E0SfVOJTiXRqUp0KolOVaJTSXSqEp1KolOV6FQSnapE8oI9Vi_YY3nBHqsX7LG8YI_VC_"
"ZYXrDH6gV7LC_YY_WCPZ5KoqlKNJVEU5VoKommKtFUEk1VoqkkmqpE8gYyVm8gY3kDGas3kLG8gYzVG8hY3kDG6g1kLG8gY_"
"UGMpY3kLF6AxnLG8hYvYGM5Q1krN5AxvIGMlZvIGN5AxmrN5CxvIGM1RvIWN5AxuoNZCxvIGP1BjKWN5CxegMZyxvIWL2BjOU7Q6y-"
"M8TynSFW3xli-c4Qq-8MsXxniNV3hli-"
"M8TqO0Ms3xli9Z0hlu8MsfrOEMt3hlh9Z4jlO0OsvjPE8p0hVt8ZYvnOEKvvDLF8Z4jVd4ZYvjPE6jtDLN8ZYvWdIZbvDLH6zhDLG8hYvYGM5Q"
"1krN5AxvIGMlZvIGN5AxmrN5CxvIGM1RvIWN5AxuoNZCxvIGP1BjKWN5CxegMZyxvIWL2BjOUNZKzeQMZPkuhJJXqSRE8q0ZMkelKJniTRk0r0"
"JImeVKJcEuUqUS6JcpUol0S5SpRLolwlyiVRrhIVkqhQiQpJVKhEhSQqVKJCEhUqUSGJijbRb1kMv9Vi-C2L4bdaDL9lMfxWi-"
"G3LIbfajH8lsXwWy2GiVxHE3UdTeQ6mqjraCLX0URdRxO5jibqOprIdTRR19FErqOJuo4mch1N1HU0ketooq6jiVxHE3UdTeQ6mqjraCLLe6KW"
"90SW90Qt74ks74la3hNZ3hO1vCeyvCdqeU9keU_U8p7I8p6o5T2R5T1Ry3siy3uilvdElvdELe_"
"JiyR6UYleJNGLSvQiiV5UohdJ9KISvUiilzZRIrvyRO3KE9mVJ2pXnsiuPFG78kR25YnalSeyK0_"
"UrjyRXXmiduWJ7MoTtStPZFeeqF15IrvyRO3KE9mVJ2pXnshuIlG7iUR2E4naTSSym0jUbiKR3USidhOJ7CYStZtI5C1xot4SJ_"
"KWOFFviRN5S5yot8SJvCVO1FviRN4SJ-"
"otcTKSRCOVaCSJRirRSBKNVKKRJBqpRCNJNFKJdiTRjkq0I4l2VKIdSbSjEu1Ioh2VaEcS7ahEu5JoVyXalUS7KtGuJNpViXYl0a5KtCuJdlUi"
"eaeaqHeqibxTTdQ71UTeqSbqnWoi71QT9U41kXeqiXqnmsg71US9U03knWqi3qkm8k41Ue9UE3mnmqh3qom8U03UO9XkQBIdqEQHkuhAJTqQRA"
"cq0YEkOlCJDiTRgUokm-VEbZYT2SwnarOcyGY5UZvlRDbLidosJ7JZTtRmOZHNcqI2y4lslhO1WU5ks5yozXIim-"
"VEbZYT2SwnarOcyGY5UZvlRDbLidosJ7JZTtRmOZHNcqI2y4lslhO1WU5ks5yozXIim-"
"VEbZYT2SwnarOcyGY5UZvlRDbLidosJ7JZTtRmOZHNcqI2y4lslhO1WU5ks5yozXIim-"
"VEbZYT2SwnarOcyGY5UZvlRDbLidosJ7JZTtRmOZHNcqI2y6n8Dpuq32FT-R02Vb_DpvI7bKp-h03ld9hU_Q6byu-wqfodNpU_"
"w07Vn2Gn8mfYqfoz7FT-DDtVf4adyp9hp-rPsFP5M-xU_Rl2Kj-CpOpHkFR-BEnVjyCp_AiSqh9BUvkRJFU_"
"gqTyI0iqfgRJp5JoqhJNJdFUJZpKoqlKNJVEU5VoKommKpFsllO1WU5ls5yqzXIqm-"
"VUbZZT2SynarOcymY5VZvlVDbLqdosp7JZTtVmOZXNcqo2y6lsllO1WU5ls5yqzXIqm-"
"VUbZZT2SynarOcymY5VZvlVDbLqdosp7JZTtVmOZXNcqo2y6lsllO1WU5ls5yqzXIqm-VUbZZT2SynarOcypf8VH3JT-VLfqq-5KfyJT9VX_"
"JT-ZKfqi_5qXzJT9WX_FS-5KfqS34qX_JT9SU_lS_5qfqSn8qX_FR9yU_lS36qvuSnsj9K1f4olf1RqvZHqeyPUrU_SmV_"
"lKr9USr7o1Ttj1LZTaRqN5HKbiJVu4lUdhOp2k2ksptI1W4ild1Eqv9c5-wf7zb_cRL_rX_J_-R73fJ3f1fjguGj9eUDevWpmH_"
"xf5le7KBrgcdCx0TbQZePkSyOsSDUwogLznvx6S__FJ0fZsFnWvzRln_Czg-6_PN2fuxzn-Z8YfzzpR_7vOtjn_vzOe86kQUf-7zrY58v_"
"djniz92dUWaq4bXqu5pL5RXO7vCZl0juzu7wuZdI7s7u8IWXSO7O7vCll0juzuXhG3uOB2T82afHrmWzdibfXrkWjaNb_"
"bpkWvZ3L7Zp0euZRP-Zp8g11-"
"n8cmSWQi6OgfmHV2dA4uOrs6BZUeXGpgtvWVlXbeshZ1dYbOukd2dXWHzrpHdnV1hi66R3Z1dYcuukd2dS8IuvB0FAd7s0yPXshl7s0-"
"PXMum8c0-PXItm9s3-_TItWzC3-wT5LIX-0tHV-"
"fAvKOrc2DR0dU5sOzoUgPzpbesvOuWtbCzK2zWNbK7syts3jWyu7MrbNE1sruzK2zZNbK7c0nYhbejIMCbfXrkWjZjb_"
"bpkWvZNL7Zp0euZXP7Zp8euZZN-"
"Jt9glxLblkLujoHZh1dnQOLjq7OgWVHlxpYLL1lFV23rIWdXWGzrpHdnV1h866R3Z1dYYuukd2dXWHLrpHdnUvCLrwdBQHe7NMj17IZe7NPj1z"
"LpvHNPj1yLZvbN_v0yLVswt_sE-Racsta0NU5MOvo6hyYd3R1Diw7utTAcuktq-"
"y6ZS3s7AqbdY3s7uwKm3eN7O7sClt0jezu7Apbdo3s7lwSduHtKAjwZp8euZbN2Jt9euRaNo1v9umRa9ncvtmnR65lE_"
"5mnyDXklvWgq7OgVlHV-fAvKOrc2DR0cWB5-aSUi3t1bKwcdHw80WeixsXDDe_aQUDevV1xFx0Er36VMy_-CNI8GvMgp9hFv_-"
"on94CX5xWfBTy-LfWBb8uLL4VxW2Ljjvxae__FN0fpgFn2nxR1v-CTs_6PLPu-Rj_7XsxyTV4x_"
"ASzu7wmZdI7s7u8LmXSO7O7vCFl0juzu7wpZdI7s7l4U975qV1zu7wi6dldc7u8IunZXXO7vCLp2V1zu7wi6dldc7l4R134cWBHizT49cy2bsz"
"T49ci2bxjf79Mi1bG7f7NMj17IJf7PPK7m6Ltw3-_TI9dq89_bpkeu1ee_t0yPXa_Pe26dHrtfmvbdPkGvB1-IlXZ0D846uzoFFR1fnwLKja-"
"lAt9KCrs6BSz7jotVie5d8xkVTb3uXfMZwHhf__q16Fn_L6vr9e2HYrGtkd2dX2LxrZHdnV9iia2R3Z1fYsmtkd-eysOdds_"
"J6Z1fYpbPyemdX2KWz8npnV9ils_J6Z1fYpbPyeueSsAu_Qb32Jwuv-fTItWzG3uzTI9eyaXyzT49cy-b2zT49ci2b8Df7vJKr68J9s0-PXK_"
"Ne2-fHrlem_fePj1yvTbvvX165Hpt3nv7BLkWvLVc0tU5MO_"
"o6hxYdHR1Diw7upYOdKs66OocuOQzLlotS75lLejqHLjkM4bzuPhPdlTP4m9ZXX-"
"yszBs1jWyu7MrbN41sruzK2zRNbK7syts2TWyu3NZ2POuWXm9syvs0ll5vbMr7NJZeb2zK-"
"zSWXm9syvs0ll5vXNJ2IXfoF77K6vXfHrkWjZjb_bpkWvZNL7Zp0euZXP7Zp8euZZN-Jt9XsnVdeG-"
"2adHrtfmvbdPj1yvzXtvnx65Xpv33j49cr027719glxLvmUt_wu8xb1ZR1fnwKKjq3Ng2dG1dKBb1cu_"
"ZfneJZ9x0cpc8i1rQVfnwCWfMZzHxX9lqHoWf8vq-"
"ivDhWGzrpHdnV1h866R3Z1dYYuukd2dXWHLrpHdncvCnnfNyuudXWGXzsrrnV1hl87K651dYZfOyuudXWGXzsrrnUvCLvwG9dofhr7m0yPXshl"
"7s0-PXMum8c0-PXItm9s3-_TItWzC3-zzSq6uC_fNPj1yvTbvvX165Hpt3nv79Mj12rz39umR67V57-"
"0T5FryLWv5Hw0v7s06ujoH5h1dnQPLjq6lA92qXv4ty_cu-YyLVuaSl2ALujoHLvmM4TyW-"
"rFiprEMnhyvd3aFzbpGdnd2hc27RnZ3doUtukZ2d3aFLbtGdncuC3veNSuvd3aFXTorr3d2hV06K693doVdOiuvd3aFXTorr3cuCbvwG1QQ4M0"
"-PXItm7E3-_TItWwa3-zTI9eyuX2zT49cyyb8zT6v5Oq6cN_s0yPXa_Pe26dHrtfmvbdPj1yvzXtvnx65Xpv33j5BriXfshZ0dQ7MOro6B-"
"YdXZ0Di46upQPdql7-Lcv3LvmMi1bmkm9ZC7o6By75jGrNJEPdkwwXNInjXwv_6M_-l25fFi6c_j49cuU94vTy6ZGr6BGnl0-"
"PXGWPOL18luTqnIQenV1hl9W7R2dX2GWl7dHZFXZZFXt0BmH_Ot1aCdm5NBcS7x3LujoHZh1dnQPzjq7OgUVHV-fAsqNLDVzwpy22RIv_bKW_"
"T49ceY84vXx65Cp6xOnl0yNX2SNOL58luTonoUdnV9hl9e7R2RV2WWl7dHaFXVbFHp1BWH0vEXYuC-"
"8lC7o6B2YdXZ0D846uzoFFR1fnwLKjSw1c8AOuLdHiH2f7-_"
"TIlfWI08unR66iR5xePj1ylT3i9PJZkqtzEnp0doVdVu8enV1hl5W2R2dX2GVV7NEZhNX3EmHnsvBesqCrc2DW0dU5MO_"
"o6hxYdHR1Diw7utTABT9T2BIt_gmiv0-PXFmPOL18euTKe8Tp5dMjV9kjTi-"
"fJbk6J6FHZ1fYZfXu0dkVdllpe3R2hV1WxR6dQVh9LxF2LgvvJQu6OgdmHV2dA_OOrs6BRUdX58Cyo0sNXPAyzpZo8Yu2_"
"j49cmU94vTy6ZEr7xGnl0-"
"PXEWPOL18luTqnIQenV1hl9W7R2dX2GWl7dHZFXZZFXt0BmH1vUTYuSy8lyzo6hyYdXR1Dsw7ujoHFh1dnQPLjq56YP0_sILm9n_"
"2JGxb7JovalvsWixqW-xaLmpTrlnb_LKobbFrvqhtsWuxqG2xa7moTbnmC841X3yu-"
"YIpyBdPQb7gXPPF55ovONd88bkWC861WHyuxYJzLRafa7FgCorFU1AsONdi8bmWC861XHyu5YJzLRefa7ngXMvF51oumILSTUH9v4Qy3lOm6dh"
"Xpu44_"
"qRM1fHX6UahbdO1OdO27cq0bbq2drRtu2Jt264zbZuu7VTbtutK26Zr9KJt25Vp23TtJtq2XZfaNl3jd9q2XSNtm67JH23brkzbtivXtnTx5iY"
"ro0XnsB9g6MCV0mLg0KwYxc6FK0exd8lCdi5cSYq9SxyydzkL2blwhSn2LlchO5fRS8jeJQvZuXAFKvYulyE7F65Ixd5lFLJz4QpV7F2ykL1LH"
"rJyyeyqzdyqzeyqzdyqzeyqzdyqzYJVK-"
"xc2lUr7F2ykJ1Lu2qFvUscsnc5C9m5tKtW2Ltchexc2lUr7F2ykJ1Lu2qFvctlyM6lXbXC3mUUsnNpV62wd8lC9i55yMolt6s2d6s2t6s2d6s2"
"t6s2d6s2D1atsHNpV62wd8lCdi7tqhX2LnHI3uUsZOfSrlph73IVsnNpV62wd8lCdi7tqhX2LpchO5d21Qp7l1HIzqVdtcLeJQvZu-"
"QhK5fCrtrCrdrCrtrCrdrCrtrCrdoiWLXCzqVdtcLeJQvZubSrVti7xCF7l7OQnUu7aoW9y1XIzqVdtcLeJQvZubSrVti7XIbsXNpVK-"
"xdRiE7l3bVCnuXLGTvkoesXEq7aku3aku7aku3aku7aku3astg1Qo7l3bVCnuXLGTn0q5aYe8Sh-"
"xdzkJ2Lu2qFfYuVyE7l3bVCnuXLGTn0q5aYe9yGbJzaVetsHcZhexc2lUr7F2ykL1LHjJdztsVe25W63m7Us_NKj1vV-"
"i5WZ3namWKbbrqFSm27cq0bbrqFSi27Yq1bbvOtG266pUmtu260rbpqleW2LYr07bp2k20bbsutW266pUjtu0aadt01StFbNuVadt25dqWrr_"
"MHl2hc9gPMHTgSmkxcGhWjGLnwpWj2LtkITsXriTF3iUO2buchexcuMIUe5erkJ3L6CVk75KF7Fy4AhV7l8uQnQtXpGLvMgrZuXCFKvYuWcjeJ"
"Q9Zuag9ukLnsB9g6NCuWrtHlxa9aoM9etvUrtpgj66aspCdS7tqgz26aopD9i5nITuXdtUGe3TVdBWyc2lXbbBHV01ZyM6lXbXBHl01XYbsXNp"
"VG-zRVdMoZOfSrtpgj66aspC9Sx6yclF7dIXOYT_"
"A0KFdtXaPLi161QZ79LapXbXBHl01ZSE7l3bVBnt01RSH7F3OQnYu7aoN9uiq6Spk59Ku2mCPrpqykJ1Lu2qDPbpqugzZubSrNtijq6ZRyM6lX"
"bXBHl01ZSF7lzxk5aL26Aqdw36AoUO7au0eXVr0qg326G1Tu2qDPbpqykJ2Lu2qDfboqikO2buchexc2lUb7NFV01XIzqVdtcEeXTVlITuXdtU"
"Ge3TVdBmyc2lXbbBHV02jkJ1Lu2qDPbpqykL2LnnIykXt0RU6h_0AQ4d21do9urToVRvs0dumdtUGe3TVlIXsXNpVG-"
"zRVVMcsnc5C9m5tKs22KOrpquQnUu7aoM9umrKQnYu7aoN9uiq6TJk59Ku2mCPrppGITuXdtUGe3TVlIXsXfKQaxf8fw3WK1ZM07GvTN2BFSqm"
"6uDKbGzThRXZ2LYr07bpwgpsbNsVa9t2nWnbdGGlNbbtutK26Rq9aNt2Zdo2XVhJjW27LrVturByGtt2jbRturBSGtt2Zdq2Xbm2pesvvUfX6B"
"z2AwwduFJaDByaFaPYuXDlKPYuWcjOhStJsXeJQ_"
"YuZyE7F64wxd7lKmTnMnoJ2btkITsXrkDF3uUyZOfCFanYu4xCdi5coYq9Sxayd8lDVi7tHl2jc9gPMHRoV63ZozctetXaPbpqalet3aPrpixk"
"59KuWrtH101xyN7lLGTn0q5au0fXTVchO5d21do9um7KQnYu7aq1e3TddBmyc2lXrd2j66ZRyM6lXbV2j66bspC9Sx6ycmn36Bqdw36AoUO7as"
"0evWnRq9bu0VVTu2rtHl03ZSE7l3bV2j26bopD9i5nITuXdtXaPbpuugrZubSr1u7RdVMWsnNpV63do-"
"umy5CdS7tq7R5dN41Cdi7tqrV7dN2Uhexd8pCVS7tH1-gc9gMMHdpVa_"
"boTYtetXaPrpraVWv36LopC9m5tKvW7tF1UxyydzkL2bm0q9bu0XXTVcjOpV21do-um7KQnUu7au0eXTddhuxc2lVr9-"
"i6aRSyc2lXrd2j66YsZO-"
"Sh6xc2j26RuewH2Do0K5as0dvWvSqtXt01dSuWrtH101ZyM6lXbV2j66b4pC9y1nIzqVdtXaPrpuuQnYu7aq1e3TdlIXsXNpVa_"
"fouukyZOfSrlq7R9dNo5CdS7tq7R5dN2Uhe5c85MrlH0dPf3HvFL2zFHYPLLXdmRmdhaMzMzoLR-dmdB6Ozs3oPBxdmNFFOLowo4twdGlGl-"
"Ho0owuzeh25P_i_"
"7mpHdgOkp5BPRnbHzioNU3HQJnSoSbHonMYBKgcMhshcxEyGyFzEXIbIXcRchshdxEKG6FwEQoboXARShuhdBFKG6E0EVba0Stm5Eo7asWOsLV"
"X6BwGASqHzEbIXITMRshchNxGyF2E3EbIXYTCRihchMJGKFyE0kYoXYTSRrC1_9KO_"
"mJGfmlHfbEjbO0VOodBgMohsxEyFyGzETIXIbcRchchtxFyF6GwEQoXobARChehtBFKF6G0EWzt120lFTqHQYDKIbMRMhchsxEyFyG3EXIXIbc"
"RchehsBEKF6GwEQoXobQRShehtBGCSqrR5p7f9A1Mn4zbsDOg0DkMAlQOmY2QuQiZjZC5CLmNkLsIuY2QuwiFjVC4CIWNULgIpY1QugiljWBnY"
"EONDmdgQw0MZmB43YwT03QMlCkdZs40OodBgMohsxEyFyGzETIXIbcRchchtxFyF6GwEQoXobARChehtBFKF6G0EcycDf-0o_-YkX_aUX_"
"MiGk7YmpGTNsRUzvCztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdbUztbUzdZNO_"
"rGjLxpR93YEbb2N672N7b2N672N7b2N672N7b2N672N7b2N672N7b2N672N7b2N672N7b2N672N7b2N672N7b2N672s3b0zIyctaNmdoSt_"
"czVfmZrP3O1n9naz1ztZ7b2M1f7ma39zNV-Zms_c7Wf2drPXO1ntvYzV_uZrf3M1X5maz9ztZ-3o-dm5LwdNbcjbO3nrvZzW_u5q_3c1n7uaj-"
"3tZ-72s9t7eeu9nNb-7mr_dzWfu5qP7e1n7vaz23t5672c1v7eVj70ftmtJimY6BM6TC11-"
"gcBgEqh8xGyFyEzEbIXITcRshdhNxGyF2EwkYoXITCRihchNJGKF2E0kawtR-0owdm5KAdNbAjbO0HrvYDW_uBq_3A1n7gaj-wtR-"
"42g9s7Qeu9gNb-4Gr_"
"cDWfuBqP7C1H7jaD2ztB672A1v7gav9ajt61YxcbUet2hG29quu9qu29quu9qu29quu9qu29quu9qu29quu9qu29quu9qu29quu9qu29quu9qu"
"29quu9qu29quu9mvt6DUzcq0dtWZH2Nqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvudqv2dqvhbXfu"
"zeV1OgcBgEqh8xGyFyEzEbIXITcRshdhNxGyF2EwkYoXITCRihchNJGKF2E0kYIKqlGB_"
"th9g1MH8dFH5txYpqOgTKlw8yZRucwCFA5ZDZC5iJkNkLmIuQ2Qu4i5DZC7iIUNkLhIhQ2QuEilDZC6SKUNoKZs6i960fmrh-1d_"
"1o1Y6wtXd3_cje9SN314_sXT9yd_3I3vUjd9eP7F0_cnf9yN71I3fXj-xdP3J3_cje9SN314_sXT9yd_3I3vUjd9eP2rt-"
"ZO76UXvXj9bsCFt7d9eP7F0_cnf9yN71I3fXj-xdP3J3_cje9SN314_sXT9yd_3I3vUjd9eP7F0_cnf9yN71I3fXj-xdP3J3_"
"ah9eyqm6RgoUzps7d2b68i-uY7cm-vIvrmO3JvryL65jtyb68i-uY7cm-vIvrmO3JvryL65jtyb68i-uY7cm-"
"vIvrmO3JvryL65jtyb62izHb1pRm62ozbtCFv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7TVf7TVv7"
"TVf7rXb0lhm51Y7asiNs7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bdc7bds7bfC2o9_"
"NaPFNB0DZUqHqb1G5zAIUDlkNkLmImQ2QuYi5DZC7iLkNkLuIhQ2QuEiFDZC4SKUNkLpIpQ2gq39XTv6zoy8a0fd2RG29neu9ne29neu9ne29n"
"eu9ne29neu9ne29neu9ne29neu9ne29neu9ne29neu9ne29neu9ne29neu9u2-"
"QEzTMVCmdNjauz2ZahkEqBwyGyFzETIbIXMRchshdxFyGyF3EQoboXARChuhcBFKG6F0EUobwdb-oR39YEY-tKMe7Ahb-wdX-wdb-wdX-wdb-"
"wdX-wdb-wdX-wdb-wdX-wdb-wdX-wdb-wdX-wdb-wdX-wdb-wdX-wdb-"
"4ew9vGkGS2m6RgoUzpM7TU6h0GAyiGzETIXIbMRMhchtxFyFyG3EXIXobARChehsBEKF6G0EUoXobQRbO3be05s7jlxe8-J7-"
"0IW3t3z4ntPSd295zY3nNid8-J7T0ndvec2N5zYnfPie09J3b3nNjec2J3z4ntPSd295zY3nNid8-J7T0ndvecuP31Kja_XsXtr1fx3I6wtXe_"
"XqmWQYDKIbMRMhchsxEyFyG3EXIXIbcRchehsBEKF6GwEQoXobQRShehtBFs7R_b0Y9m5GM76tGOsLV_dLV_tLV_dLV_tLV_dLV_tLV_dLV_"
"tLV_dLV_tLV_dLV_tLV_dLV_tLV_dLV_tLV_dLV_tLV_dLV_akc_mZFP7agnO8LW_snV_snW_snV_snW_snV_snW_snV_snW_snV_snW_snV_"
"snW_snV_snW_snV_snW_snV_snW_snVXtXAfn712e3nVp_"
"Zfl71We3nzO1s5W62cjtbuZut3M5W7mYrt7OVu9nK7WzlbrZyO1u5m63czlbuZiu3s5W72crtbOVutnI7W7mbLZXf5lZ5bc7C1r5wtS9s7QtX-"
"8LWvnC1L2ztC1f7wta-cLUvbO0LV_vC1r5wtS9s7QtX-8LWvnC1L2zti7D2k_YJMTFPiEn7hJg82hGm9hP3hJjYJ8TEPSEm9gkxcU-"
"IiX1CTNwTYmKfEBP3hJjYJ8TEPSEm9gkxcU-IiX1CTNwTYmKfEBP3hJjYJ8TEPSEm7RNiYp4Qk_YJMXmyI2zt3RNiYp8QE_"
"eEmNgnxMQ9ISb2CTFxT4iJfUJM3BNiYp8QE_eEmNgnxMQ9ISb2CTFxT4iJfUJM3BNiYp8QE_"
"eESNq3zmKajoEypcPUXqNzGASoHDIbIXMRMhshcxFyGyF3EXIbIXcRChuhcBEKG6FwEUoboXQRShvB1r596yym6RgoUzps7d1bZ9UyCFA5ZDZC"
"5iJkNkLmIuQ2Qu4i5DZC7iIUNkLhIhQ2QuEilDZC6SKUNoKt_"
"XY72vwkTxooUzps7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7bdt7bdd7Xfb0btm5G47ateOsLX"
"fdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXftbXfdbXfb0fvm5H77ah9O8LWft_Vft_Wft_Vft_"
"Wft_Vft_Wft_Vft_Wft_Vft_Wft_Vft_Wft_Vft_Wft_Vft_Wft_Vft_Wft_V_qAdfWBGHrSjDuwIW_sDV_sDW_sDV_sDW_sDV_sDW_sDV_"
"sDW_sDV_sDW_sDV_sDW_sDV_sDW_sDV_sDW_sDV_sDW_sDV_"
"vDdvShGXnYjjq0I2ztD13tD23tD13tD23tD13tD23tD13tD23tD13tD23tD13tD23tD13tD23tD13tD23tD13tD23tD13to3Z0ZEZG7ajIjrC1"
"j1ztI1v7yNU-srWPXO0jW_vI1T6ytY9c7SNb-8jVPrK1j1ztI1v7yNU-srWPXO0jW_vI1X7cjh6bkeN21NiOsLUfu9qPbe3HrvZjW_uxq_"
"3Y1n7saj-2tR-72o9t7ceu9mNb-7Gr_djWfuxqP7a1H7vaj23tx672R-3oIzPyqB11ZEfY2h-52h_Z2h-52h_Z2h-52h_Z2h-52h_Z2h-52h_"
"Z2h-52h_Z2h-52h_Z2h-52h_Z2h-52h_Z2h-52h-3o4_NyON21LEdYWt_7Gp_bGt_7Gp_bGt_7Gp_bGt_7Gp_bGt_7Gp_bGt_7Gp_bGt_7Gp_"
"bGt_7Gp_bGt_7Gp_bGt_7Gp_0o4-MSNP2lEndoSt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_Ymt_Ymr_"
"Ymt_Ymr_bd29Dcz8ls76psZcdqOODUjTtsRp3qE_A9uTrVtu260bbtutW27ZtqWLs50k0-xd7kJ2bvchuxdZiErlyw4l8yfSxacS-"
"bPJQvOJfPnkgXnkvlzyYNzyf255MG55P5c8uBccn8ueXAuuT-XIjiXwp9LEZxL4c-lCM6l8OdSBOdS-HMpg3Mp_bmUwbmU_"
"lzK4FxKfy5lcC6lPZdzdR7n9hzOVf5zm_tc5T23Oc9VvvMgV3CdaPYuNyF7l9uQvcssZOWSBeeS-XPJgnPJ_Llkwblk_"
"lyy4Fwyfy55cC65P5c8OJfcn0senEvuzyUPziX351IE51L4cymCcyn8uRTBuRT-XIrgXAp_LmVwLqU_lzI4l9KfSxmcS-nPpQzOxV4n8h-"
"enmrbdt1o23bdatt2zbQtXfY6MexdbkL2Lrche5dZyMolC84l8-eSBeeS-XPJgnPJ_Llkwblk_"
"lzy4Fxyfy55cC65P5c8OJfcn0senEvuz6UIzqXw51IE51L4cymCcyn8uRTBuRT-XMrgXEp_LmVwLqU_lzI4l9KfSxmci75O_nESg3Z_V-b_"
"4v9Z0JP2PH_SfSHVabfx36oYJzDrzr9J9f11uvFJdS5AOuPPxA-_K7Pu-PqpossjZbJjr_50z9pm16QdMzFj8KX_ZEWZvM28R4AD_G9MvJeTO-"
"B_vvLwGjg60za77mtMtc2uh_oTpto2d5itFW1XXf8_vFUDyA");
"eJyNndlS40q3rV-lIvbduTp983b0UGAMNriRTVONsDCmcUNnUBOxH6X2A5wVcV7gSENjYM20pPov9JGfcqY0czotyaZY609j8O1PY_B_30_"
"SH8NsQ_NknG158y7b8uYk2_LmfbblzWm25c1FtqHZi7Itb8bZhmb_PNvyZifb0PQOsi1vfs-"
"2vHmYbXnzKNvyZiPb8uZxtuXNZrblTWx58zTb8mYr2_"
"JmO9vy5lm25c0k29AcnGVb3vyZbXnzLtvy5iTb8maUbXkzzjY0hzvZljd3sy1vNrMtb55nW968y7a8Oc-"
"2vLnItrz5km158yPb8maUbWhe7GZb3jzMtrx5lG158zbb0LxsZFvebGZb3jzLtrx5nm15s5NtebOXbWhedbItb3azLW_"
"2si1vTrMtbybZhub9MNvy5kW2oflwmm15s5NtWfOf640dIJftHLnsNQFKC6C0AcoZQDkHKB2A0gUoPYDSBygeQBkAuRxsApQBQHkCKHOAsgAoz"
"wDlBaC8ApR3gLIEKB9ALt9PAUoLyKWxAVA2AcoWQNkGKDsAZReg7AGUfYByAFC-"
"A5RDgHIEUBoA5RigNAFKDsopQGkBlDZAOQMo5wClA1C6AKUHUPoAxQMoA4AyBCgXAOUSoFwBlGuA8gOgPACUR4DyBFCmAGUGUOYAZQFQngHKC0"
"B5AyjvAGUJUD4AyidACQFKBFBigJIAuRxvAJRNgLIFULYByg5A2QUoewBlH6AcAJTvAOUQoBwBlAZAOQYoTYCSg3IKUFoApQ1QzgDKOUDpAJQu"
"QOkBlD5A8QDKAKAMAcoFQLkEKFcA5Rqg_"
"AAoPwHKL4DyG6D4AOUGoIwASgBQbgHKGKDcAZQJQLkHKA8A5RGgPAGUKUCZAZQ5QFkAlGeA8gJQXgHKG0B5ByhLgPIBUD4BSghQYoCSALk0NwD"
"KJkDZAijbAGUHoOwClD2Asg9QDgDKd4ByCFCOAEoDoBwDlCZAyUE5BSgtgNIGKGcA5QdA-"
"QlQfgGU3wDFByg3AGUEUAKAcgtQxgDlDqBMAMo9QHkAKI8A5QmgTAHKDKDMAcoCoDwDlBeA8gpQ3gDKO0BZApQPgPIJUEKAEgGUGKAkQC4nGwB"
"lE6BsAZRtgLIDUHYByh5A2QcoBwDlO0A5BCg5KKcApQVQ2gDlDKD8ACg_"
"AcovgPIboPgA5QagjABKAFBuAcoYoNwBlAlAuQcoDwDlEaA8AZQpQHkGKO8AZQlQPgDKJ0AJAUoEUGKAkgC5nG4AlE2AsgVQtgHKDkDZBSh7AG"
"UfoBwAlO8A5RCgHAGUBkA5BihNgJKDcgpQWgClDVDOAMo5QOkAlC5A6QGUPkDxAMoAoAwBygVAuQQoVwDlGqD8ACg_"
"AcovgPIboPgA5QagjABKAFBuAcoYoNwBlAlAuQcoDwDlEaA8AZQpQJkBlDlAWQCUZ4DyAlBeAcobQHkHKEuA8gFQPgFKCFAigBIDubQ2AMoWQN"
"kGKDsAZReg7AGUfYByAFC-A5RDgHIEUBoA5RigNAFKDsopQGkBlDZAOQMo5wClA1C6AKUHUPoAxQMoA4AyBCgXAOUSoFwBlGuA8gOg_"
"AQovwDKb4DiA5QbgDICKAFAuQUoY4ByB1AmAOUeoDwAlEeA8gRQpgBlBlDmAGUBUJ4BygtAeQUobwDlHaAsAcoHQPkEKCFAiQBKDFASIJf2BkD"
"ZBChbAGUboOwAlF2AsgdQ9gHKAUD5DlAOAcoRQGkAlGOA0gQoOSinAKUFUNoA5QygnAOUDkDpApQeQOkDFA-gDADKEKBcAJRLgHIFUK4Byg-"
"A8hOg_"
"AIovwGKD1BuAMoIoAQA5RagjAHKHUCZAJR7gPIAUB4ByhNAmQKUGUCZA5QFQHkGKC8A5RWgvAGUd4CyBCgfAOUToIQAJQIoMUBJgFzONgDKJkD"
"ZAijbAGUHoOwClD2Asg9QDgDKd4ByCFCOAEoDoBwDlCZAyUE5BSgtgNIGKGcA5RygdABKF6D0AEofoHgAZQBQhgDlAqBcApQrgHINUH4AlJ8A5"
"RdA-Q1QfIByA1BGACUAKLcAZQxQ7gDKBKDcA5QHgPIIUJ4AyhSgzADKHKAsAMozQHkBKK8A5Q2gvAOUJUD5ACifACUEKAmQy_"
"kGQNkEKFsAZRug7ACUXYCyB1D2AcoBQPkOUA4ByhFAaQCUY4DSBCg5KKcApQVQ2gDlDKCcA5QOQOkClB5A6QMUD6AMAMoQoFwAlEuAcgVQrgHK"
"D4DyE6D8Aii_"
"AYoPUG4AygigBADlFqCMAcodQJkAlHuA8gBQHgHKE0CZApQZQJkDlAVAeQYoLwDlFaC8AZR3gLIEKB8A5ROghAAlAnLpHAGUBkA5BihNgHIKUF"
"oApQ1QzgDKOUDpAJQuQOkBlD5A8QDKAKAMAcoFQLkEKFcA5Rqg_"
"AAoPwHKL4DyG6D4AOUGoIwASgBQPoBcuh2A0gUoPpBL7xOghAAlAigxQEmAXPobAGUToGwBlG2AsgNQdgHKHkDZBygHAOU7QDkEKEcApQFQjgF"
"KE6DkoJwClBZAaQOUM4ByDlA6AKULUHoApQ9QPIAyAChDgHIBUC4ByhVAuQYoPwDKT4DyC6D8Big-"
"QLkBKCOAEgCUW4AyBih3AGUCUO4BygNAeQQoTwBlClBmAGUOUBYA5RmgvACUV4DyBlDeAcoSoHwAlE-"
"AEgKUCKDEACUBcvE2AMomQNkCKNsAZQeg7AKUPYCyD1AOAMp3gHIIUI4ASgOgHAOUJkDJkctgA6BsApQtgLINUHYAyi5A2QMo-"
"wDlAKB8ByiHAOUIoDQAyjFAaQKUHJRTgNICKG2AcgZQzgFKB6B0AUoPoPQBigdQBgBlCFAuAMolQLkCKNcA5QdA-"
"QlQfgGU3wDFByg3AGUEUAKAcgtQxgDlDqBMAMo9QHkAKI8A5QmgTAHKDKDMAcoCoDwDlBeA8gpQ3gDKO0BZApQPgPIJUEKAEgGUGKAkQC7DDYC"
"yCVC2AMo2QNkBKLsApQFQTgFKC6C0AUoHoHQBSg-gXACUS4ByBVCuAcoEoNwDlGeA8gJQXgHKG0B5ByhLgPIBUD4BSgjkcv0DoPwEKL8Aym-"
"A4gOUG4AyAigBQLkFKGOAcgdQJgBlCuTiNwDKMUBpApQclFOA0gIobYByBlDOAUoHoHQBSg-g9AGKB1AGAGUIUC4AyiVAuQIo1wDlB0D5CVB-"
"AZTfAMUHKDcAZQRQAoByC1DGAOUOoEwAyj1AeQAojwDlCaBMAcoMoMwBygKgPAOUF4DyClDeAMo7QFkClA-"
"AEgKUCKDEACUBcrnZACibAGULoGwDlB2AsgtQ9gHKAUD5DlAOAcoRQGkAlGOA0gQoOSinAKUFUNoA5QygnAOUDkDpApQeQOkDFA-"
"gDADKEKBcAJRLgHIFUK4Byg-A8hOg_"
"AIovwGKD1BuAMoIoAQA5RagjAHKHUCZAJR7gPIAUB4ByhNAmQKUGUCZA5QFQHkGKC8A5RWgvAGUd4CyBCgfAOUToIQAJQIoMUBJgFxGGwBlE6B"
"sAZRtgLIDUHYByh5A2QcoBwDlO0A5BChHAKUBUI4BShOg5KCcApQWQGkDlDOAcg5QOgClC1B6AKUPUDyAMgAoQ4ByAVAuAcoVQLkGKD8Ayk-"
"A8gug_"
"AYoPkC5ASgjgBIAlFuAMgYodwBlAlDuAcoDQHkEKE8AZQpQZgBlDlAWAOUZoLwAlFeA8gZQ3gHKEqB8AJRPgBIClAigxAAlAXIJNgDKJkDZAij"
"bAGUHoOwClD2Asg9QDgDKd4ByCFCOAEoDoBwDlCZAyUE5BSgtgNIGKGcA5RygdABKF6D0AEofoHgAZQBQhgDlAqBcApQrgHINUH4AlJ8A5RdA-"
"Q1QfIByA1BGACUAKLcAZQxQ7gDKBKDcA5QHgPIIUJ4AyhSgzADKHKAsAMozQHkBKK8A5Q2gvAOUJUD5ACifACUEKBFAiQFKAuQyngKUGUCZA5Q"
"FQHkGKC8A5RWgvAGUd4CyBCgfAOUToIRALncbAGUToGwBlG2AsgNQdgHKHkDZBygHAOUUoLQAShugnAGUc4DSAShdgNIDKH2A4gGUAUAZApQLg"
"HIJUK4AyjVA-"
"QFQfgKUXwDlN0DxAcoNQBkBlACg3AKUMUC5AygTgHIPUB4AyiNAeQIoU4AyAyhzgLIAKM8A5QWgvAKUN4DyDlCWAOUDoHwClBCgRAAlAXKZbAC"
"UTYCyBVC2AcoOQNkFKE2AkoNyClBaAKUNUM4AyjlA6QCULkDpAZQ-QPEAygCgDAHKD4DyE6D8Aii_"
"AYoPUG4AygigBADlFqBMAcoMoMwBygKgPAOUF4DyClDeAMo7kMm_j7_9--O3Pxvhtz-b37_92fmVbstvf_"
"bO062Tbt1066VbP928dBun2923P43bb39Osr-rfUi3dPzJU7rN0m2ebu_plh7j5OPbn7Otb3-6aXx3km6v3_70NtLtM93S8_XTdn8z3dKY_"
"na67aRbM91a6Zaer3-Zbj_SLc2p_zvdRumWHqufnq-fnq-fnqefnqefnsdLj-Wlx_Gu0y0d46Xx3k26pWO8NFcvPaeX_"
"RlsO93SuQ3SuQ3SuQ3SuQ3SeQ2G6XaRbunYQZBu03RL5zM8SLfsj1rTnIZn6ZbOf5j2DbO-53R7S7c0j2Gax0V6_os0_iKt40Uj3Y7TLfsj1_"
"ScF-k5L9LzXaRzuviZbot0S8dfpnO-3E-3NN9L_9ufq7TPT_f7L9_-3O-m21667X_7j41pukXf_uOwl27ZCt7NlsputkR2sxvpbvb-"
"PcjenQf4a7lswTay5djIlmEjW36NbNk1suXWyK5-jeyq18iudo3sKtfAXwzhjyiy91Eze_"
"80sxM1s7dIM3trNLNreDO7dp9kj5Qn2aPkSfYIeZK9w0-yN-ZJ9oY8yQ5wkh3gJHvjnWRHOcmOcpId5SS7R5xk94aT7HgnOF62oE-"
"ytXuCf7KcTaaFf9SVJdTJHm072SNtJ7vQdrKZd7IRnWzpd7JhnSz7Tja2ky3tTnY57Ga30G42rJul283S7WbpdrPLTjerSzerRjcrYjd7f3Xxu"
"-WsiL3s0tbLLmm97LLUyy5Hvewy1Muy72XZ97Lse1mde9k1oJcdqpfl18tS6-Hb3ey8w-yUw6xCw-"
"ytN8yuK8Ns2DC7jgyzscPshRpmCQ2zV2aYTXC4-PZvf7Z_f_u39E2a_fxPAOU_A5T_AlD-K0D5bwDlvwOU_wFQ_idA-V8A5X8DlP8DUP653h-"
"l260aYzXu1Jioca_"
"GoxozNeZqPKvxqsabGu9qLNX4UCNUI1IjWzj7QSZqBGqM1bhTY6LGvRoPajyq8aTGTI25Ggs1ntV4VeNNjXc1lmp8qhGqEauB5G-V_"
"K3Ke6vkb5XzrXK-Vc63yjlrTNWYqTFXY6HGsxovaryp8aHGpxqhGpEasRrIeayqjpXYWKUbK5-"
"x0hjr7GMNv9OU7zTlOx3wTge800zvlOqdynun8t4p-YmqMVEaE6UxURoTpTHRAe-Vxr2Wzb0qf6987vUS3CuxeyV2r5Peq_L3Ote9Kn-"
"vgt9rtdwXz_6uxlKNDzVCNVD5B03nQad40CkedMAHHedBx3lUeR81r0fN61E5P-"
"qAjzrgowr1qJwfdYpH5fyocz3pgE86zpOGP2nuU8VMVcOpajhVDacaPlUa0-"
"LwNzVCNWI1sKJmeilneilnmvtMp5iphjMdcKbpzDSdmUqXNT7VwLnmOsVcR56rqnNNcK7VMtdM55rpXGefq_JzTXmuKc9VurnmPtdLMFfOc-"
"U8V85z5TxXznMVKmtEanzNAhVbaDoLTWehWSw0i4VmsVANF0p-"
"oVQXSnWhDBfKZ6FzPWumLzrpi871onO96FwvqtiLKvaik74Uj7NQ402NdzWWaoRqYO6vOvubzv6mWbxp-"
"JuSf9Pwd43KGoEat2qM1bhT416NBzUe1XhSY6rGTI25Ggs1ntV4U-"
"NdjaUan2pEasRqoPJLJb9UzkvlvFTll8p5qZyXSnWpVJdKdalUl0p1qVSXSnWpDJfKcKliLpXYhxL70Nk_dOQPHflDU_7QvD40_"
"FPDPzWvT70Enzrgpyr_qQN-6sUNNfdQp4g001jHiTWLROdKlGHC6Zw8_78fm0G6_Uq3m3R7pCdu5yLdfqfbc1nnW7rdMyjJPgXhj1rznyF_"
"RvwZ82eSfQLJ4_Az5M-IP2P-TLL_"
"CE8eh58hf0b8GfNnFnfEuCPGHTHuiHFHjGswrsG4BuMajGsw7phxx4w7Ztwx4475h7jNXf4VLxqhGpEasRqo3Jb-5HdLf-67pT_13dKf-"
"W4peFvB2wreVvC2grcVvKPgHQXvKHhHwTsK3lfwvoL3Fbyv4H0FHyr4UMGHCj5U8KGCjxR8pOAjBR8p-"
"EjBDQU3FNxQcEPBDQa3VLqWStdS6VoqXUula6l0LZWupdK1VLqWStfaU_"
"CegvcUvKfgPQWrdC2VrqXStVS6lkrXOlDwgYIPFHyg4AMFf1fwdwV_V_"
"B3BX9XsF6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6Ull6U1teLcqzgYwUfK_"
"hYwXqntJoKbiq4qeCmgpsKPlHwiYJPFHyi4BMFnyr4VMGnCj5V8KmCRwoeKXik4JGCRwoOFBwoOFBwoOBAwbcKvlXwrYJvFXyr4LGCxwoeK3is"
"4LGCJwqeKHii4ImCJwq-V_C9gu8VfK_gewU_"
"KPhBwQ8KflDwg4IfFfyo4EcFPyr4UcFTBU8VPFXwVMFTBc8UPFPwTMEzBc8UPFfwXMFzBc8VPFfwQsELBS8UvFDwQsHPCn5W8LOCnxX8rOAXBb"
"8o-EXBLwp-UfCrgl8V_KrgVwW_KvhNwW8KflPwm4LfFPyu4HcFvyv4XcHvCg4VHCo4VHCo4JDB7U0GoxGqEakRq4FgXZ_buj63dX1u6_"
"rc1vW5retzW9fntq7PbV2f27o-t3WHbesO29Ydtq07bFt32LYu5m1dzNu6mLd1MW_rYt7Wxbyti3lbF_"
"O2LuZtXczbuiK1dUVq64rU1hWprStSu6XgloJbCm4puKXgOwXfKfhOwXcKvmNwR0u0oyXa0RLtaIl2tEQ7WqIdLdGOlmhHS7SjJdr5UPCHgj8U"
"_KHgDwZ3TxmMRqhGpEasBoI7Cu4ouKPgjoI7Cu4quKvgroK7Cu4y2NPa8LQ2PK0NT2vD09rwtDY8rQ1Pa8PT2vC0NjytDU9rw9Pa8LQ2PK0NT3"
"dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT3dYT-"
"vZ03r2tJ49rWdP63nwm8FohGpEasRqIFhLdKAlOtASHWiJDrREB1qiAy3RgZboQEt0oCU60FV0oKvoQFfRga6iA11FhxsMRiNUI1IjVgPBelGG"
"elGGelGGelGGelF8BfsK9hXsK9j_CladfdXZV5191dlXnf2-gvsK7iu4r-C-gj0Fewr2FOwp2FPwQMEDBQ8UPFDwQMFDBQ8VPFTwUMFDBV8o-"
"ELBFwq-UPCFgi8VfKngSwVfKvhSwVcKvlLwlYKvFHyl4GsFXyv4WsHXCr5WsB4CfT0E-noI9PUQ6Osh0J8qeKrgqYKnCp4qWE8yvp5kfD3J-"
"HqS8fUk4-"
"tJxteTjK8nGV9PMr6eZHw9yfh6kvH1JOPrScbXk4yv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96Cv96CvJxlfTzK-"
"nmR8Pcn4epLx9STj60nG15OMrycZX08y_"
"lLBSwUvFbxU8FLBkYIjBUcKjhQcKThWcKzgWMGxgmMG32iCN5rgjSZ4owneaIIj1XmkOo9U55HqPFKdR6rzSHUeqc4j1XmkOo9UupFKN1LpRir"
"dSKUbqXQjlW6k0o1UupFKN_pU8KeCPxX8qeBPBge6WwW6WwW6WwW6WwW6WwW6WwW6WwW6WwW6WwW6WwW6iga6iga6iga6iga6igZ6-"
"gr09BXo6SvQ01egp6-greC2gtsKbiu4reAzBZ8p-EzBZwo-U_"
"C5gs8VfK7gcwWfK1jPSIGekQI9IwV6Rgr0jBToGSnQM1KgZ6RAz0iBnpGCnoJ7Cu4puKfgnoJ1Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0"
"Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0Awp0A5roc8pEn1Mm-"
"pwy0eeUiT6nTPQV3ERfwU30FdxEX8FN9BXcRA-"
"uEz24TvTgOtGD60QPrpOpgqcKnip4quCpgnUDmugGNNENaKIb0EQ3oIluQBPdgCa6AU10A5roBjTRDWiiG9BEN6CJbkAT3YAmugFNdAOa6AY00"
"Q1oohvQRBfGiS6ME10YJ7owTnRhnOjCONGFcaIL40QXxokujBNdnye6Pk90fZ7o-jzR9Xmiq-hEV9GJrqITXUUnXx-lb_9sHP-59FP-o_-"
"wWL4n-0cHazuxp31UHb3W9w__Q2Zqr-8Kiu2S7vWokuNWH77kLNUnqz7neD14XHnOceX4knOOS86ZvYLmhfmn8J3cp_"
"sClXSuesK6YW7nqieqG-"
"Z2rnriumFu56onqRvmdtqFVlOZupi1gKo61cWsBVRVrS5mLaCqhnUxawFVFa2MyT6xVMzUdkXVXXF119e5wsp1Hdat67VhYd0wt7Mk-"
"7JhbmfJzMqGuZ3Vsy5f18VhpWvWGV0XU71maw5SWq7SNVtzkNLila7ZmoOUlrJ0zdYcxMTYZfhZ3RVVd8XVXV_"
"niirXdVS3rteGhXXD3M6S7MuGuZ0lMysb5nZWz7p8XReHla5ZZ3RdTPWarTlIablK12zNQUqLV7pmaw5SWsrSNVtzEBNTsa7Xu8Lqrri66-"
"tcceW6juvW9dqwsG6Y21lS_bJhbmfJzMqGuZ3Vsy5f18VhpWvWGV0XU71maw5SWq7SNVtzkNLila7ZmoOUlrJ0zdYcxMRUrOv1rrC6K6ru-"
"jpXUrmuk7p1vTYsrBvmdpakWDbM7Sypd9kwt7N61uXrujisdM06o-tiqtdszUFKy1W6ZmsOUlq80jVbc5DSUpau2ZqDmJiKdb3eFVZ3RdVd-b-"
"0MK97YY_9MG_CxmVhYzfMfK4fV0y5alDZKdb6_uGn4pJP1cWP0yWfo0s-"
"QHNXyXGrD19yluqTlZ3zn6oP7YWe9YtK6bCwbpjb6ayPqmFup7t2Koa5nc7yrhrmdrJsdSUp61z1VJakrHPVU1mSss5VT2VJyjpXPZUlKessv4"
"aWjK6LKb-G_uUgpeVau4b-5SClxVu7hv7lIKWlXLuG_uUgtYWtW3J1MWsBfyts5TosBvytsJWrshjwt8JWrtFiwN8KuxZTcpcq74qqu-"
"LqropzrVXVdlWca60CtuvrXOVfRhV6yq_"
"X5V9GVQ1zO0sqVfllVOmwuG6Y21lS4covo9aGjetKUtZZ8qKVDSsvybiuJGWdJS922bDykpQthPLrde33cyWj62Kqr8V_-36u7iBVVauLqb4W_"
"-37ubqDVFW0Lqb6WlxxkMqVV3otrjlIbWHrlmNdTPW1uOYgtYWtW6qVMSUfOMq7ouquuLqr4lxrL03F9Xq9q-JcZl7lX7IWesqv1-"
"VfslYNcztLKlX5JWvpsLhumNtZUuHKL1nXho3rSlLWWfJWKBtWXpJxXUnKOkte7LJh5SUpWwjl1-va751LRtfFVF-L__"
"a9c91BqqpWF1N9Lf7b9851B6mqaF1M9bW44iCVK6_0WlxzkNrC1i3Hupjqa3HNQWoLW7dUK2MqrtcVX-"
"iXd8XVXRXnWntpKh6917sqzmXmVf7Lg0JP-fW6_JcHVcPczpK3UOUvD0qHxXXD3M6SClf-"
"8mBt2LiuJGWdJa9M2bDykozrSlLWWfJilw0rL0nZQii_Xtf-PqVkdF1M9bX4b79PqTtIVdXqYqqvxX_"
"7fUrdQaoqWhdTfS2uOEjlyiu9FtccpLawdcuxLqb6WlxzkNrC1i3VypiK63XFL6rKu6Lqropzrb00Fdfr9a6Kc5l5lf9SrNBTfr0u_"
"6VY1TC3s6Qclb8UKx0W1w1zO0sqXPlLsbVh47qSlHWWvDJlw8pLMq4rSVlnyXIvG1ZekrKFUH69rvqdWFVl6mKqr8U1ByktV-"
"m1uOYgpcUrvRbXHKS0lKXX4pqD1Ba2bsnVxVRfi2sOUlvYuuVYF1N9La45SG1h65ZqZUzF9Xq9K6zuiqq74vKutZem4nq93lVxLhUnaBV38z8R"
"_U_p9_32D0jKv-8vjVkLiP6Fg7gxawHxv3AQN2YtIPkXDuLG_L0Y1VWonX71vGsnXD3T2imud_5z3dyx_rUsuPwqusLqrqi6K67u-"
"kqr5GtM5w-aql83N6Z6idUcxI2pXmI1B3FjqpdYzUFKa1JbjOoq1E6_et61E66eae0U1zuLy9B8ibs-"
"n4pluN4VVXfF1V1faZV8O2OTKf92pjSm-nJZcxA3pnqJ1RzEjaleYjUHKa1JbTGqq1A7_ep51064eqa1U1zvLC5D893U-"
"nwqluF6V1TdFVd3faVV8qHTJlP-obM0pnqJ1RzEjam-XNYcxI2pXmI1BymtSW0xqqtQO_3qeddOuHqmtVNc7ywuQ_ORe30-"
"FctwvSuq7oqru77SKnmWtsmUP0uXxlQvsZqDuDHVS6zmIG5M9eWy5iBuzN-"
"LUV2F2ulXz7t2wtUzrZ3iemdxGZpPEuvzqViG611RdVdc3bX6u17sW_2xrrMvKtkXl-"
"z7Ol642vdZsi8q2ReX7Ps6XlRyvKgk56jkeFHJ8eKS48Ulx4tLco5LjpeUHC8pOV5ScrzE5pz__S7-X7Rsdr-aFwdq_"
"nPdiFft40WhHa7azbNC2y-0C38MfDIptB9W7fZnoV045nnhb2jP71dt_O-E1W6v2vifXKldOM7I_tUlJ_ylXaOc-Ndqazh_"
"18gCrNz5a0kWYuW-"
"47fWWZSVP1hvfzrunO88cPzeOou18rZ1Fm3lzvFXxQtt8UJbvNAWL3SKFzrFC53ihU7xQqd4oVO80Cle6BQvdIoXOsULneKFTvFCp3ihU7zQKV"
"7oFC90ihfZ4kW2eJEtXuQUL3KKFznFi5ziRU7xIqd4kVO8yCle5BQvcooXOcWLnOJFTvEip3iRU7zIKV7kFC-"
"2xYtt8WJbvNgpXuwUL3aKFzvFi53ixU7xYqd4sVO82Cle7BQvdooXO8WLneLFTvFip3ixU7zYKV5ii5fY4iW2eIlTvMQpXuIUL3GKlzjFS5ziJ"
"U7xEqd4iVO8xCle4hQvcYqXOMVLnOIlTvESp3hJoXjjVeHGq6KNVwUbF4o1LhRqXCjSuFCgcaE440JhxoWijAsFGReKMS4UYlwowrhQgHFh8uP"
"CxMeFSY8LEx4XJ2vvjivtGuXEnbvjylkA5-64chbCuTsW_NY6i-LcHVfe_nTcOd954Pi9dRbLuTuunEVz7o4Ft__-"
"c1W80BYvtMULneKFTvFCp3ihU7zQKV7oFC90ihc6xQud4oVO8UKneKFTvNApXugUL3SKFzrFC53iRbZ4kS1eZIsXOcWLnOJFTvEip3iRU7zIKV"
"7kFC9yihc5xYuc4kVO8SKneJFTvMgpXuQUL3KKFznFi23xYlu82BYvdooXO8WLneLFTvFip3ixU7zYKV7sFC92ihc7xYud4sVO8WKneLFTvNgp"
"XuwUL3aKl9jiJbZ4iS1e4hQvcYqXOMVLnOIlTvESp3iJU7zEKV7iFC9xipc4xUuc4iVO8RKneIlTvMQpXuHuiN9A5oVjs_"
"vVRMH4K8pG4deVKJTa4aqNAqntF9q3qzaKovbDqt3-LLQLx0QR1L5ftTF5tdurNiatduE4I_ubPU7Y3B1Xyonbu2PBWQB7dyw4C2HvjkW_"
"tc6i2LtjwdvOb__azvlYJHt3LDiLZe-"
"OBWfR7N2x6Pb3UavihbZ4oS1e6BQvdIoXOsULneKFTvFCp3ihU7zQKV7oFC90ihc6xQud4oVO8UKneKFTvNApXugUL7LFi2zxIlu8yCle5BQvc"
"ooXOcWLnOJFTvEip3iRU7zIKV7kFC9yihc5xYuc4kVO8SKneJFTvMgpXmyLF9vixbZ4sVO82Cle7BQvdooXO8WLneLFTvFip3ixU7zYKV7sFC9"
"2ihc7xYud4sVO8WKneLFTvMQWL7HFS2zxEqd4iVO8xCle4hQvcYqXOMVLnOIlTvESp3iJU7zEKV7iFC9xipc4xUuc4iVO8b7ujvxfA2XVyf43q"
"QXb0v8uyPSFpi8yfZHpi01fbPoS05es-lb7818UUFYB2p39jzhPthnx1cz3FiZk9Ks3tL2h7Y1sb2R7Y9sb297E9iar3p1Vz05hr811x-"
"a6Y3Pdsbnu2Fx3bK47Ntcdm-"
"uOzXXH5nq46jks7LW5HtpcD22uhzbXQ5vroc310OZ6aHM9tLke2lyPbFZHNqsjm9WRzerIZnVkszqyWR3ZrI5sVkdOVoWe1Ur-"
"6tgyHbCGnUfDzqNh59Gw82jYeTTsPBp2Hg07j4adR8POo1HoMfNoFGKK82g9fsWwme81syvoV29oe0PbG9neyPbGtje2vYntXc2u9bTqeVrtna"
"72Tgt77QymdgZTO4OpncHUzmBqZzC1M5jaGUztDKZ2BrNVz6yw1-Y6s7nObK4zm-vM5jqzuc5srjOb68zmOrO5LlY9i8Jem-"
"vC5rqwuS5srgub68LmurC5LmyuC5vrwub6tup5K-y1ub7ZXN9srm821zeb65vN9c3m-"
"mZzfbO5vplc25tfPWzme02uBf3qDW1vaHsj2xvZ3tj2xrY3sb2FXLdWPVuFvTbXLZvrls11y-a6ZXPdsrlu2Vy3bK5bNtctm-"
"veqmevsNfmumdz3bO57tlc92yuezbXPZvrns11z-a6Z3PdX_XsF_baXPdtrvs2132b677Ndd_mum9z3be57ttc902u-f8l6au3oF-"
"9oe0NbW9keyPbG9ve2PYmtreYVaGneKdjx5bpyMzb_"
"YphM99rZlfQr97Q9oa2N7K9ke2NbW9sexPbu5qdt1rL3l5hr83VrmXPrmXPrmXPrmXPrmXPrmXPrmXPrmXPrmVvtZa9_"
"cJem6tdy55dy55dy55dy55dy55dy55dy55dy55dy97qOc87Kuy1udpnUs8-"
"k3r2mdSzz6SefSb17DOpZ59JPftM6tlnUu941XNc2GtzPba5Httcj22uxzbXY5vrsc312OZ6bHM9trk2Vz3Nwl6ba9Pm2rS5Nm2uTZtr0-"
"batLk2ba5Nm2vT5Dr4_dXDZr7X5FrQr97Q9oa2N7K9ke2NbW9sexPbW8j1edXzXNhrc322uT7bXJ9trs8212eb67PN9dnm-"
"mxzfba5rq7Ig5fCXpurvXsM7N1jYO8eA3v3GNi7x8DePQb27jGwd4-BvXsMXlc9r4W9NtdXm-urzfXV5vpqc321ub7aXF9trq8211eTqz_"
"66mEz32tyLehXb2h7Q9sb2d7I9sa2N7a9ie0t5LpaA_5LYa_N1a4B364B364B364B364B364B364B364B364Bf_"
"WZwX8r7LW52s8Mvv3M4NvPDL79zODbzwy-_czg288Mvv3M4NvPDP77que9sNfm-"
"m5zfbe5vttc322u7zbXd5vru8313eb6bnNdrnqWhb0216XNdWlzXdpclzbXpc11aXNd2lyXNtelzbVwzsL5CucqnCeyM4jsDCI7g8jOILIziOw"
"MIjuDyM4gsjOI7AwK4wpjYptrbHONba6xzTW2ucY219jmGttcY5trbHIdrVbx6L2w1-Q6sqt4ZFfxyK7ikV3FI7uKR3YVj-"
"wqHtlVPLKreLRaxaNlYa_N1a7ikV3FI7uKR3YVj-wqHtlVPLKreGRX8ciu4mD1pBgcF_aaXAP7pBjYJ8XAPikG9kkxsE-"
"KgX1SDOyTYmCfFAP7pBisnhSDZmGvzdU-KQb2STGwT4qBfVIM7JNiYJ8UA_ukGNgnxcA-"
"KQarT5XBSWGvzfXE5npicz2xuZ7YXE9sric21xOb64nN9cTmer7qOS_stbme21zPba7nNtdzm-"
"u5zfXc5npucz23uZ7bXLurnm5hr821a3Pt2ly7NteuzbVrc-3aXLs2167NtWtz7a16eoW9NteezbVnc-3ZXHs2157NtWdz7dlcezbXns21v-"
"rpF_baXPs2177NtW9z7dtc-zbXvs21b3Pt21z7Nldv1eMV9tpcPZurZ3P1bK6ezdWzuXo2V8_"
"m6tlcPZvrYNUzKOy1uQ5srgOb68DmOrC5DmyuA5vrwOY6sLkObK7DVc-wsNfmOrS5Dm2uQ5vr0OY6tLkOba5Dm-"
"vQ5jq0uV6sei4Ke22uFzbXC5vrhc31wuZ6YXO9sLle2FwvbK4XNtfLVc9lYa_"
"N9dLmemlzvbS5XtpcL22ulzbXS5vrpc310uZ6teq5Wu29Xu29_tqrP2OaFtqzQnteaDt_ncQxK585Pnfc-QOd1fjQGR8640NnfOSMj5zxkTM-"
"csbHzvjYGR8742NnfOKMT5zxiTM-KYwfF8aOC-"
"PGhTHjYrxT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77FT77Gtt_6p5bTQnhXa80Lb-"
"ReUHGPrXfS5484_IlyND53xoTM-dMZHzvjIGR854yNnfOyMj53xsTM-dsYnzvjEGZ8447_qrT8lPr_5Vvjb4dzQHC-LHamlo_"
"HL5UGAJn9hQ0NQ46DQI8WXof0fafP0IGveD7NmJ8_jI2uPVrtxRb7M_li5tYmIHv5V9KYOCe0_ot1G-yVvZ_8crP-an7bwb4SbO9_-"
"P2ob96k");
static string all_emojis_str = gzdecode(base64url_decode(packed_emojis).ok()).as_slice().str();
constexpr size_t EMOJI_COUNT = 7539;
constexpr size_t EMOJI_COUNT = 5064;
#else
string all_emojis_str;
constexpr size_t EMOJI_COUNT = 0;
@ -302,10 +212,20 @@ bool is_emoji(Slice str) {
CHECK(all_emojis.size() == EMOJI_COUNT);
return all_emojis;
}();
if (str.size() > MAX_EMOJI_LENGTH) {
auto len = str.size();
if (len > MAX_EMOJI_LENGTH + 3) {
return false;
}
return emojis.count(str) != 0;
if (emojis.count(str) != 0) {
return true;
}
if (len <= 3 || str[len - 3] != '\xEF' || str[len - 2] != '\xB8' || str[len - 1] != '\x8F') {
return false;
}
if (len >= 6 && str[len - 6] == '\xEF' && str[len - 5] == '\xB8' && str[len - 4] == '\x8F') {
return false;
}
return emojis.count(str.substr(0, len - 3)) != 0;
}
int get_fitzpatrick_modifier(Slice emoji) {

View File

@ -11,7 +11,7 @@
TEST(Emoji, is_emoji) {
ASSERT_TRUE(!td::is_emoji(""));
ASSERT_TRUE(td::is_emoji("πŸ‘©πŸΌβ€β€β€πŸ’‹β€πŸ‘©πŸ»"));
ASSERT_TRUE(!td::is_emoji("πŸ‘©πŸΌβ€β€β€πŸ’‹β€πŸ‘©πŸ»οΈ"));
ASSERT_TRUE(td::is_emoji("πŸ‘©πŸΌβ€β€β€πŸ’‹β€πŸ‘©πŸ»οΈ")); // invalid, but used in the wild
ASSERT_TRUE(td::is_emoji("πŸ‘©πŸΌβ€β€οΈβ€πŸ’‹β€πŸ‘©πŸ»"));
ASSERT_TRUE(td::is_emoji("πŸ‘©πŸΌβ€β€οΈβ€πŸ’‹β€πŸ‘©πŸ»οΈ"));
ASSERT_TRUE(!td::is_emoji("πŸ‘©πŸΌβ€β€οΈοΈβ€πŸ’‹β€πŸ‘©πŸ»"));
@ -35,9 +35,13 @@ TEST(Emoji, is_emoji) {
ASSERT_TRUE(td::is_emoji("Β©"));
ASSERT_TRUE(!td::is_emoji("©️️"));
ASSERT_TRUE(td::is_emoji("πŸ•΅οΈβ€β™‚οΈ"));
ASSERT_TRUE(!td::is_emoji("πŸ•΅β€β™‚οΈ"));
ASSERT_TRUE(!td::is_emoji("πŸ•΅οΈβ€β™‚"));
ASSERT_TRUE(td::is_emoji("πŸ•΅β€β™‚οΈ")); // invalid, but used in the wild
ASSERT_TRUE(td::is_emoji("πŸ•΅οΈβ€β™‚")); // invalid, but used in the wild
ASSERT_TRUE(td::is_emoji("πŸ•΅β€β™‚"));
ASSERT_TRUE(td::is_emoji("πŸŒοΈβ€β™‚οΈ"));
ASSERT_TRUE(td::is_emoji("πŸ‹οΈβ€β™‚οΈ"));
ASSERT_TRUE(td::is_emoji("πŸŒβ€β™‚οΈ")); // invalid, but used in the wild
ASSERT_TRUE(td::is_emoji("πŸ‹β€β™‚οΈ")); // invalid, but used in the wild
}
static void test_get_fitzpatrick_modifier(td::string emoji, int result) {