From 8ac48c555c027f76978c5339b19be48f48518aa5 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 13 Jun 2018 13:34:56 +0200 Subject: [PATCH 001/530] Add ipv6 data center addresses --- pyrogram/session/internals/data_center.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/pyrogram/session/internals/data_center.py b/pyrogram/session/internals/data_center.py index 232ca13b..154cd9e0 100644 --- a/pyrogram/session/internals/data_center.py +++ b/pyrogram/session/internals/data_center.py @@ -34,5 +34,24 @@ class DataCenter: 121: "95.213.217.195" } - def __new__(cls, dc_id: int, test_mode: bool): - return (cls.TEST[dc_id], 80) if test_mode else (cls.PROD[dc_id], 443) + TEST_IPV6 = { + 1: "2001:0b28:f23d:f001:0000:0000:0000:000e", + 2: "2001:067c:04e8:f002:0000:0000:0000:000e", + 3: "2001:0b28:f23d:f003:0000:0000:0000:000e", + 121: "2a03:b0c0:0003:00d0:0000:0000:0114:d001" + } + + PROD_IPV6 = { + 1: "2001:0b28:f23d:f001:0000:0000:0000:000a", + 2: "2001:067c:04e8:f002:0000:0000:0000:000a", + 3: "2001:0b28:f23d:f003:0000:0000:0000:000a", + 4: "2001:067c:04e8:f004:0000:0000:0000:000a", + 5: "2001:0b28:f23f:f005:0000:0000:0000:000a", + 121: "2a03:b0c0:0003:00d0:0000:0000:0114:d001" + } + + def __new__(cls, dc_id: int, test_mode: bool, ipv6: bool): + if ipv6: + return (cls.TEST_IPV6[dc_id], 80) if test_mode else (cls.PROD_IPV6[dc_id], 443) + else: + return (cls.TEST[dc_id], 80) if test_mode else (cls.PROD[dc_id], 443) From efe26bcb196f4fe6a9a6c4db385d48eba47c6593 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 13 Jun 2018 13:35:41 +0200 Subject: [PATCH 002/530] Allow Connection to connect to ipv6 addresses --- pyrogram/connection/connection.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pyrogram/connection/connection.py b/pyrogram/connection/connection.py index a53295ce..043f7cb7 100644 --- a/pyrogram/connection/connection.py +++ b/pyrogram/connection/connection.py @@ -21,6 +21,7 @@ import threading import time from .transport import * +from ..session.internals import DataCenter log = logging.getLogger(__name__) @@ -36,16 +37,18 @@ class Connection: 4: TCPIntermediateO } - def __init__(self, address: tuple, proxy: dict, mode: int = 1): - self.address = address + def __init__(self, dc_id: int, test_mode: bool, ipv6: bool, proxy: dict, mode: int = 1): + self.ipv6 = ipv6 self.proxy = proxy + self.address = DataCenter(dc_id, test_mode, ipv6) self.mode = self.MODES.get(mode, TCPAbridged) + self.lock = threading.Lock() self.connection = None def connect(self): for i in range(Connection.MAX_RETRIES): - self.connection = self.mode(self.proxy) + self.connection = self.mode(self.ipv6, self.proxy) try: log.info("Connecting...") From 56748ff39075b41c427987127f975a9d672ee999 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 13 Jun 2018 13:36:26 +0200 Subject: [PATCH 003/530] Make the underlying TCP protocol accept ipv6 addresses --- pyrogram/connection/transport/tcp/tcp.py | 5 +++-- pyrogram/connection/transport/tcp/tcp_abridged.py | 4 ++-- pyrogram/connection/transport/tcp/tcp_abridged_o.py | 5 +++-- pyrogram/connection/transport/tcp/tcp_full.py | 5 +++-- pyrogram/connection/transport/tcp/tcp_intermediate.py | 4 ++-- pyrogram/connection/transport/tcp/tcp_intermediate_o.py | 5 +++-- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/pyrogram/connection/transport/tcp/tcp.py b/pyrogram/connection/transport/tcp/tcp.py index 5df8aacb..8560604f 100644 --- a/pyrogram/connection/transport/tcp/tcp.py +++ b/pyrogram/connection/transport/tcp/tcp.py @@ -33,8 +33,9 @@ log = logging.getLogger(__name__) class TCP(socks.socksocket): - def __init__(self, proxy: dict): - super().__init__() + def __init__(self, ipv6: bool, proxy: dict): + super().__init__(family=socket.AF_INET6 if ipv6 else socket.AF_INET) + self.settimeout(10) self.proxy_enabled = proxy.get("enabled", False) diff --git a/pyrogram/connection/transport/tcp/tcp_abridged.py b/pyrogram/connection/transport/tcp/tcp_abridged.py index 472f4799..d89421f5 100644 --- a/pyrogram/connection/transport/tcp/tcp_abridged.py +++ b/pyrogram/connection/transport/tcp/tcp_abridged.py @@ -24,8 +24,8 @@ log = logging.getLogger(__name__) class TCPAbridged(TCP): - def __init__(self, proxy: dict): - super().__init__(proxy) + def __init__(self, ipv6: bool, proxy: dict): + super().__init__(ipv6, proxy) def connect(self, address: tuple): super().connect(address) diff --git a/pyrogram/connection/transport/tcp/tcp_abridged_o.py b/pyrogram/connection/transport/tcp/tcp_abridged_o.py index bba88e34..57cc0336 100644 --- a/pyrogram/connection/transport/tcp/tcp_abridged_o.py +++ b/pyrogram/connection/transport/tcp/tcp_abridged_o.py @@ -28,8 +28,9 @@ log = logging.getLogger(__name__) class TCPAbridgedO(TCP): RESERVED = (b"HEAD", b"POST", b"GET ", b"OPTI", b"\xee" * 4) - def __init__(self, proxy: dict): - super().__init__(proxy) + def __init__(self, ipv6: bool, proxy: dict): + super().__init__(ipv6, proxy) + self.encrypt = None self.decrypt = None diff --git a/pyrogram/connection/transport/tcp/tcp_full.py b/pyrogram/connection/transport/tcp/tcp_full.py index 1b131678..0aac1a14 100644 --- a/pyrogram/connection/transport/tcp/tcp_full.py +++ b/pyrogram/connection/transport/tcp/tcp_full.py @@ -26,8 +26,9 @@ log = logging.getLogger(__name__) class TCPFull(TCP): - def __init__(self, proxy: dict): - super().__init__(proxy) + def __init__(self, ipv6: bool, proxy: dict): + super().__init__(ipv6, proxy) + self.seq_no = None def connect(self, address: tuple): diff --git a/pyrogram/connection/transport/tcp/tcp_intermediate.py b/pyrogram/connection/transport/tcp/tcp_intermediate.py index 4b2e2596..b33fe466 100644 --- a/pyrogram/connection/transport/tcp/tcp_intermediate.py +++ b/pyrogram/connection/transport/tcp/tcp_intermediate.py @@ -25,8 +25,8 @@ log = logging.getLogger(__name__) class TCPIntermediate(TCP): - def __init__(self, proxy: dict): - super().__init__(proxy) + def __init__(self, ipv6: bool, proxy: dict): + super().__init__(ipv6, proxy) def connect(self, address: tuple): super().connect(address) diff --git a/pyrogram/connection/transport/tcp/tcp_intermediate_o.py b/pyrogram/connection/transport/tcp/tcp_intermediate_o.py index df79352a..e8c96ebc 100644 --- a/pyrogram/connection/transport/tcp/tcp_intermediate_o.py +++ b/pyrogram/connection/transport/tcp/tcp_intermediate_o.py @@ -29,8 +29,9 @@ log = logging.getLogger(__name__) class TCPIntermediateO(TCP): RESERVED = (b"HEAD", b"POST", b"GET ", b"OPTI", b"\xee" * 4) - def __init__(self, proxy: dict): - super().__init__(proxy) + def __init__(self, ipv6: bool, proxy: dict): + super().__init__(ipv6, proxy) + self.encrypt = None self.decrypt = None From c9469ed5428ed0a6495a986a9f9afd26b214001a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 13 Jun 2018 13:37:12 +0200 Subject: [PATCH 004/530] Allow auth to use ipv6 --- pyrogram/session/auth.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pyrogram/session/auth.py b/pyrogram/session/auth.py index 80956187..2142be59 100644 --- a/pyrogram/session/auth.py +++ b/pyrogram/session/auth.py @@ -26,7 +26,7 @@ from pyrogram.api import functions, types from pyrogram.api.core import Object, Long, Int from pyrogram.connection import Connection from pyrogram.crypto import AES, RSA, Prime -from .internals import MsgId, DataCenter +from .internals import MsgId log = logging.getLogger(__name__) @@ -46,9 +46,10 @@ class Auth: 16 ) - def __init__(self, dc_id: int, test_mode: bool, proxy: dict): + def __init__(self, dc_id: int, test_mode: bool, ipv6: bool, proxy: dict): self.dc_id = dc_id self.test_mode = test_mode + self.ipv6 = ipv6 self.proxy = proxy self.connection = None @@ -84,7 +85,7 @@ class Auth: # The server may close the connection at any time, causing the auth key creation to fail. # If that happens, just try again up to MAX_RETRIES times. while True: - self.connection = Connection(DataCenter(self.dc_id, self.test_mode), self.proxy) + self.connection = Connection(self.dc_id, self.test_mode, self.ipv6, self.proxy) try: log.info("Start creating a new auth key on DC{}".format(self.dc_id)) From b804709c6c6a88f7b95d3db62c2a231ec7c9591d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 13 Jun 2018 13:37:35 +0200 Subject: [PATCH 005/530] Allow session to use ipv6 --- pyrogram/session/session.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index 7e90cfff..82751f21 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -35,7 +35,7 @@ from pyrogram.api.core import Message, Object, MsgContainer, Long, FutureSalt, I from pyrogram.api.errors import Error, InternalServerError from pyrogram.connection import Connection from pyrogram.crypto import AES, KDF -from .internals import MsgId, MsgFactory, DataCenter +from .internals import MsgId, MsgFactory log = logging.getLogger(__name__) @@ -86,6 +86,7 @@ class Session: def __init__(self, dc_id: int, test_mode: bool, + ipv6: bool, proxy: dict, auth_key: bytes, api_id: int, @@ -98,6 +99,7 @@ class Session: self.dc_id = dc_id self.test_mode = test_mode + self.ipv6 = ipv6 self.proxy = proxy self.api_id = api_id self.is_cdn = is_cdn @@ -130,7 +132,7 @@ class Session: def start(self): while True: - self.connection = Connection(DataCenter(self.dc_id, self.test_mode), self.proxy) + self.connection = Connection(self.dc_id, self.test_mode, self.ipv6, self.proxy) try: self.connection.connect() From ade1c2f377902c3c2b6c1f4e406bc21a3acd7e4f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 13 Jun 2018 13:38:14 +0200 Subject: [PATCH 006/530] Accommodate ipv6 in the Client class --- pyrogram/client/client.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 73f45966..65490a55 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -129,6 +129,7 @@ class Client(Methods, BaseClient): session_name: str, api_id: int or str = None, api_hash: str = None, + ipv6: bool = False, proxy: dict = None, test_mode: bool = False, phone_number: str = None, @@ -145,6 +146,7 @@ class Client(Methods, BaseClient): self.session_name = session_name self.api_id = int(api_id) if api_id else None self.api_hash = api_hash + self.ipv6 = ipv6 # TODO: Make code consistent, use underscore for private/protected fields self._proxy = proxy self.test_mode = test_mode @@ -194,6 +196,7 @@ class Client(Methods, BaseClient): self.session = Session( self.dc_id, self.test_mode, + self.ipv6, self._proxy, self.auth_key, self.api_id, @@ -342,11 +345,12 @@ class Client(Methods, BaseClient): self.session.stop() self.dc_id = e.x - self.auth_key = Auth(self.dc_id, self.test_mode, self._proxy).create() + self.auth_key = Auth(self.dc_id, self.test_mode, self.ipv6, self._proxy).create() self.session = Session( self.dc_id, self.test_mode, + self.ipv6, self._proxy, self.auth_key, self.api_id, @@ -390,11 +394,12 @@ class Client(Methods, BaseClient): self.session.stop() self.dc_id = e.x - self.auth_key = Auth(self.dc_id, self.test_mode, self._proxy).create() + self.auth_key = Auth(self.dc_id, self.test_mode, self.ipv6, self._proxy).create() self.session = Session( self.dc_id, self.test_mode, + self.ipv6, self._proxy, self.auth_key, self.api_id, @@ -871,7 +876,7 @@ class Client(Methods, BaseClient): except FileNotFoundError: self.dc_id = 1 self.date = 0 - self.auth_key = Auth(self.dc_id, self.test_mode, self._proxy).create() + self.auth_key = Auth(self.dc_id, self.test_mode, self.ipv6, self._proxy).create() else: self.dc_id = s["dc_id"] self.test_mode = s["test_mode"] @@ -1022,7 +1027,7 @@ class Client(Methods, BaseClient): file_id = file_id or self.rnd_id() md5_sum = md5() if not is_big and not is_missing_part else None - session = Session(self.dc_id, self.test_mode, self._proxy, self.auth_key, self.api_id) + session = Session(self.dc_id, self.test_mode, self.ipv6, self._proxy, self.auth_key, self.api_id) session.start() try: @@ -1108,8 +1113,9 @@ class Client(Methods, BaseClient): session = Session( dc_id, self.test_mode, + self.ipv6, self._proxy, - Auth(dc_id, self.test_mode, self._proxy).create(), + Auth(dc_id, self.test_mode, self.ipv6, self._proxy).create(), self.api_id ) @@ -1127,6 +1133,7 @@ class Client(Methods, BaseClient): session = Session( dc_id, self.test_mode, + self.ipv6, self._proxy, self.auth_key, self.api_id @@ -1197,8 +1204,9 @@ class Client(Methods, BaseClient): cdn_session = Session( r.dc_id, self.test_mode, + self.ipv6, self._proxy, - Auth(r.dc_id, self.test_mode, self._proxy).create(), + Auth(r.dc_id, self.test_mode, self.ipv6, self._proxy).create(), self.api_id, is_cdn=True ) From d38d23f46df7fb03aeefff9938c0b80e3000a065 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 13 Jun 2018 13:39:06 +0200 Subject: [PATCH 007/530] Log in case connection fails (to test ipv6) --- pyrogram/connection/connection.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyrogram/connection/connection.py b/pyrogram/connection/connection.py index 043f7cb7..ca9bd96c 100644 --- a/pyrogram/connection/connection.py +++ b/pyrogram/connection/connection.py @@ -53,7 +53,8 @@ class Connection: try: log.info("Connecting...") self.connection.connect(self.address) - except OSError: + except OSError as e: + log.warning(e) # TODO: Remove self.connection.close() time.sleep(1) else: From 44442a842301069665c5d8af6e0b550687dfc6e8 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 29 Jun 2018 01:12:08 +0200 Subject: [PATCH 008/530] Update API scheme to Layer 82 --- compiler/api/source/main_api.tl | 44 ++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/compiler/api/source/main_api.tl b/compiler/api/source/main_api.tl index d1f2fa33..9ee01cb3 100644 --- a/compiler/api/source/main_api.tl +++ b/compiler/api/source/main_api.tl @@ -36,7 +36,7 @@ inputMediaEmpty#9664f57f = InputMedia; inputMediaUploadedPhoto#1e287d04 flags:# file:InputFile stickers:flags.0?Vector ttl_seconds:flags.1?int = InputMedia; inputMediaPhoto#b3ba0635 flags:# id:InputPhoto ttl_seconds:flags.0?int = InputMedia; inputMediaGeoPoint#f9c44144 geo_point:InputGeoPoint = InputMedia; -inputMediaContact#a6e45987 phone_number:string first_name:string last_name:string = InputMedia; +inputMediaContact#f8ab7dfb phone_number:string first_name:string last_name:string vcard:string = InputMedia; inputMediaUploadedDocument#5b38c6c1 flags:# nosound_video:flags.3?true file:InputFile thumb:flags.2?InputFile mime_type:string attributes:Vector stickers:flags.0?Vector ttl_seconds:flags.1?int = InputMedia; inputMediaDocument#23ab23d2 flags:# id:InputDocument ttl_seconds:flags.0?int = InputMedia; inputMediaVenue#c13d1c11 geo_point:InputGeoPoint title:string address:string provider:string venue_id:string venue_type:string = InputMedia; @@ -61,6 +61,7 @@ inputFileLocation#14637196 volume_id:long local_id:int secret:long = InputFileLo inputEncryptedFileLocation#f5235d55 id:long access_hash:long = InputFileLocation; inputDocumentFileLocation#430f0724 id:long access_hash:long version:int = InputFileLocation; inputSecureFileLocation#cbc7ee28 id:long access_hash:long = InputFileLocation; +inputTakeoutFileLocation#29be5899 = InputFileLocation; inputAppEvent#770656a8 time:double type:string peer:long data:string = InputAppEvent; @@ -121,7 +122,7 @@ messageService#9e19a1f6 flags:# out:flags.1?true mentioned:flags.4?true media_un messageMediaEmpty#3ded6320 = MessageMedia; messageMediaPhoto#695150d7 flags:# photo:flags.0?Photo ttl_seconds:flags.2?int = MessageMedia; messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia; -messageMediaContact#5e7d2f39 phone_number:string first_name:string last_name:string user_id:int = MessageMedia; +messageMediaContact#cbf24940 phone_number:string first_name:string last_name:string vcard:string user_id:int = MessageMedia; messageMediaUnsupported#9f84f49e = MessageMedia; messageMediaDocument#9cb070d7 flags:# document:flags.0?Document ttl_seconds:flags.2?int = MessageMedia; messageMediaWebPage#a32dd600 webpage:WebPage = MessageMedia; @@ -153,7 +154,7 @@ messageActionBotAllowed#abe9affe domain:string = MessageAction; messageActionSecureValuesSentMe#1b287353 values:Vector credentials:SecureCredentialsEncrypted = MessageAction; messageActionSecureValuesSent#d95c6154 types:Vector = MessageAction; -dialog#e4def5db flags:# pinned:flags.2?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage = Dialog; +dialog#e4def5db flags:# pinned:flags.2?true unread_mark:flags.3?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage = Dialog; photoEmpty#2331b22d id:long = Photo; photo#9288dd29 flags:# has_stickers:flags.0?true id:long access_hash:long date:int sizes:Vector = Photo; @@ -163,7 +164,7 @@ photoSize#77bfb61b type:string location:FileLocation w:int h:int size:int = Phot photoCachedSize#e9a734fa type:string location:FileLocation w:int h:int bytes:bytes = PhotoSize; geoPointEmpty#1117dd5f = GeoPoint; -geoPoint#2049d70c long:double lat:double = GeoPoint; +geoPoint#296f104 long:double lat:double access_hash:long = GeoPoint; auth.checkedPhone#811ea28e phone_registered:Bool = auth.CheckedPhone; @@ -213,6 +214,7 @@ contacts.blockedSlice#900802a1 count:int blocked:Vector users:Ve messages.dialogs#15ba6c40 dialogs:Vector messages:Vector chats:Vector users:Vector = messages.Dialogs; messages.dialogsSlice#71e094f3 count:int dialogs:Vector messages:Vector chats:Vector users:Vector = messages.Dialogs; +messages.dialogsNotModified#f0e3e596 count:int = messages.Dialogs; messages.messages#8c718e87 messages:Vector chats:Vector users:Vector = messages.Messages; messages.messagesSlice#b446ae3 count:int messages:Vector chats:Vector users:Vector = messages.Messages; @@ -309,6 +311,7 @@ updateFavedStickers#e511996d = Update; updateChannelReadMessagesContents#89893b45 channel_id:int messages:Vector = Update; updateContactsReset#7084a7be = Update; updateChannelAvailableMessages#70db6837 channel_id:int available_min_id:int = Update; +updateDialogUnreadMark#e16459c3 flags:# unread:flags.0?true peer:DialogPeer = Update; updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; @@ -335,7 +338,7 @@ upload.fileCdnRedirect#f18cda44 dc_id:int file_token:bytes encryption_key:bytes dcOption#18b7a10d flags:# ipv6:flags.0?true media_only:flags.1?true tcpo_only:flags.2?true cdn:flags.3?true static:flags.4?true id:int ip_address:string port:int secret:flags.10?bytes = DcOption; -config#eb7bb160 flags:# phonecalls_enabled:flags.1?true default_p2p_contacts:flags.3?true preload_featured_stickers:flags.4?true ignore_phone_entities:flags.5?true revoke_pm_inbox:flags.6?true blocked_mode:flags.8?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int revoke_time_limit:int revoke_pm_time_limit:int rating_e_decay:int stickers_recent_limit:int stickers_faved_limit:int channels_read_media_period:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string autoupdate_url_prefix:flags.7?string suggested_lang_code:flags.2?string lang_pack_version:flags.2?int = Config; +config#3213dbba flags:# phonecalls_enabled:flags.1?true default_p2p_contacts:flags.3?true preload_featured_stickers:flags.4?true ignore_phone_entities:flags.5?true revoke_pm_inbox:flags.6?true blocked_mode:flags.8?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector dc_txt_domain_name:string chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int revoke_time_limit:int revoke_pm_time_limit:int rating_e_decay:int stickers_recent_limit:int stickers_faved_limit:int channels_read_media_period:int tmp_sessions:flags.0?int pinned_dialogs_count_max:int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string autoupdate_url_prefix:flags.7?string gif_search_username:flags.9?string venue_search_username:flags.10?string img_search_username:flags.11?string static_maps_provider:flags.12?string caption_length_max:int message_length_max:int webfile_dc_id:int suggested_lang_code:flags.2?string lang_pack_version:flags.2?int = Config; nearestDc#8e1a1775 country:string this_dc:int nearest_dc:int = NearestDc; @@ -562,7 +565,7 @@ inputBotInlineMessageMediaAuto#3380c786 flags:# message:string entities:flags.1? inputBotInlineMessageText#3dcd7a87 flags:# no_webpage:flags.0?true message:string entities:flags.1?Vector reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; inputBotInlineMessageMediaGeo#c1b15d65 flags:# geo_point:InputGeoPoint period:int reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; inputBotInlineMessageMediaVenue#417bbf11 flags:# geo_point:InputGeoPoint title:string address:string provider:string venue_id:string venue_type:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; -inputBotInlineMessageMediaContact#2daf01a7 flags:# phone_number:string first_name:string last_name:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; +inputBotInlineMessageMediaContact#a6edbffd flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; inputBotInlineMessageGame#4b425864 flags:# reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; inputBotInlineResult#88bf9319 flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb:flags.4?InputWebDocument content:flags.5?InputWebDocument send_message:InputBotInlineMessage = InputBotInlineResult; @@ -574,7 +577,7 @@ botInlineMessageMediaAuto#764cf810 flags:# message:string entities:flags.1?Vecto botInlineMessageText#8c7f65e2 flags:# no_webpage:flags.0?true message:string entities:flags.1?Vector reply_markup:flags.2?ReplyMarkup = BotInlineMessage; botInlineMessageMediaGeo#b722de65 flags:# geo:GeoPoint period:int reply_markup:flags.2?ReplyMarkup = BotInlineMessage; botInlineMessageMediaVenue#8a86659c flags:# geo:GeoPoint title:string address:string provider:string venue_id:string venue_type:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage; -botInlineMessageMediaContact#35edb4d4 flags:# phone_number:string first_name:string last_name:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage; +botInlineMessageMediaContact#18d1cdc2 flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage; botInlineResult#11965f3a flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb:flags.4?WebDocument content:flags.5?WebDocument send_message:BotInlineMessage = BotInlineResult; botInlineMediaResult#17db940b flags:# id:string type:string photo:flags.0?Photo document:flags.1?Document title:flags.2?string description:flags.3?string send_message:BotInlineMessage = BotInlineResult; @@ -617,8 +620,9 @@ topPeerCategoryPeers#fb834291 category:TopPeerCategory count:int peers:Vector chats:Vector users:Vector = contacts.TopPeers; +contacts.topPeersDisabled#b52c939d = contacts.TopPeers; -draftMessageEmpty#ba4baec5 = DraftMessage; +draftMessageEmpty#1b0c841a flags:# date:flags.0?int = DraftMessage; draftMessage#fd8e711f flags:# no_webpage:flags.1?true reply_to_msg_id:flags.0?int message:string entities:flags.3?Vector date:int = DraftMessage; messages.featuredStickersNotModified#4ede3cf = messages.FeaturedStickers; @@ -706,14 +710,13 @@ paymentRequestedInfo#909c3f94 flags:# name:flags.0?string phone:flags.1?string e paymentSavedCredentialsCard#cdc27a1f id:string title:string = PaymentSavedCredentials; -webDocument#c61acbd8 url:string access_hash:long size:int mime_type:string attributes:Vector dc_id:int = WebDocument; +webDocument#1c570ed1 url:string access_hash:long size:int mime_type:string attributes:Vector = WebDocument; webDocumentNoProxy#f9c8bcc6 url:string size:int mime_type:string attributes:Vector = WebDocument; inputWebDocument#9bed434d url:string size:int mime_type:string attributes:Vector = InputWebDocument; inputWebFileLocation#c239d686 url:string access_hash:long = InputWebFileLocation; -inputWebFileGeoPointLocation#66275a62 geo_point:InputGeoPoint w:int h:int zoom:int scale:int = InputWebFileLocation; -inputWebFileGeoMessageLocation#553f32eb peer:InputPeer msg_id:int w:int h:int zoom:int scale:int = InputWebFileLocation; +inputWebFileGeoPointLocation#9f2221c9 geo_point:InputGeoPoint access_hash:long w:int h:int zoom:int scale:int = InputWebFileLocation; upload.webFile#21e753bc size:int mime_type:string file_type:storage.FileType mtime:int bytes:bytes = upload.WebFile; @@ -883,6 +886,10 @@ account.sentEmailCode#811f854f email_pattern:string length:int = account.SentEma help.deepLinkInfoEmpty#66afa166 = help.DeepLinkInfo; help.deepLinkInfo#6a4ee832 flags:# update_app:flags.0?true message:string entities:flags.1?Vector = help.DeepLinkInfo; +savedPhoneContact#1142bd56 phone:string first_name:string last_name:string date:int = SavedContact; + +account.takeout#4dba4501 id:long = account.Takeout; + ---functions--- invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; @@ -890,13 +897,14 @@ invokeAfterMsgs#3dc4b4f0 {X:Type} msg_ids:Vector query:!X = X; initConnection#785188b8 {X:Type} flags:# api_id:int device_model:string system_version:string app_version:string system_lang_code:string lang_pack:string lang_code:string proxy:flags.0?InputClientProxy query:!X = X; invokeWithLayer#da9b0d0d {X:Type} layer:int query:!X = X; invokeWithoutUpdates#bf9459b7 {X:Type} query:!X = X; +invokeWithMessagesRange#365275f2 {X:Type} range:MessageRange query:!X = X; +invokeWithTakeout#aca9fd2e {X:Type} takeout_id:long query:!X = X; auth.sendCode#86aef0ec flags:# allow_flashcall:flags.0?true phone_number:string current_number:flags.0?Bool api_id:int api_hash:string = auth.SentCode; auth.signUp#1b067634 phone_number:string phone_code_hash:string phone_code:string first_name:string last_name:string = auth.Authorization; auth.signIn#bcd51581 phone_number:string phone_code_hash:string phone_code:string = auth.Authorization; auth.logOut#5717da40 = Bool; auth.resetAuthorizations#9fab0d1a = Bool; -auth.sendInvites#771c1d97 phone_numbers:Vector message:string = Bool; auth.exportAuthorization#e5bfffcd dc_id:int = auth.ExportedAuthorization; auth.importAuthorization#e3ef9613 id:int bytes:bytes = auth.Authorization; auth.bindTempAuthKey#cdd42a05 perm_auth_key_id:long nonce:long expires_at:int encrypted_message:bytes = Bool; @@ -948,6 +956,8 @@ account.sendVerifyPhoneCode#823380b4 flags:# allow_flashcall:flags.0?true phone_ account.verifyPhone#4dd3a7f6 phone_number:string phone_code_hash:string phone_code:string = Bool; account.sendVerifyEmailCode#7011509f email:string = account.SentEmailCode; account.verifyEmail#ecba39db email:string code:string = Bool; +account.initTakeoutSession#f05b4804 flags:# contacts:flags.0?true message_users:flags.1?true message_chats:flags.2?true message_megagroups:flags.3?true message_channels:flags.4?true files:flags.5?true file_max_size:flags.5?int = account.Takeout; +account.finishTakeoutSession#1d2652ee flags:# success:flags.0?true = Bool; users.getUsers#d91a548 id:Vector = Vector; users.getFullUser#ca30a5b1 id:InputUser = UserFull; @@ -968,9 +978,11 @@ contacts.resolveUsername#f93ccba3 username:string = contacts.ResolvedPeer; contacts.getTopPeers#d4982db5 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true phone_calls:flags.3?true groups:flags.10?true channels:flags.15?true offset:int limit:int hash:int = contacts.TopPeers; contacts.resetTopPeerRating#1ae373ac category:TopPeerCategory peer:InputPeer = Bool; contacts.resetSaved#879537f1 = Bool; +contacts.getSaved#82f1e39f = Vector; +contacts.toggleTopPeers#8514bdda enabled:Bool = Bool; messages.getMessages#63c66506 id:Vector = messages.Messages; -messages.getDialogs#191ba9c5 flags:# exclude_pinned:flags.0?true offset_date:int offset_id:int offset_peer:InputPeer limit:int = messages.Dialogs; +messages.getDialogs#b098aee6 flags:# exclude_pinned:flags.0?true offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:int = messages.Dialogs; messages.getHistory#dcbb8260 peer:InputPeer offset_id:int offset_date:int add_offset:int limit:int max_id:int min_id:int hash:int = messages.Messages; messages.search#8614ef68 flags:# peer:InputPeer q:string from_id:flags.0?InputUser filter:MessagesFilter min_date:int max_date:int offset_id:int add_offset:int limit:int max_id:int min_id:int hash:int = messages.Messages; messages.readHistory#e306d3a peer:InputPeer max_id:int = messages.AffectedMessages; @@ -1065,6 +1077,9 @@ messages.getRecentLocations#bbc45b09 peer:InputPeer limit:int hash:int = message messages.sendMultiMedia#2095512f flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true peer:InputPeer reply_to_msg_id:flags.0?int multi_media:Vector = Updates; messages.uploadEncryptedFile#5057c497 peer:InputEncryptedChat file:InputEncryptedFile = EncryptedFile; messages.searchStickerSets#c2b7d08b flags:# exclude_featured:flags.0?true q:string hash:int = messages.FoundStickerSets; +messages.getSplitRanges#1cff7e08 = Vector; +messages.markDialogUnread#c286d98f flags:# unread:flags.0?true peer:InputDialogPeer = Bool; +messages.getDialogUnreadMarks#22e24e22 = Vector; updates.getState#edd4882a = updates.State; updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference; @@ -1131,6 +1146,7 @@ channels.setStickers#ea8ca4f9 channel:InputChannel stickerset:InputStickerSet = channels.readMessageContents#eab5dc38 channel:InputChannel id:Vector = Bool; channels.deleteHistory#af369d42 channel:InputChannel max_id:int = Bool; channels.togglePreHistoryHidden#eabbb94c channel:InputChannel enabled:Bool = Updates; +channels.getLeftChannels#8341ecc0 offset:int = messages.Chats; bots.sendCustomRequest#aa2769ed custom_method:string params:DataJSON = DataJSON; bots.answerWebhookJSONQuery#e6213f4d query_id:long data:DataJSON = Bool; @@ -1161,4 +1177,4 @@ langpack.getStrings#2e1ee318 lang_code:string keys:Vector = Vector; -// LAYER 81 +// LAYER 82 From c660d3a7d0f977f321686463089b3e6fa57a8494 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 1 Jul 2018 19:43:29 +0200 Subject: [PATCH 009/530] Fix PhotoSize not having date anymore --- pyrogram/client/client.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 20a3e50c..ba584aed 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -711,7 +711,9 @@ class Client(Methods, BaseClient): file_name = "{}_{}_{}{}".format( media_type_str, - datetime.fromtimestamp(media.date or time.time()).strftime("%Y-%m-%d_%H-%M-%S"), + datetime.fromtimestamp( + getattr(media, "date", None) or time.time() + ).strftime("%Y-%m-%d_%H-%M-%S"), self.rnd_id(), extension ) From c85aa5dab2941ddacd154dc2fc672c318001281c Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 1 Jul 2018 19:43:43 +0200 Subject: [PATCH 010/530] Fix Photo downloads --- pyrogram/client/methods/download_media.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/methods/download_media.py b/pyrogram/client/methods/download_media.py index 89b0f61d..20179d08 100644 --- a/pyrogram/client/methods/download_media.py +++ b/pyrogram/client/methods/download_media.py @@ -77,7 +77,12 @@ class DownloadMedia(BaseClient): """ if isinstance(message, pyrogram_types.Message): if message.photo: - media = message.photo.sizes[-1] + media = pyrogram_types.Document( + file_id=message.photo.sizes[-1].file_id, + file_size=message.photo.sizes[-1].file_size, + mime_type="", + date=message.photo.date + ) elif message.audio: media = message.audio elif message.document: @@ -96,6 +101,7 @@ class DownloadMedia(BaseClient): return elif isinstance(message, ( pyrogram_types.Photo, + pyrogram_types.PhotoSize, pyrogram_types.Audio, pyrogram_types.Document, pyrogram_types.Video, @@ -104,7 +110,15 @@ class DownloadMedia(BaseClient): pyrogram_types.Sticker, pyrogram_types.GIF )): - media = message + if isinstance(message, pyrogram_types.Photo): + media = pyrogram_types.Document( + file_id=message.sizes[-1].file_id, + file_size=message.sizes[-1].file_size, + mime_type="", + date=message.date + ) + else: + media = message elif isinstance(message, str): media = pyrogram_types.Document( file_id=message, From 8bb4fdd67d36527739b9815a52c0df22971708a1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 2 Jul 2018 20:48:58 +0200 Subject: [PATCH 011/530] Update to v0.7.6dev1 --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 16204830..b93b57b1 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -23,7 +23,7 @@ __copyright__ = "Copyright (C) 2017-2018 Dan Tès Date: Tue, 3 Jul 2018 18:29:25 +0200 Subject: [PATCH 012/530] Log UpdateChannelTooLong updates --- pyrogram/client/client.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index ba584aed..92666ce5 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -777,6 +777,9 @@ class Client(Methods, BaseClient): pts = getattr(update, "pts", None) pts_count = getattr(update, "pts_count", None) + + if isinstance(update, types.UpdateChannelTooLong): + log.warning(update) if isinstance(update, types.UpdateNewChannelMessage): message = update.message From 29fb0ce599ba67b6aeb532be5350970ece7951a8 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 13:18:20 +0200 Subject: [PATCH 013/530] Also log UpdatesTooLong --- pyrogram/client/client.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 92666ce5..230d4bef 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -839,6 +839,8 @@ class Client(Methods, BaseClient): self.dispatcher.updates.put((diff.other_updates[0], [], [])) elif isinstance(updates, types.UpdateShort): self.dispatcher.updates.put((updates.update, [], [])) + elif isinstance(updates, types.UpdatesTooLong): + log.warning(updates) except Exception as e: log.error(e, exc_info=True) From c7489cf30203b4780e141862d75103154f0a590a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 14:03:14 +0200 Subject: [PATCH 014/530] Reformat code --- pyrogram/client/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 230d4bef..e4fb0cc6 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -777,7 +777,7 @@ class Client(Methods, BaseClient): pts = getattr(update, "pts", None) pts_count = getattr(update, "pts_count", None) - + if isinstance(update, types.UpdateChannelTooLong): log.warning(update) From 8bdccda6eed7ada1f3ef83c78606dad563998fbe Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 14:03:45 +0200 Subject: [PATCH 015/530] Fix GetDialog call --- pyrogram/client/client.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index e4fb0cc6..a0f51d84 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -983,8 +983,12 @@ class Client(Methods, BaseClient): try: r = self.send( functions.messages.GetDialogs( - offset_date, 0, types.InputPeerEmpty(), - self.DIALOGS_AT_ONCE, True + offset_date=offset_date, + offset_id=0, + offset_peer=types.InputPeerEmpty(), + limit=self.DIALOGS_AT_ONCE, + hash=0, + exclude_pinned=True ) ) except FloodWait as e: From 52f1f390ca7721a8676b0c89b4fc0c49c7de85d9 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 20:59:21 +0200 Subject: [PATCH 016/530] Rename get_dialogs --- pyrogram/client/client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index a0f51d84..d7768c86 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -231,7 +231,7 @@ class Client(Methods, BaseClient): self.peers_by_username = {} self.peers_by_phone = {} - self.get_dialogs() + self.get_initial_dialogs() self.get_contacts() else: self.send(functions.messages.GetPinnedDialogs()) @@ -998,7 +998,7 @@ class Client(Methods, BaseClient): log.info("Total peers: {}".format(len(self.peers_by_id))) return r - def get_dialogs(self): + def get_initial_dialogs(self): self.send(functions.messages.GetPinnedDialogs()) dialogs = self.get_dialogs_chunk(0) From 1d7c857e9f31a9ab7afc702c4d1f3147389987a0 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 21:02:26 +0200 Subject: [PATCH 017/530] Rename get_dialogs --- pyrogram/client/client.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index d7768c86..e8cc394f 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -235,7 +235,7 @@ class Client(Methods, BaseClient): self.get_contacts() else: self.send(functions.messages.GetPinnedDialogs()) - self.get_dialogs_chunk(0) + self.get_initial_dialogs_chunk() else: self.send(functions.updates.GetState()) @@ -978,7 +978,7 @@ class Client(Methods, BaseClient): indent=4 ) - def get_dialogs_chunk(self, offset_date): + def get_initial_dialogs_chunk(self, offset_date: int = 0): while True: try: r = self.send( @@ -1001,14 +1001,14 @@ class Client(Methods, BaseClient): def get_initial_dialogs(self): self.send(functions.messages.GetPinnedDialogs()) - dialogs = self.get_dialogs_chunk(0) + dialogs = self.get_initial_dialogs_chunk() offset_date = utils.get_offset_date(dialogs) while len(dialogs.dialogs) == self.DIALOGS_AT_ONCE: - dialogs = self.get_dialogs_chunk(offset_date) + dialogs = self.get_initial_dialogs_chunk(offset_date) offset_date = utils.get_offset_date(dialogs) - self.get_dialogs_chunk(0) + self.get_initial_dialogs_chunk() def resolve_peer(self, peer_id: int or str): """Use this method to get the *InputPeer* of a known *peer_id*. From 2b36fb31d94262a6f43538c23286ec15ff505284 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 21:03:29 +0200 Subject: [PATCH 018/530] Add Dialog type --- pyrogram/client/types/dialog.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 pyrogram/client/types/dialog.py diff --git a/pyrogram/client/types/dialog.py b/pyrogram/client/types/dialog.py new file mode 100644 index 00000000..792360a6 --- /dev/null +++ b/pyrogram/client/types/dialog.py @@ -0,0 +1,28 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api.core import Object + + +class Dialog(Object): + ID = 0xb0700028 + + def __init__(self, id: int, top_message): + # TODO docstrings + self.id = id + self.top_message = top_message From 1ed202b9261b0b831a472adffa287503e2602d60 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 21:03:51 +0200 Subject: [PATCH 019/530] Add Dialogs type --- pyrogram/client/types/dialogs.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 pyrogram/client/types/dialogs.py diff --git a/pyrogram/client/types/dialogs.py b/pyrogram/client/types/dialogs.py new file mode 100644 index 00000000..1e1b0cb2 --- /dev/null +++ b/pyrogram/client/types/dialogs.py @@ -0,0 +1,28 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api.core import Object + + +class Dialogs(Object): + ID = 0xb0700029 + + def __init__(self, total_count: int, dialogs: list): + # TODO docstrings + self.total_count = total_count + self.dialogs = dialogs From 91cf2d1a8e4377e476e7a2df91a485b76120edf7 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 21:05:00 +0200 Subject: [PATCH 020/530] Make Dialog and Dialogs importable and printable --- compiler/api/compiler.py | 2 ++ pyrogram/__init__.py | 4 ++-- pyrogram/client/types/__init__.py | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/api/compiler.py b/compiler/api/compiler.py index 7c1412d1..aa5714ec 100644 --- a/compiler/api/compiler.py +++ b/compiler/api/compiler.py @@ -504,6 +504,8 @@ def start(): f.write("\n 0xb0700025: \"pyrogram.client.types.GIF\",") f.write("\n 0xb0700026: \"pyrogram.client.types.Messages\",") f.write("\n 0xb0700027: \"pyrogram.client.types.Photo\",") + f.write("\n 0xb0700028: \"pyrogram.client.types.Dialog\",") + f.write("\n 0xb0700029: \"pyrogram.client.types.Dialogs\",") f.write("\n}\n") diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index b93b57b1..c151ac4a 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -29,8 +29,8 @@ from .api.errors import Error from .client.types import ( Audio, Chat, ChatMember, ChatPhoto, Contact, Document, InputMediaPhoto, InputMediaVideo, InputPhoneContact, Location, Message, MessageEntity, - Photo, PhotoSize, Sticker, Update, User, UserProfilePhotos, Venue, GIF, - Video, VideoNote, Voice, CallbackQuery, Messages + Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, UserProfilePhotos, + Venue, GIF, Video, VideoNote, Voice, CallbackQuery, Messages ) from .client.types.reply_markup import ( ForceReply, InlineKeyboardButton, InlineKeyboardMarkup, diff --git a/pyrogram/client/types/__init__.py b/pyrogram/client/types/__init__.py index 84c12a44..3c569324 100644 --- a/pyrogram/client/types/__init__.py +++ b/pyrogram/client/types/__init__.py @@ -22,6 +22,8 @@ from .chat import Chat from .chat_member import ChatMember from .chat_photo import ChatPhoto from .contact import Contact +from .dialog import Dialog +from .dialogs import Dialogs from .document import Document from .gif import GIF from .input_media_photo import InputMediaPhoto From 9ac6633cc81b584515a160a78bd0c859c8a72c96 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 21:05:43 +0200 Subject: [PATCH 021/530] Add get_dialogs method --- pyrogram/client/methods/messages/__init__.py | 2 + .../client/methods/messages/get_dialogs.py | 100 ++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 pyrogram/client/methods/messages/get_dialogs.py diff --git a/pyrogram/client/methods/messages/__init__.py b/pyrogram/client/methods/messages/__init__.py index e2c2462e..94279ffd 100644 --- a/pyrogram/client/methods/messages/__init__.py +++ b/pyrogram/client/methods/messages/__init__.py @@ -21,6 +21,7 @@ from .edit_message_caption import EditMessageCaption from .edit_message_reply_markup import EditMessageReplyMarkup from .edit_message_text import EditMessageText from .forward_messages import ForwardMessages +from .get_dialogs import GetDialogs from .get_history import GetHistory from .get_messages import GetMessages from .send_audio import SendAudio @@ -47,6 +48,7 @@ class Messages( ForwardMessages, GetHistory, GetMessages, + GetDialogs, SendAudio, SendChatAction, SendContact, diff --git a/pyrogram/client/methods/messages/get_dialogs.py b/pyrogram/client/methods/messages/get_dialogs.py new file mode 100644 index 00000000..d0ef032b --- /dev/null +++ b/pyrogram/client/methods/messages/get_dialogs.py @@ -0,0 +1,100 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +import pyrogram +from pyrogram.api import functions, types +from ...ext import BaseClient, utils + + +class GetDialogs(BaseClient): + # TODO docstrings + + def get_dialogs(self, + last_chunk=None, + limit: int = 100): + offset_date = 0 + offset_id = 0 + offset_peer = types.InputPeerEmpty() + + if last_chunk: + for dialog in reversed(last_chunk.dialogs): + top_message = dialog.top_message + + if top_message: + message_date = top_message.date + + if message_date: + offset_id = top_message.message_id + offset_date = message_date + offset_peer = self.resolve_peer(dialog.id) + break + + r = self.send( + functions.messages.GetDialogs( + offset_date=offset_date, + offset_id=offset_id, + offset_peer=offset_peer, + limit=limit, + hash=0, + exclude_pinned=True + ) + ) + + users = {i.id: i for i in r.users} + chats = {i.id: i for i in r.chats} + messages = {} + + for message in r.messages: + if isinstance(message, (types.Message, types.MessageService)): + chat_id = message.to_id + + if isinstance(chat_id, types.PeerUser): + chat_id = chat_id.user_id + elif isinstance(chat_id, types.PeerChat): + chat_id = -chat_id.chat_id + else: + chat_id = int("-100" + str(chat_id.channel_id)) + + messages[chat_id] = utils.parse_messages( + self, message, + users, chats + ) + + dialogs = [] + + for dialog in r.dialogs: + chat_id = dialog.peer + + if isinstance(chat_id, types.PeerUser): + chat_id = chat_id.user_id + elif isinstance(chat_id, types.PeerChat): + chat_id = -chat_id.chat_id + else: + chat_id = int("-100" + str(chat_id.channel_id)) + + dialogs.append( + pyrogram.Dialog( + id=chat_id, + top_message=messages.get(chat_id) + ) + ) + + return pyrogram.Dialogs( + total_count=getattr(r, "count", len(r.dialogs)), + dialogs=dialogs + ) From 51194945c6abf89897436bd4e5ec1f7fb6f351da Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 21:31:50 +0200 Subject: [PATCH 022/530] Add members_count attribute to Chat --- pyrogram/client/types/chat.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/types/chat.py b/pyrogram/client/types/chat.py index 1455bd0f..9cd7aec7 100644 --- a/pyrogram/client/types/chat.py +++ b/pyrogram/client/types/chat.py @@ -81,7 +81,8 @@ class Chat(Object): invite_link: str = None, pinned_message=None, sticker_set_name: str = None, - can_set_sticker_set: bool = None + can_set_sticker_set: bool = None, + members_count: int = None ): self.id = id self.type = type @@ -96,3 +97,4 @@ class Chat(Object): self.pinned_message = pinned_message self.sticker_set_name = sticker_set_name self.can_set_sticker_set = can_set_sticker_set + self.members_count = members_count From fe97a4d92bf85bcbde4ab79e6b9db79866e038f6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 21:32:35 +0200 Subject: [PATCH 023/530] Parse members_count --- pyrogram/client/ext/utils.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 3f287b49..d236c69a 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -884,8 +884,8 @@ def parse_chat_full( chat_full: types.messages.ChatFull or types.UserFull ) -> pyrogram_types.Chat: if isinstance(chat_full, types.UserFull): - chat = parse_user_chat(chat_full.user) - chat.description = chat_full.about + parsed_chat = parse_user_chat(chat_full.user) + parsed_chat.description = chat_full.about else: full_chat = chat_full.full_chat chat = None @@ -895,21 +895,25 @@ def parse_chat_full( chat = i if isinstance(full_chat, types.ChatFull): - chat = parse_chat_chat(chat) + parsed_chat = parse_chat_chat(chat) + + if isinstance(full_chat.participants, types.ChatParticipants): + parsed_chat.members_count = len(full_chat.participants.participants) else: - chat = parse_channel_chat(chat) - chat.description = full_chat.about or None + parsed_chat = parse_channel_chat(chat) + parsed_chat.members_count = full_chat.participants_count + parsed_chat.description = full_chat.about or None # TODO: Add StickerSet type - chat.can_set_sticker_set = full_chat.can_set_stickers - chat.sticker_set_name = full_chat.stickerset + parsed_chat.can_set_sticker_set = full_chat.can_set_stickers + parsed_chat.sticker_set_name = full_chat.stickerset if full_chat.pinned_msg_id: - chat.pinned_message = client.get_messages( + parsed_chat.pinned_message = client.get_messages( int("-100" + str(full_chat.id)), full_chat.pinned_msg_id ) if isinstance(full_chat.exported_invite, types.ChatInviteExported): - chat.invite_link = full_chat.exported_invite.link + parsed_chat.invite_link = full_chat.exported_invite.link - return chat + return parsed_chat From 15e3cf0fd5ffc6fae9adfa076778b49fff32ef3c Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 21:39:09 +0200 Subject: [PATCH 024/530] Small fix --- pyrogram/client/ext/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index d236c69a..f87b9035 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -909,7 +909,7 @@ def parse_chat_full( if full_chat.pinned_msg_id: parsed_chat.pinned_message = client.get_messages( - int("-100" + str(full_chat.id)), + parsed_chat.id, full_chat.pinned_msg_id ) From 8b43ad8a63f6b8f15b24399846074c0bba70240f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 4 Jul 2018 21:49:11 +0200 Subject: [PATCH 025/530] Add unread messages, mentions count and unread mark to Dialog --- pyrogram/client/methods/messages/get_dialogs.py | 5 ++++- pyrogram/client/types/dialog.py | 10 +++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/methods/messages/get_dialogs.py b/pyrogram/client/methods/messages/get_dialogs.py index d0ef032b..28687511 100644 --- a/pyrogram/client/methods/messages/get_dialogs.py +++ b/pyrogram/client/methods/messages/get_dialogs.py @@ -90,7 +90,10 @@ class GetDialogs(BaseClient): dialogs.append( pyrogram.Dialog( id=chat_id, - top_message=messages.get(chat_id) + top_message=messages.get(chat_id), + unread_messages_count=dialog.unread_count, + unread_mentions_count=dialog.unread_mentions_count, + unread_mark=dialog.unread_mark ) ) diff --git a/pyrogram/client/types/dialog.py b/pyrogram/client/types/dialog.py index 792360a6..4210f105 100644 --- a/pyrogram/client/types/dialog.py +++ b/pyrogram/client/types/dialog.py @@ -22,7 +22,15 @@ from pyrogram.api.core import Object class Dialog(Object): ID = 0xb0700028 - def __init__(self, id: int, top_message): + def __init__(self, + id: int, + top_message, + unread_messages_count: int, + unread_mentions_count: int, + unread_mark: bool): # TODO docstrings self.id = id self.top_message = top_message + self.unread_messages_count = unread_messages_count + self.unread_mentions_count = unread_mentions_count + self.unread_mark = unread_mark From 4049b571356353869bcbe512c740993f11f69fa9 Mon Sep 17 00:00:00 2001 From: avi-av <32315634+avi-av@users.noreply.github.com> Date: Thu, 5 Jul 2018 14:42:04 +0300 Subject: [PATCH 026/530] Update docs Type returns in the documentation section --- pyrogram/client/methods/messages/get_messages.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/methods/messages/get_messages.py b/pyrogram/client/methods/messages/get_messages.py index 49535a40..3c8b4dbe 100644 --- a/pyrogram/client/methods/messages/get_messages.py +++ b/pyrogram/client/methods/messages/get_messages.py @@ -44,7 +44,7 @@ class GetMessages(BaseClient): Returns: On success and in case *message_ids* was a list, the returned value will be a list of the requested - :obj:`Messages ` even if a list contains just one element, otherwise if + :obj:`Messages ` even if a list contains just one element, otherwise if *message_ids* was an integer, the single requested :obj:`Message ` is returned. From 2b6c30d0e1519b1f8eef7efd2e5690b290c119d6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 5 Jul 2018 14:57:45 +0200 Subject: [PATCH 027/530] Update get_dialogs --- pyrogram/client/ext/utils.py | 9 +++ .../client/methods/messages/get_dialogs.py | 71 +++++++++---------- pyrogram/client/types/dialog.py | 4 +- 3 files changed, 46 insertions(+), 38 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index f87b9035..6dd98f5d 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -917,3 +917,12 @@ def parse_chat_full( parsed_chat.invite_link = full_chat.exported_invite.link return parsed_chat + + +def parse_dialog_chat(peer, users: dict, chats: dict): + if isinstance(peer, types.PeerUser): + return parse_user_chat(users[peer.user_id]) + elif isinstance(peer, types.PeerChat): + return parse_chat_chat(chats[peer.chat_id]) + else: + return parse_channel_chat(chats[peer.channel_id]) diff --git a/pyrogram/client/methods/messages/get_dialogs.py b/pyrogram/client/methods/messages/get_dialogs.py index 28687511..f43ca6a5 100644 --- a/pyrogram/client/methods/messages/get_dialogs.py +++ b/pyrogram/client/methods/messages/get_dialogs.py @@ -25,55 +25,54 @@ class GetDialogs(BaseClient): # TODO docstrings def get_dialogs(self, - last_chunk=None, - limit: int = 100): - offset_date = 0 - offset_id = 0 - offset_peer = types.InputPeerEmpty() + limit: int = 100, + pinned_only: bool = False, + last_chunk=None): + if pinned_only: + r = self.send(functions.messages.GetPinnedDialogs()) + else: + offset_date = 0 - if last_chunk: - for dialog in reversed(last_chunk.dialogs): - top_message = dialog.top_message + if last_chunk: + for dialog in reversed(last_chunk.dialogs): + top_message = dialog.top_message - if top_message: - message_date = top_message.date + if top_message: + message_date = top_message.date - if message_date: - offset_id = top_message.message_id - offset_date = message_date - offset_peer = self.resolve_peer(dialog.id) - break + if message_date: + offset_date = message_date + break - r = self.send( - functions.messages.GetDialogs( - offset_date=offset_date, - offset_id=offset_id, - offset_peer=offset_peer, - limit=limit, - hash=0, - exclude_pinned=True + r = self.send( + functions.messages.GetDialogs( + offset_date=offset_date, + offset_id=0, + offset_peer=types.InputPeerEmpty(), + limit=limit, + hash=0, + exclude_pinned=True + ) ) - ) users = {i.id: i for i in r.users} chats = {i.id: i for i in r.chats} messages = {} for message in r.messages: - if isinstance(message, (types.Message, types.MessageService)): - chat_id = message.to_id + to_id = message.to_id - if isinstance(chat_id, types.PeerUser): - chat_id = chat_id.user_id - elif isinstance(chat_id, types.PeerChat): - chat_id = -chat_id.chat_id + if isinstance(to_id, types.PeerUser): + if message.out: + chat_id = to_id.user_id else: - chat_id = int("-100" + str(chat_id.channel_id)) + chat_id = message.from_id + elif isinstance(to_id, types.PeerChat): + chat_id = -to_id.chat_id + else: + chat_id = int("-100" + str(to_id.channel_id)) - messages[chat_id] = utils.parse_messages( - self, message, - users, chats - ) + messages[chat_id] = utils.parse_messages(self, message, users, chats) dialogs = [] @@ -89,7 +88,7 @@ class GetDialogs(BaseClient): dialogs.append( pyrogram.Dialog( - id=chat_id, + chat=utils.parse_dialog_chat(dialog.peer, users, chats), top_message=messages.get(chat_id), unread_messages_count=dialog.unread_count, unread_mentions_count=dialog.unread_mentions_count, diff --git a/pyrogram/client/types/dialog.py b/pyrogram/client/types/dialog.py index 4210f105..5ad99477 100644 --- a/pyrogram/client/types/dialog.py +++ b/pyrogram/client/types/dialog.py @@ -23,13 +23,13 @@ class Dialog(Object): ID = 0xb0700028 def __init__(self, - id: int, + chat, top_message, unread_messages_count: int, unread_mentions_count: int, unread_mark: bool): # TODO docstrings - self.id = id + self.chat = chat self.top_message = top_message self.unread_messages_count = unread_messages_count self.unread_mentions_count = unread_mentions_count From 3b29a602d0c704764394d0a50d62c8faf065c291 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 6 Jul 2018 19:12:41 +0200 Subject: [PATCH 028/530] Add get_chat_members method --- pyrogram/client/methods/chats/__init__.py | 4 +- .../client/methods/chats/get_chat_members.py | 66 +++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 pyrogram/client/methods/chats/get_chat_members.py diff --git a/pyrogram/client/methods/chats/__init__.py b/pyrogram/client/methods/chats/__init__.py index 9c887ef5..ac819e2c 100644 --- a/pyrogram/client/methods/chats/__init__.py +++ b/pyrogram/client/methods/chats/__init__.py @@ -18,6 +18,7 @@ from .export_chat_invite_link import ExportChatInviteLink from .get_chat import GetChat +from .get_chat_members import GetChatMembers from .join_chat import JoinChat from .kick_chat_member import KickChatMember from .leave_chat import LeaveChat @@ -34,6 +35,7 @@ class Chats( KickChatMember, UnbanChatMember, RestrictChatMember, - PromoteChatMember + PromoteChatMember, + GetChatMembers ): pass diff --git a/pyrogram/client/methods/chats/get_chat_members.py b/pyrogram/client/methods/chats/get_chat_members.py new file mode 100644 index 00000000..4d5a1032 --- /dev/null +++ b/pyrogram/client/methods/chats/get_chat_members.py @@ -0,0 +1,66 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api import functions, types +from ...ext import BaseClient, utils + + +class Filters: + ALL = "all" + KICKED = "kicked" + RESTRICTED = "restricted" + BOTS = "bots" + RECENT = "recent" + ADMINISTRATORS = "administrators" + + +class GetChatMembers(BaseClient): + def get_chat_members(self, + chat_id: int or str, + offset: int = 0, + limit: int = 200, + query: str = "", + filter: str = Filters.ALL): + filter = filter.lower() + + if filter == Filters.ALL: + filter = types.ChannelParticipantsSearch(q=query) + elif filter == Filters.KICKED: + filter = types.ChannelParticipantsKicked(q=query) + elif filter == Filters.RESTRICTED: + filter = types.ChannelParticipantsBanned(q=query) + elif filter == Filters.BOTS: + filter = types.ChannelParticipantsBots() + elif filter == Filters.RECENT: + filter = types.ChannelParticipantsRecent() + elif filter == Filters.ADMINISTRATORS: + filter = types.ChannelParticipantsAdmins() + else: + raise ValueError("Invalid filter \"{}\"".format(filter)) + + return utils.parse_chat_members( + self.send( + functions.channels.GetParticipants( + channel=self.resolve_peer(chat_id), + filter=filter, + offset=offset, + limit=limit, + hash=0 + ) + ) + ) From e3128fca9d63eb81ecd006d2f9eee881f34100f9 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 7 Jul 2018 15:47:34 +0200 Subject: [PATCH 029/530] Make get_chat_members work with basic groups --- .../client/methods/chats/get_chat_members.py | 63 +++++++++++-------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/pyrogram/client/methods/chats/get_chat_members.py b/pyrogram/client/methods/chats/get_chat_members.py index 4d5a1032..a851ef58 100644 --- a/pyrogram/client/methods/chats/get_chat_members.py +++ b/pyrogram/client/methods/chats/get_chat_members.py @@ -36,31 +36,44 @@ class GetChatMembers(BaseClient): limit: int = 200, query: str = "", filter: str = Filters.ALL): - filter = filter.lower() + peer = self.resolve_peer(chat_id) - if filter == Filters.ALL: - filter = types.ChannelParticipantsSearch(q=query) - elif filter == Filters.KICKED: - filter = types.ChannelParticipantsKicked(q=query) - elif filter == Filters.RESTRICTED: - filter = types.ChannelParticipantsBanned(q=query) - elif filter == Filters.BOTS: - filter = types.ChannelParticipantsBots() - elif filter == Filters.RECENT: - filter = types.ChannelParticipantsRecent() - elif filter == Filters.ADMINISTRATORS: - filter = types.ChannelParticipantsAdmins() - else: - raise ValueError("Invalid filter \"{}\"".format(filter)) - - return utils.parse_chat_members( - self.send( - functions.channels.GetParticipants( - channel=self.resolve_peer(chat_id), - filter=filter, - offset=offset, - limit=limit, - hash=0 + if isinstance(peer, types.InputPeerChat): + return utils.parse_chat_members( + self.send( + functions.messages.GetFullChat( + peer.chat_id + ) ) ) - ) + elif isinstance(peer, types.InputPeerChannel): + filter = filter.lower() + + if filter == Filters.ALL: + filter = types.ChannelParticipantsSearch(q=query) + elif filter == Filters.KICKED: + filter = types.ChannelParticipantsKicked(q=query) + elif filter == Filters.RESTRICTED: + filter = types.ChannelParticipantsBanned(q=query) + elif filter == Filters.BOTS: + filter = types.ChannelParticipantsBots() + elif filter == Filters.RECENT: + filter = types.ChannelParticipantsRecent() + elif filter == Filters.ADMINISTRATORS: + filter = types.ChannelParticipantsAdmins() + else: + raise ValueError("Invalid filter \"{}\"".format(filter)) + + return utils.parse_chat_members( + self.send( + functions.channels.GetParticipants( + channel=peer, + filter=filter, + offset=offset, + limit=limit, + hash=0 + ) + ) + ) + else: + raise ValueError("The chat_id \"{}\" belongs to a user".format(chat_id)) From d94139be9a3e0f4177606e696f8a6e191ef0ee84 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 8 Jul 2018 08:39:10 +0200 Subject: [PATCH 030/530] Add parse_chat_members util function --- pyrogram/client/ext/utils.py | 100 +++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 6dd98f5d..56cb844e 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -926,3 +926,103 @@ def parse_dialog_chat(peer, users: dict, chats: dict): return parse_chat_chat(chats[peer.chat_id]) else: return parse_channel_chat(chats[peer.channel_id]) + + +def parse_chat_members(members: types.channels.ChannelParticipants or types.messages.ChatFull): + users = {i.id: i for i in members.users} + parsed_members = [] + + if isinstance(members, types.channels.ChannelParticipants): + members = members.participants + + for member in members: + user = parse_user(users[member.user_id]) + + if isinstance(member, (types.ChannelParticipant, types.ChannelParticipantSelf)): + parsed_members.append( + pyrogram_types.ChatMember( + user=user, + status="member" + ) + ) + elif isinstance(member, types.ChannelParticipantCreator): + parsed_members.append( + pyrogram_types.ChatMember( + user=user, + status="creator" + ) + ) + elif isinstance(member, types.ChannelParticipantAdmin): + rights = member.admin_rights # type: types.ChannelAdminRights + + parsed_members.append( + pyrogram_types.ChatMember( + user=user, + status="administrator", + can_be_edited=member.can_edit, + can_change_info=rights.change_info, + can_post_messages=rights.post_messages, + can_edit_messages=rights.edit_messages, + can_delete_messages=rights.delete_messages, + can_invite_users=rights.invite_users or rights.invite_link, + can_restrict_members=rights.ban_users, + can_pin_messages=rights.pin_messages, + can_promote_members=rights.add_admins + ) + ) + elif isinstance(member, types.ChannelParticipantBanned): + rights = member.banned_rights # type: types.ChannelBannedRights + + chat_member = pyrogram_types.ChatMember( + user=user, + status="kicked" if rights.view_messages else "restricted", + until_date=0 if rights.until_date == (1 << 31) - 1 else rights.until_date + ) + + if chat_member.status == "restricted": + chat_member.can_send_messages = not rights.send_messages + chat_member.can_send_media_messages = not rights.send_media + chat_member.can_send_other_messages = ( + not rights.send_stickers or not rights.send_gifs or + not rights.send_games or not rights.send_inline + ) + chat_member.can_add_web_page_previews = not rights.embed_links + + parsed_members.append(chat_member) + + return pyrogram_types.ChatMembers( + total_count=members.count, + chat_members=parsed_members + ) + else: + members = members.full_chat.participants.participants + + for member in members: + user = parse_user(users[member.user_id]) + + if isinstance(member, types.ChatParticipant): + parsed_members.append( + pyrogram_types.ChatMember( + user=user, + status="member" + ) + ) + elif isinstance(member, types.ChatParticipantCreator): + parsed_members.append( + pyrogram_types.ChatMember( + user=user, + status="creator" + ) + ) + elif isinstance(member, types.ChatParticipantAdmin): + parsed_members.append( + pyrogram_types.ChatMember( + user=user, + status="administrator" + ) + ) + + return pyrogram_types.ChatMembers( + total_count=len(members), + chat_members=parsed_members + ) From 960280b99620822f4c4005aeeb6996f34dbcd69b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 8 Jul 2018 08:39:36 +0200 Subject: [PATCH 031/530] Add new ChatMembers type --- compiler/api/compiler.py | 1 + pyrogram/__init__.py | 2 +- pyrogram/client/types/__init__.py | 1 + pyrogram/client/types/chat_members.py | 27 +++++++++++++++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 pyrogram/client/types/chat_members.py diff --git a/compiler/api/compiler.py b/compiler/api/compiler.py index aa5714ec..3b6dbae7 100644 --- a/compiler/api/compiler.py +++ b/compiler/api/compiler.py @@ -506,6 +506,7 @@ def start(): f.write("\n 0xb0700027: \"pyrogram.client.types.Photo\",") f.write("\n 0xb0700028: \"pyrogram.client.types.Dialog\",") f.write("\n 0xb0700029: \"pyrogram.client.types.Dialogs\",") + f.write("\n 0xb0700030: \"pyrogram.client.types.ChatMembers\",") f.write("\n}\n") diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index c151ac4a..29ad17ef 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -27,7 +27,7 @@ __version__ = "0.7.6dev1" from .api.errors import Error from .client.types import ( - Audio, Chat, ChatMember, ChatPhoto, Contact, Document, InputMediaPhoto, + Audio, Chat, ChatMember, ChatMembers, ChatPhoto, Contact, Document, InputMediaPhoto, InputMediaVideo, InputPhoneContact, Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, UserProfilePhotos, Venue, GIF, Video, VideoNote, Voice, CallbackQuery, Messages diff --git a/pyrogram/client/types/__init__.py b/pyrogram/client/types/__init__.py index 3c569324..d99090ef 100644 --- a/pyrogram/client/types/__init__.py +++ b/pyrogram/client/types/__init__.py @@ -20,6 +20,7 @@ from .audio import Audio from .callback_query import CallbackQuery from .chat import Chat from .chat_member import ChatMember +from .chat_members import ChatMembers from .chat_photo import ChatPhoto from .contact import Contact from .dialog import Dialog diff --git a/pyrogram/client/types/chat_members.py b/pyrogram/client/types/chat_members.py new file mode 100644 index 00000000..5557d161 --- /dev/null +++ b/pyrogram/client/types/chat_members.py @@ -0,0 +1,27 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api.core import Object + + +class ChatMembers(Object): + ID = 0xb0700030 + + def __init__(self, total_count: int, chat_members: list): + self.total_count = total_count + self.chat_members = chat_members From 52ac0c80e676eac953e140e5df3224113d3cdd06 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 8 Jul 2018 08:40:10 +0200 Subject: [PATCH 032/530] Add todo for ChatMembers docstrings --- pyrogram/client/types/chat_members.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyrogram/client/types/chat_members.py b/pyrogram/client/types/chat_members.py index 5557d161..658a3086 100644 --- a/pyrogram/client/types/chat_members.py +++ b/pyrogram/client/types/chat_members.py @@ -20,6 +20,8 @@ from pyrogram.api.core import Object class ChatMembers(Object): + # TODO: Docstrings + ID = 0xb0700030 def __init__(self, total_count: int, chat_members: list): From 9e4267dd2cd01af99891b3ddcd448de5bc834299 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 8 Jul 2018 08:58:10 +0200 Subject: [PATCH 033/530] Move media types in their own folder --- pyrogram/__init__.py | 8 ++--- pyrogram/client/types/__init__.py | 17 +++------- pyrogram/client/types/media/__init__.py | 31 +++++++++++++++++++ pyrogram/client/types/{ => media}/audio.py | 0 pyrogram/client/types/{ => media}/contact.py | 0 pyrogram/client/types/{ => media}/document.py | 0 pyrogram/client/types/{ => media}/gif.py | 0 pyrogram/client/types/{ => media}/location.py | 0 pyrogram/client/types/{ => media}/photo.py | 0 .../client/types/{ => media}/photo_size.py | 0 pyrogram/client/types/{ => media}/sticker.py | 0 .../types/{ => media}/user_profile_photos.py | 0 pyrogram/client/types/{ => media}/venue.py | 0 pyrogram/client/types/{ => media}/video.py | 0 .../client/types/{ => media}/video_note.py | 0 pyrogram/client/types/{ => media}/voice.py | 0 16 files changed, 38 insertions(+), 18 deletions(-) create mode 100644 pyrogram/client/types/media/__init__.py rename pyrogram/client/types/{ => media}/audio.py (100%) rename pyrogram/client/types/{ => media}/contact.py (100%) rename pyrogram/client/types/{ => media}/document.py (100%) rename pyrogram/client/types/{ => media}/gif.py (100%) rename pyrogram/client/types/{ => media}/location.py (100%) rename pyrogram/client/types/{ => media}/photo.py (100%) rename pyrogram/client/types/{ => media}/photo_size.py (100%) rename pyrogram/client/types/{ => media}/sticker.py (100%) rename pyrogram/client/types/{ => media}/user_profile_photos.py (100%) rename pyrogram/client/types/{ => media}/venue.py (100%) rename pyrogram/client/types/{ => media}/video.py (100%) rename pyrogram/client/types/{ => media}/video_note.py (100%) rename pyrogram/client/types/{ => media}/voice.py (100%) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 29ad17ef..f1442596 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -30,11 +30,9 @@ from .client.types import ( Audio, Chat, ChatMember, ChatMembers, ChatPhoto, Contact, Document, InputMediaPhoto, InputMediaVideo, InputPhoneContact, Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, UserProfilePhotos, - Venue, GIF, Video, VideoNote, Voice, CallbackQuery, Messages -) -from .client.types.reply_markup import ( - ForceReply, InlineKeyboardButton, InlineKeyboardMarkup, - KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove + Venue, GIF, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply, + InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, + ReplyKeyboardRemove ) from .client import ( Client, ChatAction, ParseMode, Emoji, diff --git a/pyrogram/client/types/__init__.py b/pyrogram/client/types/__init__.py index d99090ef..e6fcc8aa 100644 --- a/pyrogram/client/types/__init__.py +++ b/pyrogram/client/types/__init__.py @@ -16,35 +16,26 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . -from .audio import Audio from .callback_query import CallbackQuery from .chat import Chat from .chat_member import ChatMember from .chat_members import ChatMembers from .chat_photo import ChatPhoto -from .contact import Contact from .dialog import Dialog from .dialogs import Dialogs -from .document import Document -from .gif import GIF from .input_media_photo import InputMediaPhoto from .input_media_video import InputMediaVideo from .input_phone_contact import InputPhoneContact -from .location import Location +from .media import ( + Audio, Contact, Document, GIF, Location, Photo, PhotoSize, + Sticker, Venue, Video, VideoNote, Voice, UserProfilePhotos +) from .message import Message from .message_entity import MessageEntity from .messages import Messages -from .photo import Photo -from .photo_size import PhotoSize from .reply_markup import ( ForceReply, InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove ) -from .sticker import Sticker from .update import Update from .user import User -from .user_profile_photos import UserProfilePhotos -from .venue import Venue -from .video import Video -from .video_note import VideoNote -from .voice import Voice diff --git a/pyrogram/client/types/media/__init__.py b/pyrogram/client/types/media/__init__.py new file mode 100644 index 00000000..5b09d832 --- /dev/null +++ b/pyrogram/client/types/media/__init__.py @@ -0,0 +1,31 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from .audio import Audio +from .contact import Contact +from .document import Document +from .gif import GIF +from .location import Location +from .photo import Photo +from .photo_size import PhotoSize +from .sticker import Sticker +from .user_profile_photos import UserProfilePhotos +from .venue import Venue +from .video import Video +from .video_note import VideoNote +from .voice import Voice diff --git a/pyrogram/client/types/audio.py b/pyrogram/client/types/media/audio.py similarity index 100% rename from pyrogram/client/types/audio.py rename to pyrogram/client/types/media/audio.py diff --git a/pyrogram/client/types/contact.py b/pyrogram/client/types/media/contact.py similarity index 100% rename from pyrogram/client/types/contact.py rename to pyrogram/client/types/media/contact.py diff --git a/pyrogram/client/types/document.py b/pyrogram/client/types/media/document.py similarity index 100% rename from pyrogram/client/types/document.py rename to pyrogram/client/types/media/document.py diff --git a/pyrogram/client/types/gif.py b/pyrogram/client/types/media/gif.py similarity index 100% rename from pyrogram/client/types/gif.py rename to pyrogram/client/types/media/gif.py diff --git a/pyrogram/client/types/location.py b/pyrogram/client/types/media/location.py similarity index 100% rename from pyrogram/client/types/location.py rename to pyrogram/client/types/media/location.py diff --git a/pyrogram/client/types/photo.py b/pyrogram/client/types/media/photo.py similarity index 100% rename from pyrogram/client/types/photo.py rename to pyrogram/client/types/media/photo.py diff --git a/pyrogram/client/types/photo_size.py b/pyrogram/client/types/media/photo_size.py similarity index 100% rename from pyrogram/client/types/photo_size.py rename to pyrogram/client/types/media/photo_size.py diff --git a/pyrogram/client/types/sticker.py b/pyrogram/client/types/media/sticker.py similarity index 100% rename from pyrogram/client/types/sticker.py rename to pyrogram/client/types/media/sticker.py diff --git a/pyrogram/client/types/user_profile_photos.py b/pyrogram/client/types/media/user_profile_photos.py similarity index 100% rename from pyrogram/client/types/user_profile_photos.py rename to pyrogram/client/types/media/user_profile_photos.py diff --git a/pyrogram/client/types/venue.py b/pyrogram/client/types/media/venue.py similarity index 100% rename from pyrogram/client/types/venue.py rename to pyrogram/client/types/media/venue.py diff --git a/pyrogram/client/types/video.py b/pyrogram/client/types/media/video.py similarity index 100% rename from pyrogram/client/types/video.py rename to pyrogram/client/types/media/video.py diff --git a/pyrogram/client/types/video_note.py b/pyrogram/client/types/media/video_note.py similarity index 100% rename from pyrogram/client/types/video_note.py rename to pyrogram/client/types/media/video_note.py diff --git a/pyrogram/client/types/voice.py b/pyrogram/client/types/media/voice.py similarity index 100% rename from pyrogram/client/types/voice.py rename to pyrogram/client/types/media/voice.py From 756a6f7630c8790f5b80e7128341bd24561a3ca1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 8 Jul 2018 09:22:08 +0200 Subject: [PATCH 034/530] Add set_chat_photo method --- pyrogram/client/methods/chats/__init__.py | 4 +- .../client/methods/chats/set_chat_photo.py | 60 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 pyrogram/client/methods/chats/set_chat_photo.py diff --git a/pyrogram/client/methods/chats/__init__.py b/pyrogram/client/methods/chats/__init__.py index ac819e2c..666329f5 100644 --- a/pyrogram/client/methods/chats/__init__.py +++ b/pyrogram/client/methods/chats/__init__.py @@ -24,6 +24,7 @@ from .kick_chat_member import KickChatMember from .leave_chat import LeaveChat from .promote_chat_member import PromoteChatMember from .restrict_chat_member import RestrictChatMember +from .set_chat_photo import SetChatPhoto from .unban_chat_member import UnbanChatMember @@ -36,6 +37,7 @@ class Chats( UnbanChatMember, RestrictChatMember, PromoteChatMember, - GetChatMembers + GetChatMembers, + SetChatPhoto ): pass diff --git a/pyrogram/client/methods/chats/set_chat_photo.py b/pyrogram/client/methods/chats/set_chat_photo.py new file mode 100644 index 00000000..63c75ff8 --- /dev/null +++ b/pyrogram/client/methods/chats/set_chat_photo.py @@ -0,0 +1,60 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . +import os +from base64 import b64decode +from struct import unpack + +from pyrogram.api import functions, types +from ...ext import BaseClient + + +class SetChatPhoto(BaseClient): + def set_chat_photo(self, chat_id: int or str, photo: str): + # TODO: Docstrings + peer = self.resolve_peer(chat_id) + + if os.path.exists(photo): + photo = types.InputChatUploadedPhoto(file=self.save_file(photo)) + else: + s = unpack(" Date: Sun, 8 Jul 2018 10:18:48 +0200 Subject: [PATCH 035/530] Reformat code --- pyrogram/client/methods/chats/set_chat_photo.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyrogram/client/methods/chats/set_chat_photo.py b/pyrogram/client/methods/chats/set_chat_photo.py index 63c75ff8..b93ba091 100644 --- a/pyrogram/client/methods/chats/set_chat_photo.py +++ b/pyrogram/client/methods/chats/set_chat_photo.py @@ -15,6 +15,7 @@ # # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . + import os from base64 import b64decode from struct import unpack From 17ca6b709487158efa7e12d2af7acc368fdd7b51 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 8 Jul 2018 10:19:16 +0200 Subject: [PATCH 036/530] Add delete_chat_photo method --- pyrogram/client/methods/chats/__init__.py | 4 +- .../client/methods/chats/delete_chat_photo.py | 45 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 pyrogram/client/methods/chats/delete_chat_photo.py diff --git a/pyrogram/client/methods/chats/__init__.py b/pyrogram/client/methods/chats/__init__.py index 666329f5..c3cc67a6 100644 --- a/pyrogram/client/methods/chats/__init__.py +++ b/pyrogram/client/methods/chats/__init__.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +from .delete_chat_photo import DeleteChatPhoto from .export_chat_invite_link import ExportChatInviteLink from .get_chat import GetChat from .get_chat_members import GetChatMembers @@ -38,6 +39,7 @@ class Chats( RestrictChatMember, PromoteChatMember, GetChatMembers, - SetChatPhoto + SetChatPhoto, + DeleteChatPhoto ): pass diff --git a/pyrogram/client/methods/chats/delete_chat_photo.py b/pyrogram/client/methods/chats/delete_chat_photo.py new file mode 100644 index 00000000..98998fbd --- /dev/null +++ b/pyrogram/client/methods/chats/delete_chat_photo.py @@ -0,0 +1,45 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api import functions, types +from ...ext import BaseClient + + +class DeleteChatPhoto(BaseClient): + def delete_chat_photo(self, chat_id: int or str): + # TODO: Docstrings + peer = self.resolve_peer(chat_id) + + if isinstance(peer, types.InputPeerChat): + self.send( + functions.messages.EditChatPhoto( + chat_id=peer.chat_id, + photo=types.InputChatPhotoEmpty() + ) + ) + elif isinstance(peer, types.InputPeerChannel): + self.send( + functions.channels.EditPhoto( + channel=peer, + photo=types.InputChatPhotoEmpty() + ) + ) + else: + raise ValueError("The chat_id \"{}\" belongs to a user".format(chat_id)) + + return True From 393caa9d7c24af706d106ab968a7a7f7795566b6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 8 Jul 2018 10:24:39 +0200 Subject: [PATCH 037/530] Add set_chat_title method --- pyrogram/client/methods/chats/__init__.py | 4 +- .../client/methods/chats/set_chat_title.py | 45 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 pyrogram/client/methods/chats/set_chat_title.py diff --git a/pyrogram/client/methods/chats/__init__.py b/pyrogram/client/methods/chats/__init__.py index c3cc67a6..1df65e69 100644 --- a/pyrogram/client/methods/chats/__init__.py +++ b/pyrogram/client/methods/chats/__init__.py @@ -26,6 +26,7 @@ from .leave_chat import LeaveChat from .promote_chat_member import PromoteChatMember from .restrict_chat_member import RestrictChatMember from .set_chat_photo import SetChatPhoto +from .set_chat_title import SetChatTitle from .unban_chat_member import UnbanChatMember @@ -40,6 +41,7 @@ class Chats( PromoteChatMember, GetChatMembers, SetChatPhoto, - DeleteChatPhoto + DeleteChatPhoto, + SetChatTitle ): pass diff --git a/pyrogram/client/methods/chats/set_chat_title.py b/pyrogram/client/methods/chats/set_chat_title.py new file mode 100644 index 00000000..ba732427 --- /dev/null +++ b/pyrogram/client/methods/chats/set_chat_title.py @@ -0,0 +1,45 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api import functions, types +from ...ext import BaseClient + + +class SetChatTitle(BaseClient): + def set_chat_title(self, chat_id: int or str, title: str): + # TODO: Docstrings + peer = self.resolve_peer(chat_id) + + if isinstance(peer, types.InputPeerChat): + self.send( + functions.messages.EditChatTitle( + chat_id=peer.chat_id, + title=title + ) + ) + elif isinstance(peer, types.InputPeerChannel): + self.send( + functions.channels.EditTitle( + channel=peer, + title=title + ) + ) + else: + raise ValueError("The chat_id \"{}\" belongs to a user".format(chat_id)) + + return True From 7d799aed11512a0738f0bc7570096f725374484c Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 8 Jul 2018 10:28:54 +0200 Subject: [PATCH 038/530] Add set_chat_description method --- pyrogram/client/methods/chats/__init__.py | 4 +- .../methods/chats/set_chat_description.py | 40 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 pyrogram/client/methods/chats/set_chat_description.py diff --git a/pyrogram/client/methods/chats/__init__.py b/pyrogram/client/methods/chats/__init__.py index 1df65e69..c38f9d4a 100644 --- a/pyrogram/client/methods/chats/__init__.py +++ b/pyrogram/client/methods/chats/__init__.py @@ -25,6 +25,7 @@ from .kick_chat_member import KickChatMember from .leave_chat import LeaveChat from .promote_chat_member import PromoteChatMember from .restrict_chat_member import RestrictChatMember +from .set_chat_description import SetChatDescription from .set_chat_photo import SetChatPhoto from .set_chat_title import SetChatTitle from .unban_chat_member import UnbanChatMember @@ -42,6 +43,7 @@ class Chats( GetChatMembers, SetChatPhoto, DeleteChatPhoto, - SetChatTitle + SetChatTitle, + SetChatDescription ): pass diff --git a/pyrogram/client/methods/chats/set_chat_description.py b/pyrogram/client/methods/chats/set_chat_description.py new file mode 100644 index 00000000..3f3871b1 --- /dev/null +++ b/pyrogram/client/methods/chats/set_chat_description.py @@ -0,0 +1,40 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api import functions, types +from ...ext import BaseClient + + +class SetChatDescription(BaseClient): + def set_chat_description(self, chat_id: int or str, description: str): + # TODO: Docstrings + peer = self.resolve_peer(chat_id) + + if isinstance(peer, types.InputPeerChannel): + self.send( + functions.channels.EditAbout( + channel=peer, + about=description + ) + ) + elif isinstance(peer, types.InputPeerChat): + raise ValueError("The chat_id \"{}\" belongs to a basic group".format(chat_id)) + else: + raise ValueError("The chat_id \"{}\" belongs to a user".format(chat_id)) + + return True From 486e8b955202e8fc21fb5829d15d887e82620926 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 8 Jul 2018 11:00:56 +0200 Subject: [PATCH 039/530] Add pin_chat_message method --- pyrogram/client/methods/chats/__init__.py | 4 +- .../client/methods/chats/pin_chat_message.py | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 pyrogram/client/methods/chats/pin_chat_message.py diff --git a/pyrogram/client/methods/chats/__init__.py b/pyrogram/client/methods/chats/__init__.py index c38f9d4a..fa9dd21d 100644 --- a/pyrogram/client/methods/chats/__init__.py +++ b/pyrogram/client/methods/chats/__init__.py @@ -23,6 +23,7 @@ from .get_chat_members import GetChatMembers from .join_chat import JoinChat from .kick_chat_member import KickChatMember from .leave_chat import LeaveChat +from .pin_chat_message import PinChatMessage from .promote_chat_member import PromoteChatMember from .restrict_chat_member import RestrictChatMember from .set_chat_description import SetChatDescription @@ -44,6 +45,7 @@ class Chats( SetChatPhoto, DeleteChatPhoto, SetChatTitle, - SetChatDescription + SetChatDescription, + PinChatMessage ): pass diff --git a/pyrogram/client/methods/chats/pin_chat_message.py b/pyrogram/client/methods/chats/pin_chat_message.py new file mode 100644 index 00000000..5f7db61e --- /dev/null +++ b/pyrogram/client/methods/chats/pin_chat_message.py @@ -0,0 +1,41 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api import functions, types +from ...ext import BaseClient + + +class PinChatMessage(BaseClient): + def pin_chat_message(self, chat_id: int or str, message_id: int, disable_notification: bool = None): + # TODO: Docstrings + peer = self.resolve_peer(chat_id) + + if isinstance(peer, types.InputPeerChannel): + self.send( + functions.channels.UpdatePinnedMessage( + channel=peer, + id=message_id, + silent=disable_notification or None + ) + ) + elif isinstance(peer, types.InputPeerChat): + raise ValueError("The chat_id \"{}\" belongs to a basic group".format(chat_id)) + else: + raise ValueError("The chat_id \"{}\" belongs to a user".format(chat_id)) + + return True From 037ded73c353c75a715e6515a205af25caeb737a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 8 Jul 2018 11:09:07 +0200 Subject: [PATCH 040/530] Add unpin_chat_message method --- pyrogram/client/methods/chats/__init__.py | 4 +- .../methods/chats/unpin_chat_message.py | 40 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 pyrogram/client/methods/chats/unpin_chat_message.py diff --git a/pyrogram/client/methods/chats/__init__.py b/pyrogram/client/methods/chats/__init__.py index fa9dd21d..038440f6 100644 --- a/pyrogram/client/methods/chats/__init__.py +++ b/pyrogram/client/methods/chats/__init__.py @@ -30,6 +30,7 @@ from .set_chat_description import SetChatDescription from .set_chat_photo import SetChatPhoto from .set_chat_title import SetChatTitle from .unban_chat_member import UnbanChatMember +from .unpin_chat_message import UnpinChatMessage class Chats( @@ -46,6 +47,7 @@ class Chats( DeleteChatPhoto, SetChatTitle, SetChatDescription, - PinChatMessage + PinChatMessage, + UnpinChatMessage ): pass diff --git a/pyrogram/client/methods/chats/unpin_chat_message.py b/pyrogram/client/methods/chats/unpin_chat_message.py new file mode 100644 index 00000000..90f94fef --- /dev/null +++ b/pyrogram/client/methods/chats/unpin_chat_message.py @@ -0,0 +1,40 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api import functions, types +from ...ext import BaseClient + + +class UnpinChatMessage(BaseClient): + def unpin_chat_message(self, chat_id: int or str): + # TODO: Docstrings + peer = self.resolve_peer(chat_id) + + if isinstance(peer, types.InputPeerChannel): + self.send( + functions.channels.UpdatePinnedMessage( + channel=peer, + id=0 + ) + ) + elif isinstance(peer, types.InputPeerChat): + raise ValueError("The chat_id \"{}\" belongs to a basic group".format(chat_id)) + else: + raise ValueError("The chat_id \"{}\" belongs to a user".format(chat_id)) + + return True From 31f41fae180b5b870c41ecbbf1b5ba2618814ad7 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 9 Jul 2018 23:47:29 +0200 Subject: [PATCH 041/530] Add USER_NOT_MUTUAL_CONTACT and USER_CHANNELS_TOO_MUCH errors --- compiler/error/source/400_BAD_REQUEST.tsv | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/error/source/400_BAD_REQUEST.tsv b/compiler/error/source/400_BAD_REQUEST.tsv index cd196077..f02c72ff 100644 --- a/compiler/error/source/400_BAD_REQUEST.tsv +++ b/compiler/error/source/400_BAD_REQUEST.tsv @@ -62,4 +62,6 @@ USER_IS_BOT A bot cannot send messages to other bots or to itself WEBPAGE_CURL_FAILED Telegram could not fetch the provided URL STICKERSET_INVALID The requested sticker set is invalid PEER_FLOOD The method can't be used because your account is limited -MEDIA_CAPTION_TOO_LONG The media caption is longer than 200 characters \ No newline at end of file +MEDIA_CAPTION_TOO_LONG The media caption is longer than 200 characters +USER_NOT_MUTUAL_CONTACT The user is not a mutual contact +USER_CHANNELS_TOO_MUCH The user is already in too many channels or supergroups \ No newline at end of file From ab11c9e3478cff7d64311f6407d242942038d8b2 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 10 Jul 2018 15:57:27 +0200 Subject: [PATCH 042/530] Add missing docstring arguments --- pyrogram/client/methods/chats/get_chat.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyrogram/client/methods/chats/get_chat.py b/pyrogram/client/methods/chats/get_chat.py index 194e6171..588ac468 100644 --- a/pyrogram/client/methods/chats/get_chat.py +++ b/pyrogram/client/methods/chats/get_chat.py @@ -25,6 +25,11 @@ class GetChat(BaseClient): """Use this method to get up to date information about the chat (current name of the user for one-on-one conversations, current username of a user, group or channel, etc.) + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For a private channel/supergroup you can use its *t.me/joinchat/* link. + Returns: On success, a :obj:`Chat ` object is returned. From 68ea8898247b1b1bc9244e2d13899a2fb4ca3dbd Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 17:05:07 +0200 Subject: [PATCH 043/530] Add REG_ID_GENERATE_FAILED error --- compiler/error/source/500_INTERNAL_SERVER_ERROR.tsv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/error/source/500_INTERNAL_SERVER_ERROR.tsv b/compiler/error/source/500_INTERNAL_SERVER_ERROR.tsv index abb58495..60d1b51a 100644 --- a/compiler/error/source/500_INTERNAL_SERVER_ERROR.tsv +++ b/compiler/error/source/500_INTERNAL_SERVER_ERROR.tsv @@ -3,4 +3,5 @@ AUTH_RESTART User authorization has restarted RPC_CALL_FAIL Telegram is having internal problems. Please try again later RPC_MCGET_FAIL Telegram is having internal problems. Please try again later PERSISTENT_TIMESTAMP_OUTDATED Telegram is having internal problems. Please try again later -HISTORY_GET_FAILED Telegram is having internal problems. Please try again later \ No newline at end of file +HISTORY_GET_FAILED Telegram is having internal problems. Please try again later +REG_ID_GENERATE_FAILED Telegram is having internal problems. Please try again later \ No newline at end of file From 0c96fa8b7cd4a7f22bceacf12c85d5f68770db98 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 17:05:33 +0200 Subject: [PATCH 044/530] Don't flush each chunk. Let python/os deal with it --- pyrogram/client/client.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index e8cc394f..709ea95a 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -1240,8 +1240,6 @@ class Client(Methods, BaseClient): break f.write(chunk) - f.flush() - os.fsync(f.fileno()) offset += limit @@ -1324,8 +1322,6 @@ class Client(Methods, BaseClient): assert h.hash == sha256(cdn_chunk).digest(), "Invalid CDN hash part {}".format(i) f.write(decrypted_chunk) - f.flush() - os.fsync(f.fileno()) offset += limit From f7b661a6c485ee24b15bc3a7f0eed710b8ab5322 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 17:09:52 +0200 Subject: [PATCH 045/530] Add API_ID_PUBLISHED_FLOOD --- compiler/error/source/400_BAD_REQUEST.tsv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/error/source/400_BAD_REQUEST.tsv b/compiler/error/source/400_BAD_REQUEST.tsv index f02c72ff..e00c10c5 100644 --- a/compiler/error/source/400_BAD_REQUEST.tsv +++ b/compiler/error/source/400_BAD_REQUEST.tsv @@ -64,4 +64,5 @@ STICKERSET_INVALID The requested sticker set is invalid PEER_FLOOD The method can't be used because your account is limited MEDIA_CAPTION_TOO_LONG The media caption is longer than 200 characters USER_NOT_MUTUAL_CONTACT The user is not a mutual contact -USER_CHANNELS_TOO_MUCH The user is already in too many channels or supergroups \ No newline at end of file +USER_CHANNELS_TOO_MUCH The user is already in too many channels or supergroups +API_ID_PUBLISHED_FLOOD You are using an API key that is limited on the server side \ No newline at end of file From ad9fb2680818143c1b223caaa981c0972633a868 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 17:25:39 +0200 Subject: [PATCH 046/530] Cleaner Chat docstrings --- pyrogram/client/types/chat.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/pyrogram/client/types/chat.py b/pyrogram/client/types/chat.py index 9cd7aec7..afed1ca4 100644 --- a/pyrogram/client/types/chat.py +++ b/pyrogram/client/types/chat.py @@ -24,15 +24,13 @@ class Chat(Object): Args: id (``int``): - Unique identifier for this chat. This number may be greater than 32 bits and some programming - languages may have difficulty/silent defects in interpreting it. But it is smaller than 52 bits, - so a signed 64 bit integer or double-precision float type are safe for storing this identifier. + Unique identifier for this chat. type (``str``): Type of chat, can be either "private", "group", "supergroup" or "channel". title (``str``, *optional*): - Title, for supergroups, channels and group chats. + Title, for supergroups, channels and basic group chats. username (``str``, *optional*): Username, for private chats, supergroups and channels if available. @@ -44,25 +42,33 @@ class Chat(Object): Last name of the other party in a private chat. all_members_are_administrators (``bool``, *optional*): - True if a group has 'All Members Are Admins' enabled. + True if a basic group has "All Members Are Admins" enabled. photo (:obj:`ChatPhoto `, *optional*): - Chat photo. Returned only in getChat. + Chat photo. Suitable for downloads only. description (``str``, *optional*): - Description, for supergroups and channel chats. Returned only in getChat. + Description, for supergroups and channel chats. + Returned only in :meth:`get_chat() `. invite_link (``str``, *optional*): - Chat invite link, for supergroups and channel chats. Returned only in getChat. + Chat invite link, for supergroups and channel chats. + Returned only in :meth:`get_chat() `. pinned_message (:obj:`Message `, *optional*): - Pinned message, for supergroups and channel chats. Returned only in getChat. + Pinned message, for supergroups and channel chats. + Returned only in :meth:`get_chat() `. sticker_set_name (``str``, *optional*): - For supergroups, name of group sticker set. Returned only in getChat. + For supergroups, name of group sticker set. + Returned only in :meth:`get_chat() `. can_set_sticker_set (``bool``, *optional*): - True, if the bot can change the group sticker set. Returned only in getChat. + True, if the group sticker set can be changed by you. + Returned only in :meth:`get_chat() `. + + members_count (``int``, *optional*): + Chat members count, for groups and channels only. """ ID = 0xb0700002 From 5347080fd17646e145c1dcef7caba734e7feb4d4 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 17:26:59 +0200 Subject: [PATCH 047/530] Clean Audio comments --- pyrogram/client/types/media/audio.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pyrogram/client/types/media/audio.py b/pyrogram/client/types/media/audio.py index 51cec257..57731266 100644 --- a/pyrogram/client/types/media/audio.py +++ b/pyrogram/client/types/media/audio.py @@ -65,12 +65,12 @@ class Audio(Object): performer: str = None, title: str = None ): - self.file_id = file_id # string - self.thumb = thumb # flags.0?PhotoSize - self.file_name = file_name # flags.1?string - self.mime_type = mime_type # flags.2?string - self.file_size = file_size # flags.3?int - self.date = date # flags.4?int - self.duration = duration # int - self.performer = performer # flags.5?string - self.title = title # flags.6?string + self.file_id = file_id + self.thumb = thumb + self.file_name = file_name + self.mime_type = mime_type + self.file_size = file_size + self.date = date + self.duration = duration + self.performer = performer + self.title = title From 7509566796b0084fc1470b2207391f23f802024c Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 17:36:49 +0200 Subject: [PATCH 048/530] Remove Voice thumb and file_name. Add waveform --- pyrogram/client/types/media/voice.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/pyrogram/client/types/media/voice.py b/pyrogram/client/types/media/voice.py index 414d2267..d838cf59 100644 --- a/pyrogram/client/types/media/voice.py +++ b/pyrogram/client/types/media/voice.py @@ -29,11 +29,8 @@ class Voice(Object): duration (``int``): Duration of the audio in seconds as defined by sender. - thumb (:obj:`PhotoSize `, *optional*): - Voice thumbnail. - - file_name (``str``, *optional*): - Voice file name. + waveform (``bytes``, *optional*): + Voice waveform. mime_type (``str``, *optional*): MIME type of the file as defined by sender. @@ -51,15 +48,13 @@ class Voice(Object): self, file_id: str, duration: int, - thumb=None, - file_name: str = None, + waveform: bytes = None, mime_type: str = None, file_size: int = None, date: int = None): - self.file_id = file_id # string - self.thumb = thumb # flags.0?PhotoSize - self.file_name = file_name # flags.1?string - self.mime_type = mime_type # flags.2?string - self.file_size = file_size # flags.3?int - self.date = date # flags.4?int - self.duration = duration # int + self.file_id = file_id + self.duration = duration + self.waveform = waveform + self.mime_type = mime_type + self.file_size = file_size + self.date = date From 9214416f7cd9ff4ba6a8e90861bb0cda0ea5a4f0 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 17:36:58 +0200 Subject: [PATCH 049/530] Parse Voice waveform --- pyrogram/client/ext/utils.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 56cb844e..177c5eaf 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -400,8 +400,7 @@ def parse_messages( duration=audio_attributes.duration, mime_type=doc.mime_type, file_size=doc.size, - thumb=parse_thumb(doc.thumb), - file_name=file_name, + waveform=audio_attributes.waveform, date=doc.date ) else: From 00e170feea6e71a3007df63be0fb62e6d2ebcb1a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 17:40:33 +0200 Subject: [PATCH 050/530] Video notes don't have a file_name --- pyrogram/client/types/media/video_note.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/pyrogram/client/types/media/video_note.py b/pyrogram/client/types/media/video_note.py index 7f0b6736..642eb5aa 100644 --- a/pyrogram/client/types/media/video_note.py +++ b/pyrogram/client/types/media/video_note.py @@ -35,9 +35,6 @@ class VideoNote(Object): thumb (:obj:`PhotoSize `, *optional*): Video thumbnail. - file_name (``str``, *optional*): - Video note file name. - mime_type (``str``, *optional*): MIME type of the file as defined by sender. @@ -56,16 +53,14 @@ class VideoNote(Object): length: int, duration: int, thumb=None, - file_name: str = None, mime_type: str = None, file_size: int = None, date: int = None ): - self.file_id = file_id # string - self.thumb = thumb # flags.0?PhotoSize - self.file_name = file_name # flags.1?string - self.mime_type = mime_type # flags.2?string - self.file_size = file_size # flags.3?int - self.date = date # flags.4?int - self.length = length # int - self.duration = duration # int + self.file_id = file_id + self.thumb = thumb + self.mime_type = mime_type + self.file_size = file_size + self.date = date + self.length = length + self.duration = duration From 12ef2f8ca222ca5ffe191cbf0ebba12512157273 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 17:48:18 +0200 Subject: [PATCH 051/530] Fix video notes not having a file_name anymore --- pyrogram/client/ext/utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 177c5eaf..c4f7ef57 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -463,7 +463,6 @@ def parse_messages( duration=video_attributes.duration, thumb=parse_thumb(doc.thumb), file_size=doc.size, - file_name=file_name, mime_type=doc.mime_type, date=doc.date ) From fade921ac02a0088ec572449c635322f2e4a78d6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 18:05:36 +0200 Subject: [PATCH 052/530] Don't document client, is for internal purposes only --- pyrogram/client/types/message.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pyrogram/client/types/message.py b/pyrogram/client/types/message.py index 112bc0bf..30b40b63 100644 --- a/pyrogram/client/types/message.py +++ b/pyrogram/client/types/message.py @@ -26,9 +26,6 @@ class Message(Object): Args: message_id (``int``): Unique message identifier inside this chat. - - client (:obj:`Client `, *optional*): - The client instance this message is bound to. date (``int``, *optional*): Date the message was sent in Unix time. From e89d56e05811ea26550d3255d7e78d1358195f99 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 23:54:11 +0200 Subject: [PATCH 053/530] Add cashtag message entity --- pyrogram/client/ext/utils.py | 1 + pyrogram/client/types/message_entity.py | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index c4f7ef57..cd2c34bf 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -60,6 +60,7 @@ class Str(str): ENTITIES = { types.MessageEntityMention.ID: "mention", types.MessageEntityHashtag.ID: "hashtag", + types.MessageEntityCashtag.ID: "cashtag", types.MessageEntityBotCommand.ID: "bot_command", types.MessageEntityUrl.ID: "url", types.MessageEntityEmail.ID: "email", diff --git a/pyrogram/client/types/message_entity.py b/pyrogram/client/types/message_entity.py index 460da6e7..f41907c8 100644 --- a/pyrogram/client/types/message_entity.py +++ b/pyrogram/client/types/message_entity.py @@ -26,9 +26,9 @@ class MessageEntity(Object): Args: type (``str``): Type of the entity. - Can be mention (@username), hashtag, bot_command, url, email, bold (bold text), italic (italic text), - code (monowidth string), pre (monowidth block), text_link (for clickable text URLs), - text_mention (for users without usernames). + Can be "mention" (@username), "hashtag", "cashtag", "bot_command", "url", "email", "bold" (bold text), + italic (italic text), "code" (monowidth string), "pre" (monowidth block), "text_link" (for clickable text + URLs), "text_mention" (for users without usernames). offset (``int``): Offset in UTF-16 code units to the start of the entity. From b6a4dee7875bea516059c6aa7219bd808bebe9f2 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Jul 2018 23:54:54 +0200 Subject: [PATCH 054/530] Fix some User weird docstrings --- pyrogram/client/types/user.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/types/user.py b/pyrogram/client/types/user.py index 62e79e19..17510738 100644 --- a/pyrogram/client/types/user.py +++ b/pyrogram/client/types/user.py @@ -42,10 +42,10 @@ class User(Object): IETF language tag of the user's language. phone_number (``str``, *optional*): - User's or bot's phone number. + User's phone number. photo (:obj:`ChatPhoto `, *optional*): - User's or bot's current profile photo. + User's or bot's current profile photo. Suitable for downloads only. """ ID = 0xb0700001 From f242aceb31c5a39622535d8370b9414883e16b1d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 00:10:33 +0200 Subject: [PATCH 055/530] Add vCard support for contacts --- pyrogram/client/ext/utils.py | 1 + .../client/methods/messages/send_contact.py | 11 ++++++++--- pyrogram/client/types/media/contact.py | 18 +++++++++++++----- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index cd2c34bf..eba4e65e 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -360,6 +360,7 @@ def parse_messages( phone_number=media.phone_number, first_name=media.first_name, last_name=media.last_name or None, + vcard=media.vcard or None, user_id=media.user_id or None ) elif isinstance(media, types.MessageMediaVenue): diff --git a/pyrogram/client/methods/messages/send_contact.py b/pyrogram/client/methods/messages/send_contact.py index fc0abdd5..1a894e30 100644 --- a/pyrogram/client/methods/messages/send_contact.py +++ b/pyrogram/client/methods/messages/send_contact.py @@ -26,6 +26,7 @@ class SendContact(BaseClient): phone_number: str, first_name: str, last_name: str = "", + vcard: str = "", disable_notification: bool = None, reply_to_message_id: int = None, reply_markup=None): @@ -47,6 +48,9 @@ class SendContact(BaseClient): last_name (``str``, *optional*): Contact's last name. + vcard (``str``, *optional*): + Contact's vCard information. + disable_notification (``bool``, *optional*): Sends the message silently. Users will receive a notification with no sound. @@ -68,9 +72,10 @@ class SendContact(BaseClient): functions.messages.SendMedia( peer=self.resolve_peer(chat_id), media=types.InputMediaContact( - phone_number, - first_name, - last_name + phone_number=phone_number, + first_name=first_name, + last_name=last_name, + vcard=vcard ), message="", silent=disable_notification or None, diff --git a/pyrogram/client/types/media/contact.py b/pyrogram/client/types/media/contact.py index f625120c..a89b170c 100644 --- a/pyrogram/client/types/media/contact.py +++ b/pyrogram/client/types/media/contact.py @@ -38,8 +38,16 @@ class Contact(Object): ID = 0xb0700011 - def __init__(self, phone_number: str, first_name: str, last_name: str = None, user_id=None): - self.phone_number = phone_number # string - self.first_name = first_name # string - self.last_name = last_name # flags.0?string - self.user_id = user_id # flags.1?int + def __init__( + self, + phone_number: str, + first_name: str, + last_name: str = None, + vcard: str = None, + user_id: int = None + ): + self.phone_number = phone_number + self.first_name = first_name + self.last_name = last_name + self.vcard = vcard + self.user_id = user_id From a9a9dc3cd36edd3b1da23fb8e5c41ac2036e6998 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 00:24:57 +0200 Subject: [PATCH 056/530] Make download_media raise ValueError in case of non-media messages --- pyrogram/client/methods/download_media.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/methods/download_media.py b/pyrogram/client/methods/download_media.py index 20179d08..e2fd463f 100644 --- a/pyrogram/client/methods/download_media.py +++ b/pyrogram/client/methods/download_media.py @@ -75,6 +75,8 @@ class DownloadMedia(BaseClient): Raises: :class:`Error ` """ + error_message = "This message doesn't contain any downloadable media" + if isinstance(message, pyrogram_types.Message): if message.photo: media = pyrogram_types.Document( @@ -98,7 +100,7 @@ class DownloadMedia(BaseClient): elif message.gif: media = message.gif else: - return + raise ValueError(error_message) elif isinstance(message, ( pyrogram_types.Photo, pyrogram_types.PhotoSize, @@ -126,7 +128,7 @@ class DownloadMedia(BaseClient): mime_type="" ) else: - return + raise ValueError(error_message) done = Event() path = [None] From 8289dff05f2752be937c4a615d2f68e4dc798af6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 00:31:33 +0200 Subject: [PATCH 057/530] Update download_media docstrings --- pyrogram/client/methods/download_media.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyrogram/client/methods/download_media.py b/pyrogram/client/methods/download_media.py index e2fd463f..174feb27 100644 --- a/pyrogram/client/methods/download_media.py +++ b/pyrogram/client/methods/download_media.py @@ -74,6 +74,7 @@ class DownloadMedia(BaseClient): Raises: :class:`Error ` + ``ValueError``: If the message doesn't contain any downloadable media """ error_message = "This message doesn't contain any downloadable media" From 1e727fbb4347283902bb87064a315805eb771adc Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 00:54:13 +0200 Subject: [PATCH 058/530] Add extra attributes to User is_self, is_contact, is_mutual_contact and is_deleted --- pyrogram/client/ext/utils.py | 4 ++++ pyrogram/client/types/user.py | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index eba4e65e..a99ee066 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -129,6 +129,10 @@ def parse_chat_photo(photo): def parse_user(user: types.User) -> pyrogram_types.User or None: return pyrogram_types.User( id=user.id, + is_self=user.is_self, + is_contact=user.contact, + is_mutual_contact=user.mutual_contact, + is_deleted=user.deleted, is_bot=user.bot, first_name=user.first_name, last_name=user.last_name, diff --git a/pyrogram/client/types/user.py b/pyrogram/client/types/user.py index 17510738..9ae5dab2 100644 --- a/pyrogram/client/types/user.py +++ b/pyrogram/client/types/user.py @@ -26,6 +26,18 @@ class User(Object): id (``int``): Unique identifier for this user or bot. + is_self(``bool``): + True, if this user is you yourself. + + is_contact(``bool``): + True, if this user is in your contacts. + + is_mutual_contact(``bool``): + True, if you both have each other's contact. + + is_deleted(``bool``): + True, if this user is deleted. + is_bot (``bool``): True, if this user is a bot. @@ -53,6 +65,10 @@ class User(Object): def __init__( self, id: int, + is_self: bool, + is_contact: bool, + is_mutual_contact: bool, + is_deleted: bool, is_bot: bool, first_name: str, last_name: str = None, @@ -62,6 +78,10 @@ class User(Object): photo=None ): self.id = id + self.is_self = is_self + self.is_contact = is_contact + self.is_mutual_contact = is_mutual_contact + self.is_deleted = is_deleted self.is_bot = is_bot self.first_name = first_name self.last_name = last_name From 72eb7e7a3353ac44a6fa454b0fffe1eff2c24fca Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 14:13:35 +0200 Subject: [PATCH 059/530] Add missing vcard argument on Contact --- pyrogram/client/types/media/contact.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyrogram/client/types/media/contact.py b/pyrogram/client/types/media/contact.py index a89b170c..a59e2047 100644 --- a/pyrogram/client/types/media/contact.py +++ b/pyrogram/client/types/media/contact.py @@ -32,6 +32,9 @@ class Contact(Object): last_name (``str``, *optional*): Contact's last name. + vcard (``str``, *optional*): + Contact's vCard. + user_id (``int``, *optional*): Contact's user identifier in Telegram. """ From 5d9e2f7d7a6a4b59d31d0108b9298c7eee9caa00 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 14:13:51 +0200 Subject: [PATCH 060/530] Clean up Document docstrings --- pyrogram/client/types/media/document.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pyrogram/client/types/media/document.py b/pyrogram/client/types/media/document.py index 076c1934..d87fa666 100644 --- a/pyrogram/client/types/media/document.py +++ b/pyrogram/client/types/media/document.py @@ -20,7 +20,7 @@ from pyrogram.api.core import Object class Document(Object): - """This object represents a general file (as opposed to photos, voice messages and audio files). + """This object represents a general file (as opposed to photos, voice messages, audio files, ...). Args: file_id (``str``): @@ -53,9 +53,9 @@ class Document(Object): file_size: int = None, date: int = None ): - self.file_id = file_id # string - self.thumb = thumb # flags.0?PhotoSize - self.file_name = file_name # flags.1?string - self.mime_type = mime_type # flags.2?string - self.file_size = file_size # flags.3?int - self.date = date # flags.3?int + self.file_id = file_id + self.thumb = thumb + self.file_name = file_name + self.mime_type = mime_type + self.file_size = file_size + self.date = date From 62f575d53ff9bfb37020b499933bb59897c88ebd Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 14:14:19 +0200 Subject: [PATCH 061/530] Clean up GIF and Location comments --- pyrogram/client/types/media/gif.py | 18 +++++++++--------- pyrogram/client/types/media/location.py | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pyrogram/client/types/media/gif.py b/pyrogram/client/types/media/gif.py index 71e975f5..5172aae2 100644 --- a/pyrogram/client/types/media/gif.py +++ b/pyrogram/client/types/media/gif.py @@ -65,12 +65,12 @@ class GIF(Object): file_size: int = None, date: int = None ): - self.file_id = file_id # string - self.thumb = thumb # flags.0?PhotoSize - self.file_name = file_name # flags.1?string - self.mime_type = mime_type # flags.2?string - self.file_size = file_size # flags.3?int - self.date = date # flags.4?int - self.width = width # int - self.height = height # int - self.duration = duration # int + self.file_id = file_id + self.thumb = thumb + self.file_name = file_name + self.mime_type = mime_type + self.file_size = file_size + self.date = date + self.width = width + self.height = height + self.duration = duration diff --git a/pyrogram/client/types/media/location.py b/pyrogram/client/types/media/location.py index 1f5feb00..be8c839f 100644 --- a/pyrogram/client/types/media/location.py +++ b/pyrogram/client/types/media/location.py @@ -33,5 +33,5 @@ class Location(Object): ID = 0xb0700012 def __init__(self, longitude: float, latitude: float): - self.longitude = longitude # double - self.latitude = latitude # double + self.longitude = longitude + self.latitude = latitude From 109e3836cfc25db611f85e51f4a2e34740d73601 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 14:16:08 +0200 Subject: [PATCH 062/530] Clean up Photo and PhotoSize docstrings --- pyrogram/client/types/media/photo.py | 4 ++-- pyrogram/client/types/media/photo_size.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/types/media/photo.py b/pyrogram/client/types/media/photo.py index f5494f13..d9deed76 100644 --- a/pyrogram/client/types/media/photo.py +++ b/pyrogram/client/types/media/photo.py @@ -27,10 +27,10 @@ class Photo(Object): Unique identifier for this photo. date (``int``): - Date the photo was sent in Unix time + Date the photo was sent in Unix time. sizes (List of :obj:`PhotoSize `): - Available sizes of this photo + Available sizes of this photo. """ ID = 0xb0700027 diff --git a/pyrogram/client/types/media/photo_size.py b/pyrogram/client/types/media/photo_size.py index 65691de0..764b046b 100644 --- a/pyrogram/client/types/media/photo_size.py +++ b/pyrogram/client/types/media/photo_size.py @@ -20,7 +20,7 @@ from pyrogram.api.core import Object class PhotoSize(Object): - """This object represents one size of a photo or a file / sticker thumbnail. + """This object represents one size of a photo or a file/sticker thumbnail. Args: file_id (``str``): From bee8d1340b6f99825ba941a418050401b6d8fe59 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 14:16:29 +0200 Subject: [PATCH 063/530] Clean up Sticker, Venue and Video comments --- pyrogram/client/types/media/sticker.py | 22 +++++++++++----------- pyrogram/client/types/media/venue.py | 8 ++++---- pyrogram/client/types/media/video.py | 18 +++++++++--------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/pyrogram/client/types/media/sticker.py b/pyrogram/client/types/media/sticker.py index a5ed9085..2e7ac901 100644 --- a/pyrogram/client/types/media/sticker.py +++ b/pyrogram/client/types/media/sticker.py @@ -73,14 +73,14 @@ class Sticker(Object): set_name: str = None, mask_position=None ): - self.file_id = file_id # string - self.thumb = thumb # flags.0?PhotoSize - self.file_name = file_name # flags.1?string - self.mime_type = mime_type # flags.2?string - self.file_size = file_size # flags.3?int - self.date = date # flags.4?int - self.width = width # int - self.height = height # int - self.emoji = emoji # flags.5?string - self.set_name = set_name # flags.6?string - self.mask_position = mask_position # flags.7?MaskPosition + self.file_id = file_id + self.thumb = thumb + self.file_name = file_name + self.mime_type = mime_type + self.file_size = file_size + self.date = date + self.width = width + self.height = height + self.emoji = emoji + self.set_name = set_name + self.mask_position = mask_position diff --git a/pyrogram/client/types/media/venue.py b/pyrogram/client/types/media/venue.py index 653f0dd3..5d9e387f 100644 --- a/pyrogram/client/types/media/venue.py +++ b/pyrogram/client/types/media/venue.py @@ -40,7 +40,7 @@ class Venue(Object): ID = 0xb0700013 def __init__(self, location, title: str, address: str, foursquare_id: str = None): - self.location = location # Location - self.title = title # string - self.address = address # string - self.foursquare_id = foursquare_id # flags.0?string + self.location = location + self.title = title + self.address = address + self.foursquare_id = foursquare_id diff --git a/pyrogram/client/types/media/video.py b/pyrogram/client/types/media/video.py index b4ffff2b..8b272a2d 100644 --- a/pyrogram/client/types/media/video.py +++ b/pyrogram/client/types/media/video.py @@ -65,12 +65,12 @@ class Video(Object): file_size: int = None, date: int = None ): - self.file_id = file_id # string - self.thumb = thumb # flags.0?PhotoSize - self.file_name = file_name # flags.1?string - self.mime_type = mime_type # flags.2?string - self.file_size = file_size # flags.3?int - self.date = date # flags.4?int - self.width = width # int - self.height = height # int - self.duration = duration # int + self.file_id = file_id + self.thumb = thumb + self.file_name = file_name + self.mime_type = mime_type + self.file_size = file_size + self.date = date + self.width = width + self.height = height + self.duration = duration From fa512a690d3bcb26fa24793fa5a4cc51fead0d7b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 14:17:30 +0200 Subject: [PATCH 064/530] Add download() bound method to Message --- pyrogram/client/types/message.py | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/pyrogram/client/types/message.py b/pyrogram/client/types/message.py index 30b40b63..db13ccd6 100644 --- a/pyrogram/client/types/message.py +++ b/pyrogram/client/types/message.py @@ -571,3 +571,39 @@ class Message(Object): raise ValueError("This button is not supported yet") else: raise ValueError("The message doesn't contain any keyboard") + + def download(self, file_name: str = "", block: bool = True): + """Use this method as a shortcut for: + + .. code-block:: python + + client.download_media(message) + + Example: + .. code-block:: python + + message.download() + + Args: + file_name (``str``, *optional*): + A custom *file_name* to be used instead of the one provided by Telegram. + By default, all files are downloaded in the *downloads* folder in your working directory. + You can also specify a path for downloading files in a custom location: paths that end with "/" + are considered directories. All non-existent folders will be created automatically. + + block (``bool``, *optional*): + Blocks the code execution until the file has been downloaded. + Defaults to True. + + Returns: + On success, the absolute path of the downloaded file as string is returned, None otherwise. + + Raises: + :class:`Error ` + ``ValueError``: If the message doesn't contain any downloadable media + """ + return self._client.download_media( + message=self, + file_name=file_name, + block=block + ) From 82d4a99fd590ef5043581d092fef580e4155e688 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 14:58:01 +0200 Subject: [PATCH 065/530] Add docstrings for Dialog type --- pyrogram/client/types/dialog.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/types/dialog.py b/pyrogram/client/types/dialog.py index 5ad99477..60ffb76c 100644 --- a/pyrogram/client/types/dialog.py +++ b/pyrogram/client/types/dialog.py @@ -20,6 +20,24 @@ from pyrogram.api.core import Object class Dialog(Object): + """This object represents a dialog + + Args: + chat (:obj:`Chat `): + Conversation the dialog belongs to. + + top_message (:obj:`Message `): + The last message sent in the dialog at this time. + + unread_messages_count (``int``): + Amount of unread messages in this dialogs. + + unread_mentions_count (``int``): + Amount of unread messages containing a mention in this dialog. + + unread_mark (``bool``): + True, if the dialog has the unread mark set. + """ ID = 0xb0700028 def __init__(self, @@ -28,7 +46,6 @@ class Dialog(Object): unread_messages_count: int, unread_mentions_count: int, unread_mark: bool): - # TODO docstrings self.chat = chat self.top_message = top_message self.unread_messages_count = unread_messages_count From 5c34e3f08f9acd10a14619e14d49a8a7397f3419 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Jul 2018 14:58:18 +0200 Subject: [PATCH 066/530] Clean up Messages comments --- pyrogram/client/types/messages.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/types/messages.py b/pyrogram/client/types/messages.py index 0d5d0a36..7a2546a9 100644 --- a/pyrogram/client/types/messages.py +++ b/pyrogram/client/types/messages.py @@ -33,5 +33,5 @@ class Messages(Object): ID = 0xb0700026 def __init__(self, total_count: int, messages: list): - self.total_count = total_count # int - self.messages = messages # Vector> + self.total_count = total_count + self.messages = messages From 85e3c05216511625d024cb59e13cc6608e35e175 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 13 Jul 2018 01:10:33 +0200 Subject: [PATCH 067/530] Document Dialogs --- pyrogram/client/types/dialogs.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/types/dialogs.py b/pyrogram/client/types/dialogs.py index 1e1b0cb2..cdf1d951 100644 --- a/pyrogram/client/types/dialogs.py +++ b/pyrogram/client/types/dialogs.py @@ -20,9 +20,17 @@ from pyrogram.api.core import Object class Dialogs(Object): + """This object represents a user's dialogs chunk + + Args: + total_count (``int``): + Total number of dialogs the user has. + + dialogs (List of :obj:`Dialog `): + Requested dialogs. + """ ID = 0xb0700029 def __init__(self, total_count: int, dialogs: list): - # TODO docstrings self.total_count = total_count self.dialogs = dialogs From 84e7bb5c50d3fefb11a04431bf6093ef279c6157 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 14 Jul 2018 00:43:28 +0200 Subject: [PATCH 068/530] Clean up MessageEntity comments --- pyrogram/client/types/message_entity.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/pyrogram/client/types/message_entity.py b/pyrogram/client/types/message_entity.py index f41907c8..db2eee3e 100644 --- a/pyrogram/client/types/message_entity.py +++ b/pyrogram/client/types/message_entity.py @@ -45,9 +45,16 @@ class MessageEntity(Object): ID = 0xb0700004 - def __init__(self, type: str, offset: int, length: int, url: str = None, user=None): - self.type = type # string - self.offset = offset # int - self.length = length # int - self.url = url # flags.0?string - self.user = user # flags.1?User + def __init__( + self, + type: str, + offset: int, + length: int, + url: str = None, + user=None + ): + self.type = type + self.offset = offset + self.length = length + self.url = url + self.user = user From f8d44b8e77bbffd5752ed17dfc311dc371e416fd Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 14 Jul 2018 00:44:50 +0200 Subject: [PATCH 069/530] Document pin_chat_message --- .../client/methods/chats/pin_chat_message.py | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/chats/pin_chat_message.py b/pyrogram/client/methods/chats/pin_chat_message.py index 5f7db61e..e9bc533e 100644 --- a/pyrogram/client/methods/chats/pin_chat_message.py +++ b/pyrogram/client/methods/chats/pin_chat_message.py @@ -22,7 +22,29 @@ from ...ext import BaseClient class PinChatMessage(BaseClient): def pin_chat_message(self, chat_id: int or str, message_id: int, disable_notification: bool = None): - # TODO: Docstrings + """Use this method to pin a message in a supergroup or a channel. + You must be an administrator in the chat for this to work and must have the "can_pin_messages" admin right in + the supergroup or "can_edit_messages" admin right in the channel. + + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For a private channel/supergroup you can use its *t.me/joinchat/* link. + + message_id (``int``): + Identifier of a message to pin. + + disable_notification (``bool``): + Pass True, if it is not necessary to send a notification to all chat members about the new pinned + message. Notifications are always disabled in channels. + + Returns: + True on success. + + Raises: + :class:`Error ` + ``ValueError``: If a chat_id doesn't belong to a supergroup or a channel. + """ peer = self.resolve_peer(chat_id) if isinstance(peer, types.InputPeerChannel): From 15e83e12ca76c4eeac5037adc52578fbb65d51d1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 15 Jul 2018 16:33:12 +0200 Subject: [PATCH 070/530] Document unpin_chat_message --- .../client/methods/chats/unpin_chat_message.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/chats/unpin_chat_message.py b/pyrogram/client/methods/chats/unpin_chat_message.py index 90f94fef..b1eeec79 100644 --- a/pyrogram/client/methods/chats/unpin_chat_message.py +++ b/pyrogram/client/methods/chats/unpin_chat_message.py @@ -22,7 +22,22 @@ from ...ext import BaseClient class UnpinChatMessage(BaseClient): def unpin_chat_message(self, chat_id: int or str): - # TODO: Docstrings + """Use this method to unpin a message in a supergroup or a channel. + You must be an administrator in the chat for this to work and must have the "can_pin_messages" admin + right in the supergroup or "can_edit_messages" admin right in the channel. + + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For a private channel/supergroup you can use its *t.me/joinchat/* link. + + Returns: + True on success. + + Raises: + :class:`Error ` + ``ValueError``: If a chat_id doesn't belong to a supergroup or a channel. + """ peer = self.resolve_peer(chat_id) if isinstance(peer, types.InputPeerChannel): From 98578160f0eb8320102983e79fb45aa517e2efb8 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 15 Jul 2018 16:33:41 +0200 Subject: [PATCH 071/530] Document set_chat_description --- .../methods/chats/set_chat_description.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/chats/set_chat_description.py b/pyrogram/client/methods/chats/set_chat_description.py index 3f3871b1..c9597a62 100644 --- a/pyrogram/client/methods/chats/set_chat_description.py +++ b/pyrogram/client/methods/chats/set_chat_description.py @@ -22,7 +22,24 @@ from ...ext import BaseClient class SetChatDescription(BaseClient): def set_chat_description(self, chat_id: int or str, description: str): - # TODO: Docstrings + """Use this method to change the description of a supergroup or a channel. + You must be an administrator in the chat for this to work and must have the appropriate admin rights. + + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For a private channel/supergroup you can use its *t.me/joinchat/* link. + + description (``str``): + New chat description, 0-255 characters. + + Returns: + True on success. + + Raises: + :class:`Error ` + ``ValueError``: If a chat_id doesn't belong to a supergroup or a channel. + """ peer = self.resolve_peer(chat_id) if isinstance(peer, types.InputPeerChannel): From 3fcf9b9ef6981d1abd113e1a030547ea15aca94d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 15 Jul 2018 16:34:15 +0200 Subject: [PATCH 072/530] Document delete_chat_photo --- .../client/methods/chats/delete_chat_photo.py | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/chats/delete_chat_photo.py b/pyrogram/client/methods/chats/delete_chat_photo.py index 98998fbd..57d90b11 100644 --- a/pyrogram/client/methods/chats/delete_chat_photo.py +++ b/pyrogram/client/methods/chats/delete_chat_photo.py @@ -22,7 +22,26 @@ from ...ext import BaseClient class DeleteChatPhoto(BaseClient): def delete_chat_photo(self, chat_id: int or str): - # TODO: Docstrings + """Use this method to delete a chat photo. + Photos can't be changed for private chats. + You must be an administrator in the chat for this to work and must have the appropriate admin rights. + + Note: + In regular groups (non-supergroups), this method will only work if the "All Members Are Admins" + setting is off. + + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For a private channel/supergroup you can use its *t.me/joinchat/* link. + + Returns: + True on success. + + Raises: + :class:`Error ` + ``ValueError``: If a chat_id belongs to user. + """ peer = self.resolve_peer(chat_id) if isinstance(peer, types.InputPeerChat): From 3fe05b4d2886a8497636e2da32e83a52f62aadd1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 15 Jul 2018 16:34:32 +0200 Subject: [PATCH 073/530] Document set_chat_photo --- .../client/methods/chats/set_chat_photo.py | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/chats/set_chat_photo.py b/pyrogram/client/methods/chats/set_chat_photo.py index b93ba091..d98fefde 100644 --- a/pyrogram/client/methods/chats/set_chat_photo.py +++ b/pyrogram/client/methods/chats/set_chat_photo.py @@ -26,7 +26,29 @@ from ...ext import BaseClient class SetChatPhoto(BaseClient): def set_chat_photo(self, chat_id: int or str, photo: str): - # TODO: Docstrings + """Use this method to set a new profile photo for the chat. + Photos can't be changed for private chats. + You must be an administrator in the chat for this to work and must have the appropriate admin rights. + + Note: + In regular groups (non-supergroups), this method will only work if the "All Members Are Admins" + setting is off. + + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For a private channel/supergroup you can use its *t.me/joinchat/* link. + + photo (``str``): + New chat photo. You can pass a :class:`Photo` id or a file path to upload a new photo. + + Returns: + True on success. + + Raises: + :class:`Error ` + ``ValueError``: If a chat_id belongs to user. + """ peer = self.resolve_peer(chat_id) if os.path.exists(photo): From 5b89a6543714d6655d147ed5fab15118a482d2f1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 15 Jul 2018 16:34:47 +0200 Subject: [PATCH 074/530] Document set_chat_title --- .../client/methods/chats/set_chat_title.py | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/chats/set_chat_title.py b/pyrogram/client/methods/chats/set_chat_title.py index ba732427..f6644a01 100644 --- a/pyrogram/client/methods/chats/set_chat_title.py +++ b/pyrogram/client/methods/chats/set_chat_title.py @@ -22,7 +22,29 @@ from ...ext import BaseClient class SetChatTitle(BaseClient): def set_chat_title(self, chat_id: int or str, title: str): - # TODO: Docstrings + """Use this method to change the title of a chat. + Titles can't be changed for private chats. + You must be an administrator in the chat for this to work and must have the appropriate admin rights. + + Note: + In regular groups (non-supergroups), this method will only work if the "All Members Are Admins" + setting is off. + + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For a private channel/supergroup you can use its *t.me/joinchat/* link. + + title (``str``): + New chat title, 1-255 characters. + + Returns: + True on success. + + Raises: + :class:`Error ` + ``ValueError``: If a chat_id belongs to user. + """ peer = self.resolve_peer(chat_id) if isinstance(peer, types.InputPeerChat): From f1bb20ebf674015ccfaf51f80d961cf4a1ef3f6d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 16 Jul 2018 00:18:46 +0200 Subject: [PATCH 075/530] Add the new methods to docs --- docs/source/pyrogram/Client.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/source/pyrogram/Client.rst b/docs/source/pyrogram/Client.rst index 2fbd5879..bf9ac2ca 100644 --- a/docs/source/pyrogram/Client.rst +++ b/docs/source/pyrogram/Client.rst @@ -67,4 +67,10 @@ Client get_users get_chat get_messages - get_history \ No newline at end of file + get_history + set_chat_photo + delete_chat_photo + set_chat_title + set_chat_description + pin_chat_message + unpin_chat_message \ No newline at end of file From b77771497dbb40d7bebc8440486eb54da523be25 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 17 Jul 2018 09:09:04 +0200 Subject: [PATCH 076/530] Document get_chat_members --- .../client/methods/chats/get_chat_members.py | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/pyrogram/client/methods/chats/get_chat_members.py b/pyrogram/client/methods/chats/get_chat_members.py index a851ef58..99e1c12d 100644 --- a/pyrogram/client/methods/chats/get_chat_members.py +++ b/pyrogram/client/methods/chats/get_chat_members.py @@ -36,6 +36,37 @@ class GetChatMembers(BaseClient): limit: int = 200, query: str = "", filter: str = Filters.ALL): + """Use this method to get the members list of a chat. + + A chat can be either a basic group, a supergroup or a channel. + You must be admin to retrieve the members (also known as "subscribers") list of a channel. + + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For a private channel/supergroup you can use its *t.me/joinchat/* link. + + offset (``int``, *optional*): + Sequential number of the first member to be returned. + Defaults to 0 [1]_. + + limit (``int``, *optional*): + Limits the number of members to be retrieved. + Defaults to 200, which is also the maximum limit allowed per method call. + + query (``str``, *optional*): + Query string to filter members based on their display names and usernames. + Defaults to "" (empty string) [2]_. + + filter (``str``, *optional*): + Filter used to select the kind of members you want to retrieve. Only applicable for supergroups + and channels. It can be any of "all", "kicked", "restricted", "bots", "recent" and "administrators". + Defaults to "all". + + .. [1] On supergroups and channels you can get up to 10,000 members for a single query string. + + .. [2] A query string is applicable only for "all", "kicked" and "restricted" filters only. + """ peer = self.resolve_peer(chat_id) if isinstance(peer, types.InputPeerChat): From de0cc60ec60bb3292bcae32a1eaf3037677d23c5 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 18 Jul 2018 02:14:36 +0200 Subject: [PATCH 077/530] Add USER_NOT_PARTICIPANT error --- compiler/error/source/400_BAD_REQUEST.tsv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/error/source/400_BAD_REQUEST.tsv b/compiler/error/source/400_BAD_REQUEST.tsv index e00c10c5..ed332838 100644 --- a/compiler/error/source/400_BAD_REQUEST.tsv +++ b/compiler/error/source/400_BAD_REQUEST.tsv @@ -65,4 +65,5 @@ PEER_FLOOD The method can't be used because your account is limited MEDIA_CAPTION_TOO_LONG The media caption is longer than 200 characters USER_NOT_MUTUAL_CONTACT The user is not a mutual contact USER_CHANNELS_TOO_MUCH The user is already in too many channels or supergroups -API_ID_PUBLISHED_FLOOD You are using an API key that is limited on the server side \ No newline at end of file +API_ID_PUBLISHED_FLOOD You are using an API key that is limited on the server side +USER_NOT_PARTICIPANT The user is not a member of this chat \ No newline at end of file From e5915505a15516b9014e1beda9e3199e41d458c8 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 19 Jul 2018 23:26:20 +0200 Subject: [PATCH 078/530] Add get_chat_member method --- pyrogram/client/methods/chats/__init__.py | 2 + .../client/methods/chats/get_chat_member.py | 59 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 pyrogram/client/methods/chats/get_chat_member.py diff --git a/pyrogram/client/methods/chats/__init__.py b/pyrogram/client/methods/chats/__init__.py index 038440f6..ce56f16b 100644 --- a/pyrogram/client/methods/chats/__init__.py +++ b/pyrogram/client/methods/chats/__init__.py @@ -19,6 +19,7 @@ from .delete_chat_photo import DeleteChatPhoto from .export_chat_invite_link import ExportChatInviteLink from .get_chat import GetChat +from .get_chat_member import GetChatMember from .get_chat_members import GetChatMembers from .join_chat import JoinChat from .kick_chat_member import KickChatMember @@ -43,6 +44,7 @@ class Chats( RestrictChatMember, PromoteChatMember, GetChatMembers, + GetChatMember, SetChatPhoto, DeleteChatPhoto, SetChatTitle, diff --git a/pyrogram/client/methods/chats/get_chat_member.py b/pyrogram/client/methods/chats/get_chat_member.py new file mode 100644 index 00000000..082d1671 --- /dev/null +++ b/pyrogram/client/methods/chats/get_chat_member.py @@ -0,0 +1,59 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api import functions, types, errors +from ...ext import BaseClient, utils + + +class GetChatMember(BaseClient): + def get_chat_member(self, + chat_id: int or str, + user_id: int or str): + # TODO: docstrings + chat_id = self.resolve_peer(chat_id) + user_id = self.resolve_peer(user_id) + + if isinstance(chat_id, types.InputPeerChat): + full_chat = self.send( + functions.messages.GetFullChat( + chat_id=chat_id.chat_id + ) + ) + + for member in utils.parse_chat_members(full_chat).chat_members: + if member.user.id == user_id.user_id: + return member + else: + raise errors.UserNotParticipant + elif isinstance(chat_id, types.InputPeerChannel): + r = self.send( + functions.channels.GetParticipant( + channel=chat_id, + user_id=user_id + ) + ) + + return utils.parse_chat_members( + types.channels.ChannelParticipants( + count=1, + participants=[r.participant], + users=r.users + ) + ).chat_members[0] + else: + raise ValueError("The chat_id \"{}\" belongs to a user".format(chat_id)) From 418740a3e69021fea78b0591c06c47d80c0ffb15 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 20 Jul 2018 00:08:32 +0200 Subject: [PATCH 079/530] Add get_chat_member and get_chat_members to docs --- docs/source/pyrogram/Client.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/source/pyrogram/Client.rst b/docs/source/pyrogram/Client.rst index bf9ac2ca..fec829f6 100644 --- a/docs/source/pyrogram/Client.rst +++ b/docs/source/pyrogram/Client.rst @@ -73,4 +73,6 @@ Client set_chat_title set_chat_description pin_chat_message - unpin_chat_message \ No newline at end of file + unpin_chat_message + get_chat_member + get_chat_members \ No newline at end of file From 1eaafb8e413bafe40063ef6b040f2fe980d6efab Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 21 Jul 2018 14:09:34 +0200 Subject: [PATCH 080/530] Clearer documentation for get_chat_members --- pyrogram/client/methods/chats/get_chat_members.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/methods/chats/get_chat_members.py b/pyrogram/client/methods/chats/get_chat_members.py index 99e1c12d..cfc9861e 100644 --- a/pyrogram/client/methods/chats/get_chat_members.py +++ b/pyrogram/client/methods/chats/get_chat_members.py @@ -60,12 +60,18 @@ class GetChatMembers(BaseClient): filter (``str``, *optional*): Filter used to select the kind of members you want to retrieve. Only applicable for supergroups - and channels. It can be any of "all", "kicked", "restricted", "bots", "recent" and "administrators". - Defaults to "all". + and channels. It can be any of the followings: + *"all"* - all kind of members, + *"kicked"* - kicked (banned) members only, + *"restricted"* - restricted members only, + *"bots"* - bots only, + *"recent"* - recent members only, + *"administrators"* - chat administrators only. + Defaults to *"all"*. .. [1] On supergroups and channels you can get up to 10,000 members for a single query string. - .. [2] A query string is applicable only for "all", "kicked" and "restricted" filters only. + .. [2] A query string is applicable only for *"all"*, *"kicked"* and *"restricted"* filters only. """ peer = self.resolve_peer(chat_id) From 215f54f32b17fb2e7c1ed577908d4d449fdd567d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 22 Jul 2018 02:07:44 +0200 Subject: [PATCH 081/530] Add get_chat_member documentation --- .../client/methods/chats/get_chat_member.py | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/chats/get_chat_member.py b/pyrogram/client/methods/chats/get_chat_member.py index 082d1671..c4fe0715 100644 --- a/pyrogram/client/methods/chats/get_chat_member.py +++ b/pyrogram/client/methods/chats/get_chat_member.py @@ -24,7 +24,25 @@ class GetChatMember(BaseClient): def get_chat_member(self, chat_id: int or str, user_id: int or str): - # TODO: docstrings + """Use this method to get information about a single member of a chat. + + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For a private channel/supergroup you can use its *t.me/joinchat/* link. + + user_id (``int`` | ``str``):: + Unique identifier (int) or username (str) of the target chat. + For your personal cloud (Saved Messages) you can simply use "me" or "self". + For a contact that exists in your Telegram address book you can use his phone number (str). + For a private channel/supergroup you can use its *t.me/joinchat/* link. + + Returns: + On success, a :obj:`ChatMember ` object is returned. + + Raises: + :class:`Error ` + """ chat_id = self.resolve_peer(chat_id) user_id = self.resolve_peer(user_id) From 73361fef4718d39ec63f8123d9f8ab6c2101fe1c Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 23 Jul 2018 22:52:54 +0200 Subject: [PATCH 082/530] Add missing methods to docs --- docs/source/pyrogram/Client.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/source/pyrogram/Client.rst b/docs/source/pyrogram/Client.rst index fec829f6..96388364 100644 --- a/docs/source/pyrogram/Client.rst +++ b/docs/source/pyrogram/Client.rst @@ -20,6 +20,8 @@ Client run on_message on_callback_query + on_deleted_messages + on_disconnect on_raw_update add_handler remove_handler @@ -31,6 +33,7 @@ Client send_photo send_audio send_document + send_gif send_sticker send_video send_voice @@ -75,4 +78,5 @@ Client pin_chat_message unpin_chat_message get_chat_member - get_chat_members \ No newline at end of file + get_chat_members + get_dialogs \ No newline at end of file From df2f302c721771e8705aca2a94c11cd199ddc01f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 24 Jul 2018 20:43:49 +0200 Subject: [PATCH 083/530] Better organize Client's methods --- docs/source/pyrogram/Client.rst | 203 ++++++++++++++++++++------------ 1 file changed, 128 insertions(+), 75 deletions(-) diff --git a/docs/source/pyrogram/Client.rst b/docs/source/pyrogram/Client.rst index 96388364..642d43d8 100644 --- a/docs/source/pyrogram/Client.rst +++ b/docs/source/pyrogram/Client.rst @@ -1,82 +1,135 @@ Client ====== -.. currentmodule:::: pyrogram.Client +.. currentmodule:: pyrogram.Client + +.. autoclass:: pyrogram.Client + +Utilities +--------- + +.. autosummary:: + :nosignatures: + + start + stop + idle + run + add_handler + remove_handler + send + resolve_peer + download_media + +Decorators +---------- + +.. autosummary:: + :nosignatures: + + on_message + on_callback_query + on_deleted_messages + on_disconnect + on_raw_update + +.. _available-methods: + +Messages +-------- + +.. autosummary:: + :nosignatures: + + send_message + forward_messages + send_photo + send_audio + send_document + send_sticker + send_video + send_gif + send_voice + send_video_note + send_media_group + send_location + send_venue + send_contact + send_chat_action + edit_message_text + edit_message_caption + edit_message_reply_markup + delete_messages + get_messages + get_history + get_dialogs + +Chats +----- + +.. autosummary:: + :nosignatures: + + join_chat + leave_chat + kick_chat_member + unban_chat_member + restrict_chat_member + promote_chat_member + export_chat_invite_link + set_chat_photo + delete_chat_photo + set_chat_title + set_chat_description + pin_chat_message + unpin_chat_message + get_chat + get_chat_member + get_chat_members + +Users +----- + +.. autosummary:: + :nosignatures: + + get_me + get_users + get_user_profile_photos + delete_profile_photos + +Contacts +-------- + +.. autosummary:: + :nosignatures: + + add_contacts + get_contacts + delete_contacts + +Password +-------- + +.. autosummary:: + :nosignatures: + + enable_cloud_password + change_cloud_password + remove_cloud_password + +Bots +---- + +.. autosummary:: + :nosignatures: + + get_inline_bot_results + send_inline_bot_result + answer_callback_query + request_callback_answer + .. autoclass:: pyrogram.Client :inherited-members: :members: - - .. _available-methods: - - **Available methods** - - .. autosummary:: - :nosignatures: - - start - stop - idle - run - on_message - on_callback_query - on_deleted_messages - on_disconnect - on_raw_update - add_handler - remove_handler - send - resolve_peer - get_me - send_message - forward_messages - send_photo - send_audio - send_document - send_gif - send_sticker - send_video - send_voice - send_video_note - send_media_group - send_location - send_venue - send_contact - send_chat_action - download_media - get_user_profile_photos - delete_profile_photos - edit_message_text - edit_message_caption - edit_message_reply_markup - delete_messages - join_chat - leave_chat - export_chat_invite_link - enable_cloud_password - change_cloud_password - remove_cloud_password - kick_chat_member - unban_chat_member - restrict_chat_member - promote_chat_member - add_contacts - get_contacts - delete_contacts - get_inline_bot_results - send_inline_bot_result - answer_callback_query - request_callback_answer - get_users - get_chat - get_messages - get_history - set_chat_photo - delete_chat_photo - set_chat_title - set_chat_description - pin_chat_message - unpin_chat_message - get_chat_member - get_chat_members - get_dialogs \ No newline at end of file From 0c8278259028be87291626aa4e32de7c37fa4a30 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 24 Jul 2018 20:46:25 +0200 Subject: [PATCH 084/530] Don't show sub-sections --- docs/source/pyrogram/index.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/source/pyrogram/index.rst b/docs/source/pyrogram/index.rst index c272bc42..af8b281a 100644 --- a/docs/source/pyrogram/index.rst +++ b/docs/source/pyrogram/index.rst @@ -7,6 +7,8 @@ In this section you can find a detailed description of the Pyrogram package and after the well established `Telegram Bot API`_ methods, thus offering a familiar look to Bot developers. .. toctree:: + :maxdepth: 1 + Client types/index handlers/index From 5546765c4f04c0af99ab3653a0fef3c8606c4bd0 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 25 Jul 2018 22:22:57 +0200 Subject: [PATCH 085/530] Delete Types doc files --- docs/source/pyrogram/types/Audio.rst | 5 ----- docs/source/pyrogram/types/CallbackQuery.rst | 5 ----- docs/source/pyrogram/types/Chat.rst | 5 ----- docs/source/pyrogram/types/ChatMember.rst | 5 ----- docs/source/pyrogram/types/ChatPhoto.rst | 5 ----- docs/source/pyrogram/types/Contact.rst | 5 ----- docs/source/pyrogram/types/Document.rst | 5 ----- docs/source/pyrogram/types/GIF.rst | 5 ----- docs/source/pyrogram/types/InputMediaPhoto.rst | 5 ----- docs/source/pyrogram/types/InputMediaVideo.rst | 5 ----- docs/source/pyrogram/types/InputPhoneContact.rst | 5 ----- docs/source/pyrogram/types/Location.rst | 5 ----- docs/source/pyrogram/types/Message.rst | 5 ----- docs/source/pyrogram/types/MessageEntity.rst | 5 ----- docs/source/pyrogram/types/Messages.rst | 5 ----- docs/source/pyrogram/types/Photo.rst | 5 ----- docs/source/pyrogram/types/PhotoSize.rst | 5 ----- docs/source/pyrogram/types/Sticker.rst | 5 ----- docs/source/pyrogram/types/Update.rst | 5 ----- docs/source/pyrogram/types/User.rst | 5 ----- docs/source/pyrogram/types/UserProfilePhotos.rst | 5 ----- docs/source/pyrogram/types/Venue.rst | 5 ----- docs/source/pyrogram/types/Video.rst | 5 ----- docs/source/pyrogram/types/VideoNote.rst | 5 ----- docs/source/pyrogram/types/Voice.rst | 5 ----- docs/source/pyrogram/types/reply_markup/ForceReply.rst | 5 ----- .../pyrogram/types/reply_markup/InlineKeyboardButton.rst | 5 ----- .../pyrogram/types/reply_markup/InlineKeyboardMarkup.rst | 5 ----- docs/source/pyrogram/types/reply_markup/KeyboardButton.rst | 5 ----- .../pyrogram/types/reply_markup/ReplyKeyboardMarkup.rst | 5 ----- .../pyrogram/types/reply_markup/ReplyKeyboardRemove.rst | 5 ----- 31 files changed, 155 deletions(-) delete mode 100644 docs/source/pyrogram/types/Audio.rst delete mode 100644 docs/source/pyrogram/types/CallbackQuery.rst delete mode 100644 docs/source/pyrogram/types/Chat.rst delete mode 100644 docs/source/pyrogram/types/ChatMember.rst delete mode 100644 docs/source/pyrogram/types/ChatPhoto.rst delete mode 100644 docs/source/pyrogram/types/Contact.rst delete mode 100644 docs/source/pyrogram/types/Document.rst delete mode 100644 docs/source/pyrogram/types/GIF.rst delete mode 100644 docs/source/pyrogram/types/InputMediaPhoto.rst delete mode 100644 docs/source/pyrogram/types/InputMediaVideo.rst delete mode 100644 docs/source/pyrogram/types/InputPhoneContact.rst delete mode 100644 docs/source/pyrogram/types/Location.rst delete mode 100644 docs/source/pyrogram/types/Message.rst delete mode 100644 docs/source/pyrogram/types/MessageEntity.rst delete mode 100644 docs/source/pyrogram/types/Messages.rst delete mode 100644 docs/source/pyrogram/types/Photo.rst delete mode 100644 docs/source/pyrogram/types/PhotoSize.rst delete mode 100644 docs/source/pyrogram/types/Sticker.rst delete mode 100644 docs/source/pyrogram/types/Update.rst delete mode 100644 docs/source/pyrogram/types/User.rst delete mode 100644 docs/source/pyrogram/types/UserProfilePhotos.rst delete mode 100644 docs/source/pyrogram/types/Venue.rst delete mode 100644 docs/source/pyrogram/types/Video.rst delete mode 100644 docs/source/pyrogram/types/VideoNote.rst delete mode 100644 docs/source/pyrogram/types/Voice.rst delete mode 100644 docs/source/pyrogram/types/reply_markup/ForceReply.rst delete mode 100644 docs/source/pyrogram/types/reply_markup/InlineKeyboardButton.rst delete mode 100644 docs/source/pyrogram/types/reply_markup/InlineKeyboardMarkup.rst delete mode 100644 docs/source/pyrogram/types/reply_markup/KeyboardButton.rst delete mode 100644 docs/source/pyrogram/types/reply_markup/ReplyKeyboardMarkup.rst delete mode 100644 docs/source/pyrogram/types/reply_markup/ReplyKeyboardRemove.rst diff --git a/docs/source/pyrogram/types/Audio.rst b/docs/source/pyrogram/types/Audio.rst deleted file mode 100644 index 66ccb32a..00000000 --- a/docs/source/pyrogram/types/Audio.rst +++ /dev/null @@ -1,5 +0,0 @@ -Audio -===== - -.. autoclass:: pyrogram.Audio - :members: diff --git a/docs/source/pyrogram/types/CallbackQuery.rst b/docs/source/pyrogram/types/CallbackQuery.rst deleted file mode 100644 index 9ce0a578..00000000 --- a/docs/source/pyrogram/types/CallbackQuery.rst +++ /dev/null @@ -1,5 +0,0 @@ -CallbackQuery -============= - -.. autoclass:: pyrogram.CallbackQuery - :members: diff --git a/docs/source/pyrogram/types/Chat.rst b/docs/source/pyrogram/types/Chat.rst deleted file mode 100644 index 50a26838..00000000 --- a/docs/source/pyrogram/types/Chat.rst +++ /dev/null @@ -1,5 +0,0 @@ -Chat -==== - -.. autoclass:: pyrogram.Chat - :members: diff --git a/docs/source/pyrogram/types/ChatMember.rst b/docs/source/pyrogram/types/ChatMember.rst deleted file mode 100644 index 0c4f45a3..00000000 --- a/docs/source/pyrogram/types/ChatMember.rst +++ /dev/null @@ -1,5 +0,0 @@ -ChatMember -========== - -.. autoclass:: pyrogram.ChatMember - :members: diff --git a/docs/source/pyrogram/types/ChatPhoto.rst b/docs/source/pyrogram/types/ChatPhoto.rst deleted file mode 100644 index 2b6b49e5..00000000 --- a/docs/source/pyrogram/types/ChatPhoto.rst +++ /dev/null @@ -1,5 +0,0 @@ -ChatPhoto -========= - -.. autoclass:: pyrogram.ChatPhoto - :members: diff --git a/docs/source/pyrogram/types/Contact.rst b/docs/source/pyrogram/types/Contact.rst deleted file mode 100644 index 7d8b0fb2..00000000 --- a/docs/source/pyrogram/types/Contact.rst +++ /dev/null @@ -1,5 +0,0 @@ -Contact -======= - -.. autoclass:: pyrogram.Contact - :members: diff --git a/docs/source/pyrogram/types/Document.rst b/docs/source/pyrogram/types/Document.rst deleted file mode 100644 index 03a57753..00000000 --- a/docs/source/pyrogram/types/Document.rst +++ /dev/null @@ -1,5 +0,0 @@ -Document -======== - -.. autoclass:: pyrogram.Document - :members: diff --git a/docs/source/pyrogram/types/GIF.rst b/docs/source/pyrogram/types/GIF.rst deleted file mode 100644 index 501f187f..00000000 --- a/docs/source/pyrogram/types/GIF.rst +++ /dev/null @@ -1,5 +0,0 @@ -GIF -=== - -.. autoclass:: pyrogram.GIF - :members: diff --git a/docs/source/pyrogram/types/InputMediaPhoto.rst b/docs/source/pyrogram/types/InputMediaPhoto.rst deleted file mode 100644 index aaf8548f..00000000 --- a/docs/source/pyrogram/types/InputMediaPhoto.rst +++ /dev/null @@ -1,5 +0,0 @@ -InputMediaPhoto -=============== - -.. autoclass:: pyrogram.InputMediaPhoto - :members: diff --git a/docs/source/pyrogram/types/InputMediaVideo.rst b/docs/source/pyrogram/types/InputMediaVideo.rst deleted file mode 100644 index 4df4d128..00000000 --- a/docs/source/pyrogram/types/InputMediaVideo.rst +++ /dev/null @@ -1,5 +0,0 @@ -InputMediaVideo -=============== - -.. autoclass:: pyrogram.InputMediaVideo - :members: diff --git a/docs/source/pyrogram/types/InputPhoneContact.rst b/docs/source/pyrogram/types/InputPhoneContact.rst deleted file mode 100644 index bc4e38bc..00000000 --- a/docs/source/pyrogram/types/InputPhoneContact.rst +++ /dev/null @@ -1,5 +0,0 @@ -InputPhoneContact -================= - -.. autoclass:: pyrogram.InputPhoneContact - :members: diff --git a/docs/source/pyrogram/types/Location.rst b/docs/source/pyrogram/types/Location.rst deleted file mode 100644 index 99aeaa70..00000000 --- a/docs/source/pyrogram/types/Location.rst +++ /dev/null @@ -1,5 +0,0 @@ -Location -======== - -.. autoclass:: pyrogram.Location - :members: diff --git a/docs/source/pyrogram/types/Message.rst b/docs/source/pyrogram/types/Message.rst deleted file mode 100644 index 432693fd..00000000 --- a/docs/source/pyrogram/types/Message.rst +++ /dev/null @@ -1,5 +0,0 @@ -Message -======= - -.. autoclass:: pyrogram.Message - :members: diff --git a/docs/source/pyrogram/types/MessageEntity.rst b/docs/source/pyrogram/types/MessageEntity.rst deleted file mode 100644 index 4f2f3be0..00000000 --- a/docs/source/pyrogram/types/MessageEntity.rst +++ /dev/null @@ -1,5 +0,0 @@ -MessageEntity -============= - -.. autoclass:: pyrogram.MessageEntity - :members: diff --git a/docs/source/pyrogram/types/Messages.rst b/docs/source/pyrogram/types/Messages.rst deleted file mode 100644 index f740d092..00000000 --- a/docs/source/pyrogram/types/Messages.rst +++ /dev/null @@ -1,5 +0,0 @@ -Messages -======== - -.. autoclass:: pyrogram.Messages - :members: diff --git a/docs/source/pyrogram/types/Photo.rst b/docs/source/pyrogram/types/Photo.rst deleted file mode 100644 index 78fe13f4..00000000 --- a/docs/source/pyrogram/types/Photo.rst +++ /dev/null @@ -1,5 +0,0 @@ -Photo -===== - -.. autoclass:: pyrogram.Photo - :members: diff --git a/docs/source/pyrogram/types/PhotoSize.rst b/docs/source/pyrogram/types/PhotoSize.rst deleted file mode 100644 index 7ced6190..00000000 --- a/docs/source/pyrogram/types/PhotoSize.rst +++ /dev/null @@ -1,5 +0,0 @@ -PhotoSize -========= - -.. autoclass:: pyrogram.PhotoSize - :members: diff --git a/docs/source/pyrogram/types/Sticker.rst b/docs/source/pyrogram/types/Sticker.rst deleted file mode 100644 index d2646c99..00000000 --- a/docs/source/pyrogram/types/Sticker.rst +++ /dev/null @@ -1,5 +0,0 @@ -Sticker -======= - -.. autoclass:: pyrogram.Sticker - :members: diff --git a/docs/source/pyrogram/types/Update.rst b/docs/source/pyrogram/types/Update.rst deleted file mode 100644 index 1fb22b00..00000000 --- a/docs/source/pyrogram/types/Update.rst +++ /dev/null @@ -1,5 +0,0 @@ -Update -====== - -.. autoclass:: pyrogram.Update - :members: diff --git a/docs/source/pyrogram/types/User.rst b/docs/source/pyrogram/types/User.rst deleted file mode 100644 index f0074a93..00000000 --- a/docs/source/pyrogram/types/User.rst +++ /dev/null @@ -1,5 +0,0 @@ -User -==== - -.. autoclass:: pyrogram.User - :members: diff --git a/docs/source/pyrogram/types/UserProfilePhotos.rst b/docs/source/pyrogram/types/UserProfilePhotos.rst deleted file mode 100644 index 8c9c4d75..00000000 --- a/docs/source/pyrogram/types/UserProfilePhotos.rst +++ /dev/null @@ -1,5 +0,0 @@ -UserProfilePhotos -================= - -.. autoclass:: pyrogram.UserProfilePhotos - :members: diff --git a/docs/source/pyrogram/types/Venue.rst b/docs/source/pyrogram/types/Venue.rst deleted file mode 100644 index 471ab026..00000000 --- a/docs/source/pyrogram/types/Venue.rst +++ /dev/null @@ -1,5 +0,0 @@ -Venue -===== - -.. autoclass:: pyrogram.Venue - :members: diff --git a/docs/source/pyrogram/types/Video.rst b/docs/source/pyrogram/types/Video.rst deleted file mode 100644 index de28ae1c..00000000 --- a/docs/source/pyrogram/types/Video.rst +++ /dev/null @@ -1,5 +0,0 @@ -Video -===== - -.. autoclass:: pyrogram.Video - :members: diff --git a/docs/source/pyrogram/types/VideoNote.rst b/docs/source/pyrogram/types/VideoNote.rst deleted file mode 100644 index 69667454..00000000 --- a/docs/source/pyrogram/types/VideoNote.rst +++ /dev/null @@ -1,5 +0,0 @@ -VideoNote -========= - -.. autoclass:: pyrogram.VideoNote - :members: diff --git a/docs/source/pyrogram/types/Voice.rst b/docs/source/pyrogram/types/Voice.rst deleted file mode 100644 index c80ce124..00000000 --- a/docs/source/pyrogram/types/Voice.rst +++ /dev/null @@ -1,5 +0,0 @@ -Voice -===== - -.. autoclass:: pyrogram.Voice - :members: diff --git a/docs/source/pyrogram/types/reply_markup/ForceReply.rst b/docs/source/pyrogram/types/reply_markup/ForceReply.rst deleted file mode 100644 index db70a834..00000000 --- a/docs/source/pyrogram/types/reply_markup/ForceReply.rst +++ /dev/null @@ -1,5 +0,0 @@ -ForceReply -========== - -.. autoclass:: pyrogram.ForceReply - :members: diff --git a/docs/source/pyrogram/types/reply_markup/InlineKeyboardButton.rst b/docs/source/pyrogram/types/reply_markup/InlineKeyboardButton.rst deleted file mode 100644 index 2e536596..00000000 --- a/docs/source/pyrogram/types/reply_markup/InlineKeyboardButton.rst +++ /dev/null @@ -1,5 +0,0 @@ -InlineKeyboardButton -==================== - -.. autoclass:: pyrogram.InlineKeyboardButton - :members: diff --git a/docs/source/pyrogram/types/reply_markup/InlineKeyboardMarkup.rst b/docs/source/pyrogram/types/reply_markup/InlineKeyboardMarkup.rst deleted file mode 100644 index 7ffa2582..00000000 --- a/docs/source/pyrogram/types/reply_markup/InlineKeyboardMarkup.rst +++ /dev/null @@ -1,5 +0,0 @@ -InlineKeyboardMarkup -==================== - -.. autoclass:: pyrogram.InlineKeyboardMarkup - :members: diff --git a/docs/source/pyrogram/types/reply_markup/KeyboardButton.rst b/docs/source/pyrogram/types/reply_markup/KeyboardButton.rst deleted file mode 100644 index 69488656..00000000 --- a/docs/source/pyrogram/types/reply_markup/KeyboardButton.rst +++ /dev/null @@ -1,5 +0,0 @@ -KeyboardButton -============== - -.. autoclass:: pyrogram.KeyboardButton - :members: diff --git a/docs/source/pyrogram/types/reply_markup/ReplyKeyboardMarkup.rst b/docs/source/pyrogram/types/reply_markup/ReplyKeyboardMarkup.rst deleted file mode 100644 index 2b1e6d16..00000000 --- a/docs/source/pyrogram/types/reply_markup/ReplyKeyboardMarkup.rst +++ /dev/null @@ -1,5 +0,0 @@ -ReplyKeyboardMarkup -=================== - -.. autoclass:: pyrogram.ReplyKeyboardMarkup - :members: diff --git a/docs/source/pyrogram/types/reply_markup/ReplyKeyboardRemove.rst b/docs/source/pyrogram/types/reply_markup/ReplyKeyboardRemove.rst deleted file mode 100644 index 4146d564..00000000 --- a/docs/source/pyrogram/types/reply_markup/ReplyKeyboardRemove.rst +++ /dev/null @@ -1,5 +0,0 @@ -ReplyKeyboardRemove -=================== - -.. autoclass:: pyrogram.ReplyKeyboardRemove - :members: From fb9fa41c37ad86e108602c17df145411a7427e59 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 25 Jul 2018 22:23:17 +0200 Subject: [PATCH 086/530] Add new Types index page --- docs/source/pyrogram/types/index.rst | 170 ++++++++++++++++++++++++--- 1 file changed, 155 insertions(+), 15 deletions(-) diff --git a/docs/source/pyrogram/types/index.rst b/docs/source/pyrogram/types/index.rst index ff3de94e..d93ecceb 100644 --- a/docs/source/pyrogram/types/index.rst +++ b/docs/source/pyrogram/types/index.rst @@ -1,16 +1,34 @@ -:tocdepth: 1 - Types ===== -.. toctree:: +.. currentmodule:: pyrogram + +Users & Chats +------------- + +.. autosummary:: + :nosignatures: + User Chat + ChatPhoto + ChatMember + ChatMembers + Dialog + Dialogs + +Messages & Media +---------------- + +.. autosummary:: + :nosignatures: + Message - MessageEntity Messages + MessageEntity Photo PhotoSize + UserProfilePhotos Audio Document GIF @@ -20,17 +38,139 @@ Types Contact Location Venue - UserProfilePhotos - ChatPhoto - ChatMember + Sticker + +Bots +---- + +.. autosummary:: + :nosignatures: + + ReplyKeyboardMarkup + KeyboardButton + ReplyKeyboardRemove + InlineKeyboardMarkup + InlineKeyboardButton + ForceReply + CallbackQuery + +Input Media +----------- + +.. autosummary:: + :nosignatures: + InputMediaPhoto InputMediaVideo InputPhoneContact - Sticker - reply_markup/ForceReply - reply_markup/InlineKeyboardButton - reply_markup/InlineKeyboardMarkup - reply_markup/KeyboardButton - reply_markup/ReplyKeyboardMarkup - reply_markup/ReplyKeyboardRemove - CallbackQuery \ No newline at end of file + +.. User & Chats + ------------ + +.. autoclass:: User + :members: + +.. autoclass:: Chat + :members: + +.. autoclass:: ChatPhoto + :members: + +.. autoclass:: ChatMember + :members: + +.. autoclass:: ChatMembers + :members: + +.. autoclass:: Dialog + :members: + +.. autoclass:: Dialogs + :members: + +.. Messages & Media + ---------------- + +.. autoclass:: Message + :members: + +.. autoclass:: Messages + :members: + +.. autoclass:: MessageEntity + :members: + +.. autoclass:: Photo + :members: + +.. autoclass:: PhotoSize + :members: + +.. autoclass:: UserProfilePhotos + :members: + +.. autoclass:: Audio + :members: + +.. autoclass:: Document + :members: + +.. autoclass:: GIF + :members: + +.. autoclass:: Video + :members: + +.. autoclass:: Voice + :members: + +.. autoclass:: VideoNote + :members: + +.. autoclass:: Contact + :members: + +.. autoclass:: Location + :members: + +.. autoclass:: Venue + :members: + +.. autoclass:: Sticker + :members: + +.. Bots + ---- + +.. autoclass:: ReplyKeyboardMarkup + :members: + +.. autoclass:: KeyboardButton + :members: + +.. autoclass:: ReplyKeyboardRemove + :members: + +.. autoclass:: InlineKeyboardMarkup + :members: + +.. autoclass:: InlineKeyboardButton + :members: + +.. autoclass:: ForceReply + :members: + +.. autoclass:: CallbackQuery + :members: + +.. Input Media + ----------- + +.. autoclass:: InputMediaPhoto + :members: + +.. autoclass:: InputMediaVideo + :members: + +.. autoclass:: InputPhoneContact + :members: From e9cba4609a8b6b97ecde2565dba0f1e45162d47e Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 26 Jul 2018 19:32:12 +0200 Subject: [PATCH 087/530] Update get_chat_member docstrings --- pyrogram/client/methods/chats/get_chat_member.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/methods/chats/get_chat_member.py b/pyrogram/client/methods/chats/get_chat_member.py index c4fe0715..be2a77b9 100644 --- a/pyrogram/client/methods/chats/get_chat_member.py +++ b/pyrogram/client/methods/chats/get_chat_member.py @@ -24,7 +24,7 @@ class GetChatMember(BaseClient): def get_chat_member(self, chat_id: int or str, user_id: int or str): - """Use this method to get information about a single member of a chat. + """Use this method to get information about one member of a chat. Args: chat_id (``int`` | ``str``): From f4175b041c34cc42715ce0488fad83a87867407a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 26 Jul 2018 19:34:21 +0200 Subject: [PATCH 088/530] Document ChatMembers --- pyrogram/client/types/chat_members.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/types/chat_members.py b/pyrogram/client/types/chat_members.py index 658a3086..622f8abc 100644 --- a/pyrogram/client/types/chat_members.py +++ b/pyrogram/client/types/chat_members.py @@ -20,7 +20,15 @@ from pyrogram.api.core import Object class ChatMembers(Object): - # TODO: Docstrings + """This object contains information about the members list of a chat. + + Args: + total_count (``int``): + Total number of members the chat has. + + chat_members (List of :obj:`ChatMember `): + Requested chat members. + """ ID = 0xb0700030 From 32468e5ab0359f2eba1d79f29b0c66210520f976 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 27 Jul 2018 00:40:08 +0200 Subject: [PATCH 089/530] Remove hints about using t.me/joinchat/ links as chat ids Such links don't work reliably with the current implementation --- pyrogram/client/methods/bots/request_callback_answer.py | 1 - pyrogram/client/methods/bots/send_inline_bot_result.py | 1 - pyrogram/client/methods/chats/delete_chat_photo.py | 1 - pyrogram/client/methods/chats/get_chat.py | 1 - pyrogram/client/methods/chats/get_chat_member.py | 2 -- pyrogram/client/methods/chats/get_chat_members.py | 1 - pyrogram/client/methods/chats/kick_chat_member.py | 1 - pyrogram/client/methods/chats/pin_chat_message.py | 1 - pyrogram/client/methods/chats/promote_chat_member.py | 1 - pyrogram/client/methods/chats/restrict_chat_member.py | 1 - pyrogram/client/methods/chats/set_chat_description.py | 1 - pyrogram/client/methods/chats/set_chat_photo.py | 1 - pyrogram/client/methods/chats/set_chat_title.py | 1 - pyrogram/client/methods/chats/unban_chat_member.py | 1 - pyrogram/client/methods/chats/unpin_chat_message.py | 1 - pyrogram/client/methods/messages/delete_messages.py | 1 - pyrogram/client/methods/messages/edit_message_caption.py | 1 - pyrogram/client/methods/messages/edit_message_reply_markup.py | 1 - pyrogram/client/methods/messages/edit_message_text.py | 1 - pyrogram/client/methods/messages/forward_messages.py | 2 -- pyrogram/client/methods/messages/get_history.py | 1 - pyrogram/client/methods/messages/get_messages.py | 1 - pyrogram/client/methods/messages/send_audio.py | 1 - pyrogram/client/methods/messages/send_chat_action.py | 1 - pyrogram/client/methods/messages/send_contact.py | 1 - pyrogram/client/methods/messages/send_document.py | 1 - pyrogram/client/methods/messages/send_gif.py | 1 - pyrogram/client/methods/messages/send_location.py | 1 - pyrogram/client/methods/messages/send_media_group.py | 1 - pyrogram/client/methods/messages/send_message.py | 1 - pyrogram/client/methods/messages/send_photo.py | 1 - pyrogram/client/methods/messages/send_sticker.py | 1 - pyrogram/client/methods/messages/send_venue.py | 1 - pyrogram/client/methods/messages/send_video.py | 1 - pyrogram/client/methods/messages/send_video_note.py | 1 - pyrogram/client/methods/messages/send_voice.py | 1 - pyrogram/client/methods/users/get_user_profile_photos.py | 1 - pyrogram/client/types/message.py | 1 - 38 files changed, 40 deletions(-) diff --git a/pyrogram/client/methods/bots/request_callback_answer.py b/pyrogram/client/methods/bots/request_callback_answer.py index 52dab58c..b242f4af 100644 --- a/pyrogram/client/methods/bots/request_callback_answer.py +++ b/pyrogram/client/methods/bots/request_callback_answer.py @@ -33,7 +33,6 @@ class RequestCallbackAnswer(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. message_id (``int``): The message id the inline keyboard is attached on. diff --git a/pyrogram/client/methods/bots/send_inline_bot_result.py b/pyrogram/client/methods/bots/send_inline_bot_result.py index c194298a..bdfcc65c 100644 --- a/pyrogram/client/methods/bots/send_inline_bot_result.py +++ b/pyrogram/client/methods/bots/send_inline_bot_result.py @@ -35,7 +35,6 @@ class SendInlineBotResult(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. query_id (``int``): Unique identifier for the answered query. diff --git a/pyrogram/client/methods/chats/delete_chat_photo.py b/pyrogram/client/methods/chats/delete_chat_photo.py index 57d90b11..31e02923 100644 --- a/pyrogram/client/methods/chats/delete_chat_photo.py +++ b/pyrogram/client/methods/chats/delete_chat_photo.py @@ -33,7 +33,6 @@ class DeleteChatPhoto(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. Returns: True on success. diff --git a/pyrogram/client/methods/chats/get_chat.py b/pyrogram/client/methods/chats/get_chat.py index 588ac468..5cb22db1 100644 --- a/pyrogram/client/methods/chats/get_chat.py +++ b/pyrogram/client/methods/chats/get_chat.py @@ -28,7 +28,6 @@ class GetChat(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. Returns: On success, a :obj:`Chat ` object is returned. diff --git a/pyrogram/client/methods/chats/get_chat_member.py b/pyrogram/client/methods/chats/get_chat_member.py index be2a77b9..51e07f91 100644 --- a/pyrogram/client/methods/chats/get_chat_member.py +++ b/pyrogram/client/methods/chats/get_chat_member.py @@ -29,13 +29,11 @@ class GetChatMember(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. user_id (``int`` | ``str``):: Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. Returns: On success, a :obj:`ChatMember ` object is returned. diff --git a/pyrogram/client/methods/chats/get_chat_members.py b/pyrogram/client/methods/chats/get_chat_members.py index cfc9861e..818c667e 100644 --- a/pyrogram/client/methods/chats/get_chat_members.py +++ b/pyrogram/client/methods/chats/get_chat_members.py @@ -44,7 +44,6 @@ class GetChatMembers(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. offset (``int``, *optional*): Sequential number of the first member to be returned. diff --git a/pyrogram/client/methods/chats/kick_chat_member.py b/pyrogram/client/methods/chats/kick_chat_member.py index 6275718c..1c849285 100644 --- a/pyrogram/client/methods/chats/kick_chat_member.py +++ b/pyrogram/client/methods/chats/kick_chat_member.py @@ -38,7 +38,6 @@ class KickChatMember(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. user_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target user. diff --git a/pyrogram/client/methods/chats/pin_chat_message.py b/pyrogram/client/methods/chats/pin_chat_message.py index e9bc533e..eb653f3c 100644 --- a/pyrogram/client/methods/chats/pin_chat_message.py +++ b/pyrogram/client/methods/chats/pin_chat_message.py @@ -29,7 +29,6 @@ class PinChatMessage(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. message_id (``int``): Identifier of a message to pin. diff --git a/pyrogram/client/methods/chats/promote_chat_member.py b/pyrogram/client/methods/chats/promote_chat_member.py index eb70578a..134d1ba3 100644 --- a/pyrogram/client/methods/chats/promote_chat_member.py +++ b/pyrogram/client/methods/chats/promote_chat_member.py @@ -39,7 +39,6 @@ class PromoteChatMember(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. user_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target user. diff --git a/pyrogram/client/methods/chats/restrict_chat_member.py b/pyrogram/client/methods/chats/restrict_chat_member.py index ae1e4d9c..fb11a989 100644 --- a/pyrogram/client/methods/chats/restrict_chat_member.py +++ b/pyrogram/client/methods/chats/restrict_chat_member.py @@ -36,7 +36,6 @@ class RestrictChatMember(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. user_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target user. diff --git a/pyrogram/client/methods/chats/set_chat_description.py b/pyrogram/client/methods/chats/set_chat_description.py index c9597a62..f9b5c7a2 100644 --- a/pyrogram/client/methods/chats/set_chat_description.py +++ b/pyrogram/client/methods/chats/set_chat_description.py @@ -28,7 +28,6 @@ class SetChatDescription(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. description (``str``): New chat description, 0-255 characters. diff --git a/pyrogram/client/methods/chats/set_chat_photo.py b/pyrogram/client/methods/chats/set_chat_photo.py index d98fefde..224a8d99 100644 --- a/pyrogram/client/methods/chats/set_chat_photo.py +++ b/pyrogram/client/methods/chats/set_chat_photo.py @@ -37,7 +37,6 @@ class SetChatPhoto(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. photo (``str``): New chat photo. You can pass a :class:`Photo` id or a file path to upload a new photo. diff --git a/pyrogram/client/methods/chats/set_chat_title.py b/pyrogram/client/methods/chats/set_chat_title.py index f6644a01..98da8737 100644 --- a/pyrogram/client/methods/chats/set_chat_title.py +++ b/pyrogram/client/methods/chats/set_chat_title.py @@ -33,7 +33,6 @@ class SetChatTitle(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. title (``str``): New chat title, 1-255 characters. diff --git a/pyrogram/client/methods/chats/unban_chat_member.py b/pyrogram/client/methods/chats/unban_chat_member.py index b0916eb4..e191a0b7 100644 --- a/pyrogram/client/methods/chats/unban_chat_member.py +++ b/pyrogram/client/methods/chats/unban_chat_member.py @@ -31,7 +31,6 @@ class UnbanChatMember(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. user_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target user. diff --git a/pyrogram/client/methods/chats/unpin_chat_message.py b/pyrogram/client/methods/chats/unpin_chat_message.py index b1eeec79..4b0ee46b 100644 --- a/pyrogram/client/methods/chats/unpin_chat_message.py +++ b/pyrogram/client/methods/chats/unpin_chat_message.py @@ -29,7 +29,6 @@ class UnpinChatMessage(BaseClient): Args: chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the target chat. - For a private channel/supergroup you can use its *t.me/joinchat/* link. Returns: True on success. diff --git a/pyrogram/client/methods/messages/delete_messages.py b/pyrogram/client/methods/messages/delete_messages.py index a4c97c76..8932a699 100644 --- a/pyrogram/client/methods/messages/delete_messages.py +++ b/pyrogram/client/methods/messages/delete_messages.py @@ -38,7 +38,6 @@ class DeleteMessages(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. message_ids (``iterable``): A list of Message identifiers to delete or a single message id. diff --git a/pyrogram/client/methods/messages/edit_message_caption.py b/pyrogram/client/methods/messages/edit_message_caption.py index 25276dc2..a83c670e 100644 --- a/pyrogram/client/methods/messages/edit_message_caption.py +++ b/pyrogram/client/methods/messages/edit_message_caption.py @@ -34,7 +34,6 @@ class EditMessageCaption(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. message_id (``int``): Message identifier in the chat specified in chat_id. diff --git a/pyrogram/client/methods/messages/edit_message_reply_markup.py b/pyrogram/client/methods/messages/edit_message_reply_markup.py index b840adab..6d846ca4 100644 --- a/pyrogram/client/methods/messages/edit_message_reply_markup.py +++ b/pyrogram/client/methods/messages/edit_message_reply_markup.py @@ -32,7 +32,6 @@ class EditMessageReplyMarkup(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. message_id (``int``): Message identifier in the chat specified in chat_id. diff --git a/pyrogram/client/methods/messages/edit_message_text.py b/pyrogram/client/methods/messages/edit_message_text.py index 741c0890..379a1988 100644 --- a/pyrogram/client/methods/messages/edit_message_text.py +++ b/pyrogram/client/methods/messages/edit_message_text.py @@ -35,7 +35,6 @@ class EditMessageText(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. message_id (``int``): Message identifier in the chat specified in chat_id. diff --git a/pyrogram/client/methods/messages/forward_messages.py b/pyrogram/client/methods/messages/forward_messages.py index 606e54b5..2b24aadf 100644 --- a/pyrogram/client/methods/messages/forward_messages.py +++ b/pyrogram/client/methods/messages/forward_messages.py @@ -33,13 +33,11 @@ class ForwardMessages(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. from_chat_id (``int`` | ``str``): Unique identifier (int) or username (str) of the source chat where the original message was sent. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. message_ids (``iterable``): A list of Message identifiers in the chat specified in *from_chat_id* or a single message id. diff --git a/pyrogram/client/methods/messages/get_history.py b/pyrogram/client/methods/messages/get_history.py index 4089dde9..66949a1c 100644 --- a/pyrogram/client/methods/messages/get_history.py +++ b/pyrogram/client/methods/messages/get_history.py @@ -37,7 +37,6 @@ class GetHistory(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. offset (``int``, *optional*) Sequential number of the first message to be returned. diff --git a/pyrogram/client/methods/messages/get_messages.py b/pyrogram/client/methods/messages/get_messages.py index 3c8b4dbe..c2751d74 100644 --- a/pyrogram/client/methods/messages/get_messages.py +++ b/pyrogram/client/methods/messages/get_messages.py @@ -33,7 +33,6 @@ class GetMessages(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. message_ids (``iterable``): A list of Message identifiers in the chat specified in *chat_id* or a single message id, as integer. diff --git a/pyrogram/client/methods/messages/send_audio.py b/pyrogram/client/methods/messages/send_audio.py index 7d590b79..f31ffa21 100644 --- a/pyrogram/client/methods/messages/send_audio.py +++ b/pyrogram/client/methods/messages/send_audio.py @@ -49,7 +49,6 @@ class SendAudio(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. audio (``str``): Audio file to send. diff --git a/pyrogram/client/methods/messages/send_chat_action.py b/pyrogram/client/methods/messages/send_chat_action.py index 49625b48..1117a2dd 100644 --- a/pyrogram/client/methods/messages/send_chat_action.py +++ b/pyrogram/client/methods/messages/send_chat_action.py @@ -32,7 +32,6 @@ class SendChatAction(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. action (:obj:`ChatAction ` | ``str``): Type of action to broadcast. diff --git a/pyrogram/client/methods/messages/send_contact.py b/pyrogram/client/methods/messages/send_contact.py index 1a894e30..99a96abc 100644 --- a/pyrogram/client/methods/messages/send_contact.py +++ b/pyrogram/client/methods/messages/send_contact.py @@ -37,7 +37,6 @@ class SendContact(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. phone_number (``str``): Contact's phone number. diff --git a/pyrogram/client/methods/messages/send_document.py b/pyrogram/client/methods/messages/send_document.py index b2b5c532..01c3eca5 100644 --- a/pyrogram/client/methods/messages/send_document.py +++ b/pyrogram/client/methods/messages/send_document.py @@ -44,7 +44,6 @@ class SendDocument(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. document (``str``): File to send. diff --git a/pyrogram/client/methods/messages/send_gif.py b/pyrogram/client/methods/messages/send_gif.py index a4a14d84..ca323f1d 100644 --- a/pyrogram/client/methods/messages/send_gif.py +++ b/pyrogram/client/methods/messages/send_gif.py @@ -48,7 +48,6 @@ class SendGIF(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. gif (``str``): GIF to send. diff --git a/pyrogram/client/methods/messages/send_location.py b/pyrogram/client/methods/messages/send_location.py index a3db2561..49a41256 100644 --- a/pyrogram/client/methods/messages/send_location.py +++ b/pyrogram/client/methods/messages/send_location.py @@ -35,7 +35,6 @@ class SendLocation(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. latitude (``float``): Latitude of the location. diff --git a/pyrogram/client/methods/messages/send_media_group.py b/pyrogram/client/methods/messages/send_media_group.py index 297d8f83..5465c9f2 100644 --- a/pyrogram/client/methods/messages/send_media_group.py +++ b/pyrogram/client/methods/messages/send_media_group.py @@ -44,7 +44,6 @@ class SendMediaGroup(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. media (``list``): A list containing either :obj:`InputMediaPhoto ` or diff --git a/pyrogram/client/methods/messages/send_message.py b/pyrogram/client/methods/messages/send_message.py index 44acaa2e..b770133e 100644 --- a/pyrogram/client/methods/messages/send_message.py +++ b/pyrogram/client/methods/messages/send_message.py @@ -37,7 +37,6 @@ class SendMessage(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. text (``str``): Text of the message to be sent. diff --git a/pyrogram/client/methods/messages/send_photo.py b/pyrogram/client/methods/messages/send_photo.py index a6264bf3..2d0036f2 100644 --- a/pyrogram/client/methods/messages/send_photo.py +++ b/pyrogram/client/methods/messages/send_photo.py @@ -44,7 +44,6 @@ class SendPhoto(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. photo (``str``): Photo to send. diff --git a/pyrogram/client/methods/messages/send_sticker.py b/pyrogram/client/methods/messages/send_sticker.py index fbf7a205..9f1f64da 100644 --- a/pyrogram/client/methods/messages/send_sticker.py +++ b/pyrogram/client/methods/messages/send_sticker.py @@ -41,7 +41,6 @@ class SendSticker(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. sticker (``str``): Sticker to send. diff --git a/pyrogram/client/methods/messages/send_venue.py b/pyrogram/client/methods/messages/send_venue.py index 50946e86..39ae0ca2 100644 --- a/pyrogram/client/methods/messages/send_venue.py +++ b/pyrogram/client/methods/messages/send_venue.py @@ -38,7 +38,6 @@ class SendVenue(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. latitude (``float``): Latitude of the venue. diff --git a/pyrogram/client/methods/messages/send_video.py b/pyrogram/client/methods/messages/send_video.py index b86b4702..87063ee3 100644 --- a/pyrogram/client/methods/messages/send_video.py +++ b/pyrogram/client/methods/messages/send_video.py @@ -49,7 +49,6 @@ class SendVideo(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. video (``str``): Video to send. diff --git a/pyrogram/client/methods/messages/send_video_note.py b/pyrogram/client/methods/messages/send_video_note.py index a266e5dd..6adc6497 100644 --- a/pyrogram/client/methods/messages/send_video_note.py +++ b/pyrogram/client/methods/messages/send_video_note.py @@ -44,7 +44,6 @@ class SendVideoNote(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. video_note (``str``): Video note to send. diff --git a/pyrogram/client/methods/messages/send_voice.py b/pyrogram/client/methods/messages/send_voice.py index f4fe4229..5b577672 100644 --- a/pyrogram/client/methods/messages/send_voice.py +++ b/pyrogram/client/methods/messages/send_voice.py @@ -45,7 +45,6 @@ class SendVoice(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. voice (``str``): Audio file to send. diff --git a/pyrogram/client/methods/users/get_user_profile_photos.py b/pyrogram/client/methods/users/get_user_profile_photos.py index 5613c21d..127ad232 100644 --- a/pyrogram/client/methods/users/get_user_profile_photos.py +++ b/pyrogram/client/methods/users/get_user_profile_photos.py @@ -32,7 +32,6 @@ class GetUserProfilePhotos(BaseClient): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. offset (``int``, *optional*): Sequential number of the first photo to be returned. diff --git a/pyrogram/client/types/message.py b/pyrogram/client/types/message.py index db13ccd6..e471c8a5 100644 --- a/pyrogram/client/types/message.py +++ b/pyrogram/client/types/message.py @@ -404,7 +404,6 @@ class Message(Object): Unique identifier (int) or username (str) of the target chat. For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - For a private channel/supergroup you can use its *t.me/joinchat/* link. disable_notification (``bool``, *optional*): Sends the message silently. From d270d0d2aa5ad819f4058773a237471b53e97425 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 28 Jul 2018 23:09:44 +0200 Subject: [PATCH 090/530] Remove support for t.me/joinchat/ links in resolve_peer for now Another way, which is 100% reliable, will be implemented Also clean the method a bit by removing useless checks --- pyrogram/client/client.py | 41 +++++++++++---------------------------- 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 709ea95a..3af60931 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -1011,21 +1011,19 @@ class Client(Methods, BaseClient): self.get_initial_dialogs_chunk() def resolve_peer(self, peer_id: int or str): - """Use this method to get the *InputPeer* of a known *peer_id*. + """Use this method to get the InputPeer of a known peer_id. - It is intended to be used when working with Raw Functions (i.e: a Telegram API method you wish to use which is - not available yet in the Client class as an easy-to-use method). + This is a utility method intended to be used only when working with Raw Functions (i.e: a Telegram API method + you wish to use which is not available yet in the Client class as an easy-to-use method), whenever an InputPeer + type is required. Args: - peer_id (``int`` | ``str`` | ``Peer``): - The Peer ID you want to extract the InputPeer from. Can be one of these types: ``int`` (direct ID), - ``str`` (@username), :obj:`PeerUser `, - :obj:`PeerChat `, :obj:`PeerChannel ` + peer_id (``int`` | ``str``): + The peer id you want to extract the InputPeer from. + Can be a direct id (int), a username (str) or a phone number (str). Returns: - :obj:`InputPeerUser ` or - :obj:`InputPeerChat ` or - :obj:`InputPeerChannel ` depending on the *peer_id*. + On success, the resolved peer id is returned in form of an InputPeer object. Raises: :class:`Error ` @@ -1034,38 +1032,21 @@ class Client(Methods, BaseClient): if peer_id in ("self", "me"): return types.InputPeerSelf() - match = self.INVITE_LINK_RE.match(peer_id) - - try: - decoded = base64.b64decode(match.group(1) + "=" * (-len(match.group(1)) % 4), "-_") - return self.resolve_peer(struct.unpack(">2iq", decoded)[1]) - except (AttributeError, binascii.Error, struct.error): - pass - peer_id = re.sub(r"[@+\s]", "", peer_id.lower()) try: int(peer_id) except ValueError: - try: - return self.peers_by_username[peer_id] - except KeyError: + if peer_id not in self.peers_by_username: self.send(functions.contacts.ResolveUsername(peer_id)) - return self.peers_by_username[peer_id] + + return self.peers_by_username[peer_id] else: try: return self.peers_by_phone[peer_id] except KeyError: raise PeerIdInvalid - if type(peer_id) is not int: - if isinstance(peer_id, types.PeerUser): - peer_id = peer_id.user_id - elif isinstance(peer_id, types.PeerChat): - peer_id = -peer_id.chat_id - elif isinstance(peer_id, types.PeerChannel): - peer_id = int("-100" + str(peer_id.channel_id)) - try: # User return self.peers_by_id[peer_id] except KeyError: From e682046713174951d341ef4f0fae9563b0bb3dac Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 29 Jul 2018 03:37:50 +0200 Subject: [PATCH 091/530] Fix sphinx compilation warnings --- docs/source/resources/TextFormatting.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/resources/TextFormatting.rst b/docs/source/resources/TextFormatting.rst index aaa78f0a..9b4e2e4c 100644 --- a/docs/source/resources/TextFormatting.rst +++ b/docs/source/resources/TextFormatting.rst @@ -11,7 +11,7 @@ Markdown Style To use this mode, pass :obj:`MARKDOWN ` or "markdown" in the *parse_mode* field when using :obj:`send_message() `. Use the following syntax in your message: -.. code-block:: txt +.. code-block:: text **bold text** @@ -34,7 +34,7 @@ HTML Style To use this mode, pass :obj:`HTML ` or "html" in the *parse_mode* field when using :obj:`send_message() `. The following tags are currently supported: -.. code-block:: txt +.. code-block:: text bold, bold From faef1526a9a1f423c489bd6bd91eeaba81d2087b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 29 Jul 2018 03:38:30 +0200 Subject: [PATCH 092/530] Tidy up HTML syntax example --- docs/source/resources/TextFormatting.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/source/resources/TextFormatting.rst b/docs/source/resources/TextFormatting.rst index 9b4e2e4c..dd619469 100644 --- a/docs/source/resources/TextFormatting.rst +++ b/docs/source/resources/TextFormatting.rst @@ -46,9 +46,7 @@ To use this mode, pass :obj:`HTML ` or "html" in the *p inline fixed-width code -
pre-formatted fixed-width
-    code block
-    
+
pre-formatted fixed-width code block
.. note:: Mentions are only guaranteed to work if you have already met the user (in groups or private chats). From 97f3921729692bf985f8efa3dec4107e8771882b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 29 Jul 2018 03:40:04 +0200 Subject: [PATCH 093/530] Use clearer words and spacing --- docs/source/resources/TextFormatting.rst | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/source/resources/TextFormatting.rst b/docs/source/resources/TextFormatting.rst index dd619469..0ab08694 100644 --- a/docs/source/resources/TextFormatting.rst +++ b/docs/source/resources/TextFormatting.rst @@ -1,8 +1,11 @@ Text Formatting =============== -Pyrogram, just like `Telegram Bot API`_, supports basic Markdown and HTML formatting styles for text messages and -media captions; Markdown uses the same syntax as Telegram Desktop's and is enabled by default. +Pyrogram, just like the `Telegram Bot API`_, natively supports basic Markdown and HTML formatting styles for text +messages and media captions. + +Markdown style uses the same syntax as Telegram Desktop's and is enabled by default. + Beside bold, italic, and pre-formatted code, **Pyrogram does also support inline URLs and inline mentions of users**. Markdown Style From 9d9fc1f94f8547790826b9dcacea3366c1c82542 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 30 Jul 2018 22:59:30 +0200 Subject: [PATCH 094/530] Add InputMedia base class --- pyrogram/client/types/input_media.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 pyrogram/client/types/input_media.py diff --git a/pyrogram/client/types/input_media.py b/pyrogram/client/types/input_media.py new file mode 100644 index 00000000..611d5865 --- /dev/null +++ b/pyrogram/client/types/input_media.py @@ -0,0 +1,24 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + + +class InputMedia: + def __init__(self, media: str, caption: str, parse_mode: str): + self.media = media + self.caption = caption + self.parse_mode = parse_mode From 486c9433ace001450c9f958d713f283edb63fc67 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 30 Jul 2018 23:01:14 +0200 Subject: [PATCH 095/530] Make InputMediaPhoto inherit from InputMedia --- pyrogram/client/types/input_media_photo.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyrogram/client/types/input_media_photo.py b/pyrogram/client/types/input_media_photo.py index 336ee849..d58f75a6 100644 --- a/pyrogram/client/types/input_media_photo.py +++ b/pyrogram/client/types/input_media_photo.py @@ -16,8 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +from . import InputMedia -class InputMediaPhoto: + +class InputMediaPhoto(InputMedia): """This object represents a photo to be sent inside an album. It is intended to be used with :obj:`send_media_group() `. @@ -41,6 +43,4 @@ class InputMediaPhoto: media: str, caption: str = "", parse_mode: str = ""): - self.media = media - self.caption = caption - self.parse_mode = parse_mode + super().__init__(media, caption, parse_mode) From 2a985e75455856516359563e977e21788af06885 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 30 Jul 2018 23:01:43 +0200 Subject: [PATCH 096/530] Make InputMediaVideo inherit from InputMedia --- pyrogram/client/types/input_media_video.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pyrogram/client/types/input_media_video.py b/pyrogram/client/types/input_media_video.py index eb6c003e..c1f2c9ac 100644 --- a/pyrogram/client/types/input_media_video.py +++ b/pyrogram/client/types/input_media_video.py @@ -16,8 +16,10 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +from . import InputMedia -class InputMediaVideo: + +class InputMediaVideo(InputMedia): """This object represents a video to be sent inside an album. It is intended to be used with :obj:`send_media_group() `. @@ -57,9 +59,8 @@ class InputMediaVideo: height: int = 0, duration: int = 0, supports_streaming: bool = True): - self.media = media - self.caption = caption - self.parse_mode = parse_mode + super().__init__(media, caption, parse_mode) + self.width = width self.height = height self.duration = duration From 5bc9be08586517a5c783da3d1a539bba3734ad10 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 31 Jul 2018 00:14:21 +0200 Subject: [PATCH 097/530] Add InputMediaAudio --- pyrogram/client/types/input_media_audio.py | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 pyrogram/client/types/input_media_audio.py diff --git a/pyrogram/client/types/input_media_audio.py b/pyrogram/client/types/input_media_audio.py new file mode 100644 index 00000000..c556554f --- /dev/null +++ b/pyrogram/client/types/input_media_audio.py @@ -0,0 +1,67 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from . import InputMedia + + +class InputMediaAudio(InputMedia): + """This object represents a video to be sent inside an album. + It is intended to be used with :obj:`send_media_group() `. + + Args: + media (``str``): + Video to send. + Pass a file_id as string to send a video that exists on the Telegram servers or + pass a file path as string to upload a new video that exists on your local machine. + Sending video by a URL is currently unsupported. + + caption (``str``, *optional*): + Caption of the video to be sent, 0-200 characters + + parse_mode (``str``, *optional*): + Use :obj:`MARKDOWN ` or :obj:`HTML ` + if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your caption. + Defaults to Markdown. + + width (``int``, *optional*): + Video width. + + height (``int``, *optional*): + Video height. + + duration (``int``, *optional*): + Video duration. + + supports_streaming (``bool``, *optional*): + Pass True, if the uploaded video is suitable for streaming. + """ + + def __init__(self, + media: str, + caption: str = "", + parse_mode: str = "", + width: int = 0, + height: int = 0, + duration: int = 0, + supports_streaming: bool = True): + super().__init__(media, caption, parse_mode) + + self.width = width + self.height = height + self.duration = duration + self.supports_streaming = supports_streaming From 570128d980a0be22d1b99fe2c0c8d40f282af413 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 31 Jul 2018 00:25:41 +0200 Subject: [PATCH 098/530] Add InputMediaAnimation --- .../client/types/input_media_animation.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 pyrogram/client/types/input_media_animation.py diff --git a/pyrogram/client/types/input_media_animation.py b/pyrogram/client/types/input_media_animation.py new file mode 100644 index 00000000..12fe0e03 --- /dev/null +++ b/pyrogram/client/types/input_media_animation.py @@ -0,0 +1,60 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from . import InputMedia + + +class InputMediaAnimation(InputMedia): + """This object represents an animation file (GIF or H.264/MPEG-4 AVC video without sound) to be sent. + + Args: + media (``str``): + Animation to send. + Pass a file_id as string to send a file that exists on the Telegram servers or + pass a file path as string to upload a new file that exists on your local machine. + + caption (``str``, *optional*): + Caption of the animation to be sent, 0-200 characters + + parse_mode (``str``, *optional*): + Use :obj:`MARKDOWN ` or :obj:`HTML ` + if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your caption. + Defaults to Markdown. + + width (``int``, *optional*): + Animation width. + + height (``int``, *optional*): + Animation height. + + duration (``int``, *optional*): + Animation duration. + """ + + def __init__(self, + media: str, + caption: str = "", + parse_mode: str = "", + width: int = 0, + height: int = 0, + duration: int = 0): + super().__init__(media, caption, parse_mode) + + self.width = width + self.height = height + self.duration = duration From c62575674717c51d9dbbf2be7d8b8e366dee29b7 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 31 Jul 2018 00:29:10 +0200 Subject: [PATCH 099/530] Add InputMediaDocument --- pyrogram/client/types/input_media_document.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 pyrogram/client/types/input_media_document.py diff --git a/pyrogram/client/types/input_media_document.py b/pyrogram/client/types/input_media_document.py new file mode 100644 index 00000000..f64da619 --- /dev/null +++ b/pyrogram/client/types/input_media_document.py @@ -0,0 +1,44 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from . import InputMedia + + +class InputMediaDocument(InputMedia): + """This object represents a general file to be sent. + + Args: + media (``str``): + File to send. + Pass a file_id as string to send a file that exists on the Telegram servers or + pass a file path as string to upload a new file that exists on your local machine. + + caption (``str``, *optional*): + Caption of the document to be sent, 0-200 characters + + parse_mode (``str``, *optional*): + Use :obj:`MARKDOWN ` or :obj:`HTML ` + if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your caption. + Defaults to Markdown. + """ + + def __init__(self, + media: str, + caption: str = "", + parse_mode: str = ""): + super().__init__(media, caption, parse_mode) From 92fdf79d545121e18bb5636a285339a5429ef9fc Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 1 Aug 2018 21:19:11 +0200 Subject: [PATCH 100/530] Expose the new InputMedia types --- pyrogram/__init__.py | 9 ++++----- pyrogram/client/types/__init__.py | 4 ++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index f1442596..24bdc1a5 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -28,11 +28,10 @@ __version__ = "0.7.6dev1" from .api.errors import Error from .client.types import ( Audio, Chat, ChatMember, ChatMembers, ChatPhoto, Contact, Document, InputMediaPhoto, - InputMediaVideo, InputPhoneContact, Location, Message, MessageEntity, - Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, UserProfilePhotos, - Venue, GIF, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply, - InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, - ReplyKeyboardRemove + InputMediaVideo, InputMediaDocument, InputMediaAudio, InputMediaAnimation, InputPhoneContact, + Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, + UserProfilePhotos, Venue, GIF, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply, + InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove ) from .client import ( Client, ChatAction, ParseMode, Emoji, diff --git a/pyrogram/client/types/__init__.py b/pyrogram/client/types/__init__.py index e6fcc8aa..23c15818 100644 --- a/pyrogram/client/types/__init__.py +++ b/pyrogram/client/types/__init__.py @@ -23,6 +23,10 @@ from .chat_members import ChatMembers from .chat_photo import ChatPhoto from .dialog import Dialog from .dialogs import Dialogs +from .input_media import InputMedia +from .input_media_animation import InputMediaAnimation +from .input_media_audio import InputMediaAudio +from .input_media_document import InputMediaDocument from .input_media_photo import InputMediaPhoto from .input_media_video import InputMediaVideo from .input_phone_contact import InputPhoneContact From ea0a75bfd702f512f3a1815d82669bb913aa8a63 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 2 Aug 2018 01:10:29 +0200 Subject: [PATCH 101/530] Add edit_message_media method --- .../methods/messages/edit_message_media.py | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 pyrogram/client/methods/messages/edit_message_media.py diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py new file mode 100644 index 00000000..56295749 --- /dev/null +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -0,0 +1,36 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api import functions +from pyrogram.client.ext import BaseClient + + +class EditMessageMedia(BaseClient): + def edit_message_media(self, + chat_id: int or str, + message_id: int, + media, + reply_markup=None): + r = self.send( + functions.messages.EditMessage( + peer=self.resolve_peer(chat_id), + id=message_id, + reply_markup=reply_markup.write() if reply_markup else None, + media=media + ) + ) From e7b27c2c21e567caece838f970c16995b879da1d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 2 Aug 2018 01:12:31 +0200 Subject: [PATCH 102/530] Expose edit_message_media method --- pyrogram/client/methods/messages/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyrogram/client/methods/messages/__init__.py b/pyrogram/client/methods/messages/__init__.py index 94279ffd..6de17d7c 100644 --- a/pyrogram/client/methods/messages/__init__.py +++ b/pyrogram/client/methods/messages/__init__.py @@ -18,6 +18,7 @@ from .delete_messages import DeleteMessages from .edit_message_caption import EditMessageCaption +from .edit_message_media import EditMessageMedia from .edit_message_reply_markup import EditMessageReplyMarkup from .edit_message_text import EditMessageText from .forward_messages import ForwardMessages @@ -44,6 +45,7 @@ class Messages( DeleteMessages, EditMessageCaption, EditMessageReplyMarkup, + EditMessageMedia, EditMessageText, ForwardMessages, GetHistory, From 6015a14182644b57f76560e74006cdbac4af0574 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 3 Aug 2018 18:36:38 +0200 Subject: [PATCH 103/530] Add ability to edit photos by uploading new files --- .../methods/messages/edit_message_media.py | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index 56295749..dfee76a8 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -16,8 +16,13 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . -from pyrogram.api import functions +import os + +from pyrogram.api import functions, types from pyrogram.client.ext import BaseClient +from pyrogram.client.types import ( + InputMediaPhoto +) class EditMessageMedia(BaseClient): @@ -26,11 +31,33 @@ class EditMessageMedia(BaseClient): message_id: int, media, reply_markup=None): + style = self.html if media.parse_mode.lower() == "html" else self.markdown + caption = media.caption + + if isinstance(media, InputMediaPhoto): + if os.path.exists(media.media): + media = self.send( + functions.messages.UploadMedia( + peer=self.resolve_peer(chat_id), + media=types.InputMediaUploadedPhoto( + file=self.save_file(media.media) + ) + ) + ) + + media = types.InputMediaPhoto( + id=types.InputPhoto( + id=media.photo.id, + access_hash=media.photo.access_hash + ) + ) + r = self.send( functions.messages.EditMessage( peer=self.resolve_peer(chat_id), id=message_id, reply_markup=reply_markup.write() if reply_markup else None, - media=media + media=media, + **style.parse(caption) ) ) From 8d35559f0bee7ebcba8e8bde294033020dd3e132 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 3 Aug 2018 18:37:10 +0200 Subject: [PATCH 104/530] Return the higher-level Message object instead of the raw update --- pyrogram/client/methods/messages/edit_message_media.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index dfee76a8..1e42c304 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -19,7 +19,7 @@ import os from pyrogram.api import functions, types -from pyrogram.client.ext import BaseClient +from pyrogram.client.ext import BaseClient, utils from pyrogram.client.types import ( InputMediaPhoto ) @@ -61,3 +61,11 @@ class EditMessageMedia(BaseClient): **style.parse(caption) ) ) + + for i in r.updates: + if isinstance(i, (types.UpdateEditMessage, types.UpdateEditChannelMessage)): + return utils.parse_messages( + self, i.message, + {i.id: i for i in r.users}, + {i.id: i for i in r.chats} + ) From a3be6a93550423b3ab35529ab397e5738266ea9f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 3 Aug 2018 18:38:04 +0200 Subject: [PATCH 105/530] Add support for editing photos with external URLs --- pyrogram/client/methods/messages/edit_message_media.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index 1e42c304..35c24f1a 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -51,6 +51,10 @@ class EditMessageMedia(BaseClient): access_hash=media.photo.access_hash ) ) + elif media.media.startswith("http"): + media = types.InputMediaPhotoExternal( + url=media.media + ) r = self.send( functions.messages.EditMessage( From 51eb2f90b983ae53f5116c2a7bfab07875efd133 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 3 Aug 2018 18:38:26 +0200 Subject: [PATCH 106/530] Add support for editing photousing file IDs --- .../methods/messages/edit_message_media.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index 35c24f1a..d79ecfbe 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -16,9 +16,12 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +import binascii import os +import struct from pyrogram.api import functions, types +from pyrogram.api.errors import FileIdInvalid from pyrogram.client.ext import BaseClient, utils from pyrogram.client.types import ( InputMediaPhoto @@ -55,6 +58,28 @@ class EditMessageMedia(BaseClient): media = types.InputMediaPhotoExternal( url=media.media ) + else: + try: + decoded = utils.decode(media.media) + fmt = " 24 else " Date: Sat, 4 Aug 2018 01:23:31 +0200 Subject: [PATCH 107/530] Add ability to edit video messages --- .../methods/messages/edit_message_media.py | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index d79ecfbe..02b9062d 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -17,6 +17,7 @@ # along with Pyrogram. If not, see . import binascii +import mimetypes import os import struct @@ -24,7 +25,7 @@ from pyrogram.api import functions, types from pyrogram.api.errors import FileIdInvalid from pyrogram.client.ext import BaseClient, utils from pyrogram.client.types import ( - InputMediaPhoto + InputMediaPhoto, InputMediaVideo ) @@ -81,6 +82,34 @@ class EditMessageMedia(BaseClient): ) ) + if isinstance(media, InputMediaVideo): + if os.path.exists(media.media): + media = self.send( + functions.messages.UploadMedia( + peer=self.resolve_peer(chat_id), + media=types.InputMediaUploadedDocument( + mime_type=mimetypes.types_map[".mp4"], + file=self.save_file(media.media), + attributes=[ + types.DocumentAttributeVideo( + supports_streaming=media.supports_streaming or None, + duration=media.duration, + w=media.width, + h=media.height + ), + types.DocumentAttributeFilename(os.path.basename(media.media)) + ] + ) + ) + ) + + media = types.InputMediaDocument( + id=types.InputDocument( + id=media.document.id, + access_hash=media.document.access_hash + ) + ) + r = self.send( functions.messages.EditMessage( peer=self.resolve_peer(chat_id), From 9f725a6bfb299bac73f6d3fe83f11d4a8d8c92c1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 4 Aug 2018 01:27:02 +0200 Subject: [PATCH 108/530] Add support for editing videos using external URLs and file IDs --- .../methods/messages/edit_message_media.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index 02b9062d..2ca9ab9f 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -109,6 +109,32 @@ class EditMessageMedia(BaseClient): access_hash=media.document.access_hash ) ) + elif media.media.startswith("http"): + media = types.InputMediaDocumentExternal( + url=media.media + ) + else: + try: + decoded = utils.decode(media.media) + fmt = " 24 else " Date: Sun, 5 Aug 2018 10:15:53 +0200 Subject: [PATCH 109/530] Fix InputMediaAudio copy pasta --- pyrogram/client/types/input_media_audio.py | 34 +++++++++------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/pyrogram/client/types/input_media_audio.py b/pyrogram/client/types/input_media_audio.py index c556554f..2c644107 100644 --- a/pyrogram/client/types/input_media_audio.py +++ b/pyrogram/client/types/input_media_audio.py @@ -25,43 +25,37 @@ class InputMediaAudio(InputMedia): Args: media (``str``): - Video to send. - Pass a file_id as string to send a video that exists on the Telegram servers or - pass a file path as string to upload a new video that exists on your local machine. - Sending video by a URL is currently unsupported. + Audio to send. + Pass a file_id as string to send an audio that exists on the Telegram servers or + pass a file path as string to upload a new audio that exists on your local machine. caption (``str``, *optional*): - Caption of the video to be sent, 0-200 characters + Caption of the audio to be sent, 0-200 characters parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your caption. Defaults to Markdown. - width (``int``, *optional*): - Video width. - - height (``int``, *optional*): - Video height. - duration (``int``, *optional*): - Video duration. + Duration of the audio in seconds - supports_streaming (``bool``, *optional*): - Pass True, if the uploaded video is suitable for streaming. + performer (``int``, *optional*): + Performer of the audio + + title (``int``, *optional*): + Title of the audio """ def __init__(self, media: str, caption: str = "", parse_mode: str = "", - width: int = 0, - height: int = 0, duration: int = 0, - supports_streaming: bool = True): + performer: int = "", + title: str = ""): super().__init__(media, caption, parse_mode) - self.width = width - self.height = height self.duration = duration - self.supports_streaming = supports_streaming + self.performer = performer + self.title = title From f7c2dc9d30ff8cfb6a39cda9e3f1b02e5755e87a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 5 Aug 2018 10:25:37 +0200 Subject: [PATCH 110/530] Add support for editing messages with Audio --- .../methods/messages/edit_message_media.py | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index 2ca9ab9f..c6b2eb97 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -25,7 +25,7 @@ from pyrogram.api import functions, types from pyrogram.api.errors import FileIdInvalid from pyrogram.client.ext import BaseClient, utils from pyrogram.client.types import ( - InputMediaPhoto, InputMediaVideo + InputMediaPhoto, InputMediaVideo, InputMediaAudio ) @@ -136,6 +136,59 @@ class EditMessageMedia(BaseClient): ) ) + if isinstance(media, InputMediaAudio): + if os.path.exists(media.media): + media = self.send( + functions.messages.UploadMedia( + peer=self.resolve_peer(chat_id), + media=types.InputMediaUploadedDocument( + mime_type=mimetypes.types_map.get("." + media.media.split(".")[-1], "audio/mpeg"), + file=self.save_file(media.media), + attributes=[ + types.DocumentAttributeAudio( + duration=media.duration, + performer=media.performer, + title=media.title + ), + types.DocumentAttributeFilename(os.path.basename(media.media)) + ] + ) + ) + ) + + media = types.InputMediaDocument( + id=types.InputDocument( + id=media.document.id, + access_hash=media.document.access_hash + ) + ) + elif media.media.startswith("http"): + media = types.InputMediaDocumentExternal( + url=media.media + ) + else: + try: + decoded = utils.decode(media.media) + fmt = " 24 else " Date: Mon, 6 Aug 2018 21:32:38 +0200 Subject: [PATCH 111/530] Rename media type id to animation --- pyrogram/client/ext/base_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/ext/base_client.py b/pyrogram/client/ext/base_client.py index cd54570d..c8a6029d 100644 --- a/pyrogram/client/ext/base_client.py +++ b/pyrogram/client/ext/base_client.py @@ -60,7 +60,7 @@ class BaseClient: 5: "document", 8: "sticker", 9: "audio", - 10: "gif", + 10: "animation", 13: "video_note" } From b1c12c323236e9a6a8f5e60a5eb0d3aff9808ffc Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 6 Aug 2018 21:38:44 +0200 Subject: [PATCH 112/530] Rename GIF to Animation --- pyrogram/__init__.py | 2 +- pyrogram/client/ext/utils.py | 6 +++--- pyrogram/client/methods/download_media.py | 2 +- pyrogram/client/types/__init__.py | 2 +- pyrogram/client/types/media/__init__.py | 2 +- .../client/types/media/{gif.py => animation.py} | 16 ++++++++-------- pyrogram/client/types/message.py | 8 ++++---- 7 files changed, 19 insertions(+), 19 deletions(-) rename pyrogram/client/types/media/{gif.py => animation.py} (82%) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 24bdc1a5..a822524c 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -30,7 +30,7 @@ from .client.types import ( Audio, Chat, ChatMember, ChatMembers, ChatPhoto, Contact, Document, InputMediaPhoto, InputMediaVideo, InputMediaDocument, InputMediaAudio, InputMediaAnimation, InputPhoneContact, Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, - UserProfilePhotos, Venue, GIF, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply, + UserProfilePhotos, Venue, Animation, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply, InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove ) from .client import ( diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index a99ee066..c1d859d0 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -293,7 +293,7 @@ def parse_messages( venue = None audio = None voice = None - gif = None + animation = None video = None video_note = None sticker = None @@ -432,7 +432,7 @@ def parse_messages( elif types.DocumentAttributeAnimated in attributes: video_attributes = attributes.get(types.DocumentAttributeVideo, None) - gif = pyrogram_types.GIF( + animation = pyrogram_types.Animation( file_id=encode( pack( ". +from .animation import Animation from .audio import Audio from .contact import Contact from .document import Document -from .gif import GIF from .location import Location from .photo import Photo from .photo_size import PhotoSize diff --git a/pyrogram/client/types/media/gif.py b/pyrogram/client/types/media/animation.py similarity index 82% rename from pyrogram/client/types/media/gif.py rename to pyrogram/client/types/media/animation.py index 5172aae2..85d5a365 100644 --- a/pyrogram/client/types/media/gif.py +++ b/pyrogram/client/types/media/animation.py @@ -19,27 +19,27 @@ from pyrogram.api.core import Object -class GIF(Object): - """This object represents a GIF file. +class Animation(Object): + """This object represents an animation file (GIF or H.264/MPEG-4 AVC video without sound). Args: file_id (``str``): Unique identifier for this file. width (``int``): - GIF width as defined by sender. + Animation width as defined by sender. height (``int``): - GIF height as defined by sender. + Animation height as defined by sender. duration (``int``): - Duration of the GIF in seconds as defined by sender. + Duration of the animation in seconds as defined by sender. thumb (:obj:`PhotoSize `, *optional*): - GIF thumbnail. + Animation thumbnail. file_name (``str``, *optional*): - GIF file name. + Animation file name. mime_type (``str``, *optional*): Mime type of a file as defined by sender. @@ -48,7 +48,7 @@ class GIF(Object): File size. date (``int``, *optional*): - Date the GIF was sent in Unix time. + Date the Animation was sent in Unix time. """ ID = 0xb0700025 diff --git a/pyrogram/client/types/message.py b/pyrogram/client/types/message.py index e471c8a5..7b05bfac 100644 --- a/pyrogram/client/types/message.py +++ b/pyrogram/client/types/message.py @@ -92,8 +92,8 @@ class Message(Object): sticker (:obj:`Sticker `, *optional*): Message is a sticker, information about the sticker. - gif (:obj:`Video `, *optional*): - Message is a GIF, information about the GIF. + animation (:obj:`Animation `, *optional*): + Message is an animation, information about the animation. video (:obj:`Video `, *optional*): Message is a video, information about the video. @@ -228,7 +228,7 @@ class Message(Object): game=None, photo=None, sticker=None, - gif=None, + animation=None, video=None, voice=None, video_note=None, @@ -279,7 +279,7 @@ class Message(Object): self.game = game # flags.15?Game self.photo = photo # flags.16?Vector self.sticker = sticker # flags.17?Sticker - self.gif = gif + self.animation = animation self.video = video # flags.18?Video self.voice = voice # flags.19?Voice self.video_note = video_note # flags.20?VideoNote From 2b793dd2a170dd4a0df20b7c17e9a45b4884e4d4 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 7 Aug 2018 01:23:52 +0200 Subject: [PATCH 113/530] Refactor send_gif. It is now called send_animation --- pyrogram/client/methods/messages/__init__.py | 4 +- pyrogram/client/methods/messages/send_gif.py | 66 ++++++++++---------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/pyrogram/client/methods/messages/__init__.py b/pyrogram/client/methods/messages/__init__.py index 6de17d7c..8bf3bc14 100644 --- a/pyrogram/client/methods/messages/__init__.py +++ b/pyrogram/client/methods/messages/__init__.py @@ -29,7 +29,7 @@ from .send_audio import SendAudio from .send_chat_action import SendChatAction from .send_contact import SendContact from .send_document import SendDocument -from .send_gif import SendGIF +from .send_gif import SendAnimation from .send_location import SendLocation from .send_media_group import SendMediaGroup from .send_message import SendMessage @@ -55,7 +55,7 @@ class Messages( SendChatAction, SendContact, SendDocument, - SendGIF, + SendAnimation, SendLocation, SendMediaGroup, SendMessage, diff --git a/pyrogram/client/methods/messages/send_gif.py b/pyrogram/client/methods/messages/send_gif.py index ca323f1d..55123332 100644 --- a/pyrogram/client/methods/messages/send_gif.py +++ b/pyrogram/client/methods/messages/send_gif.py @@ -26,22 +26,22 @@ from pyrogram.api.errors import FileIdInvalid, FilePartMissing from pyrogram.client.ext import BaseClient, utils -class SendGIF(BaseClient): - def send_gif(self, - chat_id: int or str, - gif: str, - caption: str = "", - parse_mode: str = "", - duration: int = 0, - width: int = 0, - height: int = 0, - thumb: str = None, - disable_notification: bool = None, - reply_to_message_id: int = None, - reply_markup=None, - progress: callable = None, - progress_args: tuple = ()): - """Use this method to send GIF files. +class SendAnimation(BaseClient): + def send_animation(self, + chat_id: int or str, + animation: str, + caption: str = "", + parse_mode: str = "", + duration: int = 0, + width: int = 0, + height: int = 0, + thumb: str = None, + disable_notification: bool = None, + reply_to_message_id: int = None, + reply_markup=None, + progress: callable = None, + progress_args: tuple = ()): + """Use this method to send animation files (animation or H.264/MPEG-4 AVC video without sound). Args: chat_id (``int`` | ``str``): @@ -49,14 +49,14 @@ class SendGIF(BaseClient): For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - gif (``str``): - GIF to send. - Pass a file_id as string to send a GIF that exists on the Telegram servers, - pass an HTTP URL as a string for Telegram to get a GIF from the Internet, or - pass a file path as string to upload a new GIF that exists on your local machine. + animation (``str``): + Animation to send. + Pass a file_id as string to send an animation that exists on the Telegram servers, + pass an HTTP URL as a string for Telegram to get an animation from the Internet, or + pass a file path as string to upload a new animation that exists on your local machine. caption (``str``, *optional*): - GIF caption, 0-200 characters. + Animation caption, 0-200 characters. parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` @@ -64,16 +64,16 @@ class SendGIF(BaseClient): Defaults to Markdown. duration (``int``, *optional*): - Duration of sent GIF in seconds. + Duration of sent animation in seconds. width (``int``, *optional*): - GIF width. + Animation width. height (``int``, *optional*): - GIF height. + Animation height. thumb (``str``, *optional*): - GIF thumbnail. + Animation thumbnail. Pass a file path as string to send an image that exists on your local machine. Thumbnail should have 90 or less pixels of width and 90 or less pixels of height. @@ -120,9 +120,9 @@ class SendGIF(BaseClient): file = None style = self.html if parse_mode.lower() == "html" else self.markdown - if os.path.exists(gif): + if os.path.exists(animation): thumb = None if thumb is None else self.save_file(thumb) - file = self.save_file(gif, progress=progress, progress_args=progress_args) + file = self.save_file(animation, progress=progress, progress_args=progress_args) media = types.InputMediaUploadedDocument( mime_type=mimetypes.types_map[".mp4"], file=file, @@ -134,17 +134,17 @@ class SendGIF(BaseClient): w=width, h=height ), - types.DocumentAttributeFilename(os.path.basename(gif)), + types.DocumentAttributeFilename(os.path.basename(animation)), types.DocumentAttributeAnimated() ] ) - elif gif.startswith("http"): + elif animation.startswith("http"): media = types.InputMediaDocumentExternal( - url=gif + url=animation ) else: try: - decoded = utils.decode(gif) + decoded = utils.decode(animation) fmt = " 24 else " Date: Tue, 7 Aug 2018 01:25:34 +0200 Subject: [PATCH 114/530] Rename file --- pyrogram/client/methods/messages/__init__.py | 2 +- .../client/methods/messages/{send_gif.py => send_animation.py} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename pyrogram/client/methods/messages/{send_gif.py => send_animation.py} (100%) diff --git a/pyrogram/client/methods/messages/__init__.py b/pyrogram/client/methods/messages/__init__.py index 8bf3bc14..174586bc 100644 --- a/pyrogram/client/methods/messages/__init__.py +++ b/pyrogram/client/methods/messages/__init__.py @@ -29,7 +29,7 @@ from .send_audio import SendAudio from .send_chat_action import SendChatAction from .send_contact import SendContact from .send_document import SendDocument -from .send_gif import SendAnimation +from .send_animation import SendAnimation from .send_location import SendLocation from .send_media_group import SendMediaGroup from .send_message import SendMessage diff --git a/pyrogram/client/methods/messages/send_gif.py b/pyrogram/client/methods/messages/send_animation.py similarity index 100% rename from pyrogram/client/methods/messages/send_gif.py rename to pyrogram/client/methods/messages/send_animation.py From 92a3722e56b9116df3cfce6ccc0f337678dda531 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 8 Aug 2018 15:36:48 +0200 Subject: [PATCH 115/530] Use Animation instead of GIF when creating the types list --- compiler/api/compiler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/api/compiler.py b/compiler/api/compiler.py index 3b6dbae7..69713867 100644 --- a/compiler/api/compiler.py +++ b/compiler/api/compiler.py @@ -501,7 +501,7 @@ def start(): f.write("\n 0xb0700022: \"pyrogram.client.types.reply_markup.ReplyKeyboardMarkup\",") f.write("\n 0xb0700023: \"pyrogram.client.types.reply_markup.ReplyKeyboardRemove\",") f.write("\n 0xb0700024: \"pyrogram.client.types.CallbackQuery\",") - f.write("\n 0xb0700025: \"pyrogram.client.types.GIF\",") + f.write("\n 0xb0700025: \"pyrogram.client.types.Animation\",") f.write("\n 0xb0700026: \"pyrogram.client.types.Messages\",") f.write("\n 0xb0700027: \"pyrogram.client.types.Photo\",") f.write("\n 0xb0700028: \"pyrogram.client.types.Dialog\",") From 88d45b085beefc26861470fad17668a1a64d5161 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 9 Aug 2018 21:46:14 +0200 Subject: [PATCH 116/530] Move InputMedia types in a dedicated folder --- pyrogram/client/types/__init__.py | 11 ++++----- pyrogram/client/types/input_media/__init__.py | 24 +++++++++++++++++++ .../types/{ => input_media}/input_media.py | 0 .../input_media_animation.py | 0 .../{ => input_media}/input_media_audio.py | 0 .../{ => input_media}/input_media_document.py | 0 .../{ => input_media}/input_media_photo.py | 0 .../{ => input_media}/input_media_video.py | 0 .../{ => input_media}/input_phone_contact.py | 0 9 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 pyrogram/client/types/input_media/__init__.py rename pyrogram/client/types/{ => input_media}/input_media.py (100%) rename pyrogram/client/types/{ => input_media}/input_media_animation.py (100%) rename pyrogram/client/types/{ => input_media}/input_media_audio.py (100%) rename pyrogram/client/types/{ => input_media}/input_media_document.py (100%) rename pyrogram/client/types/{ => input_media}/input_media_photo.py (100%) rename pyrogram/client/types/{ => input_media}/input_media_video.py (100%) rename pyrogram/client/types/{ => input_media}/input_phone_contact.py (100%) diff --git a/pyrogram/client/types/__init__.py b/pyrogram/client/types/__init__.py index a07ee27b..46332453 100644 --- a/pyrogram/client/types/__init__.py +++ b/pyrogram/client/types/__init__.py @@ -23,13 +23,10 @@ from .chat_members import ChatMembers from .chat_photo import ChatPhoto from .dialog import Dialog from .dialogs import Dialogs -from .input_media import InputMedia -from .input_media_animation import InputMediaAnimation -from .input_media_audio import InputMediaAudio -from .input_media_document import InputMediaDocument -from .input_media_photo import InputMediaPhoto -from .input_media_video import InputMediaVideo -from .input_phone_contact import InputPhoneContact +from .input_media import ( + InputMediaAudio, InputPhoneContact, InputMediaVideo, InputMediaPhoto, + InputMediaDocument, InputMediaAnimation +) from .media import ( Audio, Contact, Document, Animation, Location, Photo, PhotoSize, Sticker, Venue, Video, VideoNote, Voice, UserProfilePhotos diff --git a/pyrogram/client/types/input_media/__init__.py b/pyrogram/client/types/input_media/__init__.py new file mode 100644 index 00000000..4b3d90a3 --- /dev/null +++ b/pyrogram/client/types/input_media/__init__.py @@ -0,0 +1,24 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from .input_media_animation import InputMediaAnimation +from .input_media_audio import InputMediaAudio +from .input_media_document import InputMediaDocument +from .input_media_photo import InputMediaPhoto +from .input_media_video import InputMediaVideo +from .input_phone_contact import InputPhoneContact diff --git a/pyrogram/client/types/input_media.py b/pyrogram/client/types/input_media/input_media.py similarity index 100% rename from pyrogram/client/types/input_media.py rename to pyrogram/client/types/input_media/input_media.py diff --git a/pyrogram/client/types/input_media_animation.py b/pyrogram/client/types/input_media/input_media_animation.py similarity index 100% rename from pyrogram/client/types/input_media_animation.py rename to pyrogram/client/types/input_media/input_media_animation.py diff --git a/pyrogram/client/types/input_media_audio.py b/pyrogram/client/types/input_media/input_media_audio.py similarity index 100% rename from pyrogram/client/types/input_media_audio.py rename to pyrogram/client/types/input_media/input_media_audio.py diff --git a/pyrogram/client/types/input_media_document.py b/pyrogram/client/types/input_media/input_media_document.py similarity index 100% rename from pyrogram/client/types/input_media_document.py rename to pyrogram/client/types/input_media/input_media_document.py diff --git a/pyrogram/client/types/input_media_photo.py b/pyrogram/client/types/input_media/input_media_photo.py similarity index 100% rename from pyrogram/client/types/input_media_photo.py rename to pyrogram/client/types/input_media/input_media_photo.py diff --git a/pyrogram/client/types/input_media_video.py b/pyrogram/client/types/input_media/input_media_video.py similarity index 100% rename from pyrogram/client/types/input_media_video.py rename to pyrogram/client/types/input_media/input_media_video.py diff --git a/pyrogram/client/types/input_phone_contact.py b/pyrogram/client/types/input_media/input_phone_contact.py similarity index 100% rename from pyrogram/client/types/input_phone_contact.py rename to pyrogram/client/types/input_media/input_phone_contact.py From eeb3b67d37411cfd68c7baae93d8d5763f34dd68 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 9 Aug 2018 21:49:14 +0200 Subject: [PATCH 117/530] Create a new sub-folder for user and chat types --- pyrogram/client/types/__init__.py | 11 +++----- .../client/types/user_and_chats/__init__.py | 25 +++++++++++++++++++ .../client/types/{ => user_and_chats}/chat.py | 0 .../types/{ => user_and_chats}/chat_member.py | 0 .../{ => user_and_chats}/chat_members.py | 0 .../types/{ => user_and_chats}/chat_photo.py | 0 .../types/{ => user_and_chats}/dialog.py | 0 .../types/{ => user_and_chats}/dialogs.py | 0 .../client/types/{ => user_and_chats}/user.py | 0 9 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 pyrogram/client/types/user_and_chats/__init__.py rename pyrogram/client/types/{ => user_and_chats}/chat.py (100%) rename pyrogram/client/types/{ => user_and_chats}/chat_member.py (100%) rename pyrogram/client/types/{ => user_and_chats}/chat_members.py (100%) rename pyrogram/client/types/{ => user_and_chats}/chat_photo.py (100%) rename pyrogram/client/types/{ => user_and_chats}/dialog.py (100%) rename pyrogram/client/types/{ => user_and_chats}/dialogs.py (100%) rename pyrogram/client/types/{ => user_and_chats}/user.py (100%) diff --git a/pyrogram/client/types/__init__.py b/pyrogram/client/types/__init__.py index 46332453..13198982 100644 --- a/pyrogram/client/types/__init__.py +++ b/pyrogram/client/types/__init__.py @@ -17,12 +17,6 @@ # along with Pyrogram. If not, see . from .callback_query import CallbackQuery -from .chat import Chat -from .chat_member import ChatMember -from .chat_members import ChatMembers -from .chat_photo import ChatPhoto -from .dialog import Dialog -from .dialogs import Dialogs from .input_media import ( InputMediaAudio, InputPhoneContact, InputMediaVideo, InputMediaPhoto, InputMediaDocument, InputMediaAnimation @@ -39,4 +33,7 @@ from .reply_markup import ( KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove ) from .update import Update -from .user import User +from .user_and_chats import ( + Chat, ChatMember, ChatMembers, ChatPhoto, + Dialog, Dialogs, User +) diff --git a/pyrogram/client/types/user_and_chats/__init__.py b/pyrogram/client/types/user_and_chats/__init__.py new file mode 100644 index 00000000..45915edc --- /dev/null +++ b/pyrogram/client/types/user_and_chats/__init__.py @@ -0,0 +1,25 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from .chat import Chat +from .chat_member import ChatMember +from .chat_members import ChatMembers +from .chat_photo import ChatPhoto +from .dialog import Dialog +from .dialogs import Dialogs +from .user import User diff --git a/pyrogram/client/types/chat.py b/pyrogram/client/types/user_and_chats/chat.py similarity index 100% rename from pyrogram/client/types/chat.py rename to pyrogram/client/types/user_and_chats/chat.py diff --git a/pyrogram/client/types/chat_member.py b/pyrogram/client/types/user_and_chats/chat_member.py similarity index 100% rename from pyrogram/client/types/chat_member.py rename to pyrogram/client/types/user_and_chats/chat_member.py diff --git a/pyrogram/client/types/chat_members.py b/pyrogram/client/types/user_and_chats/chat_members.py similarity index 100% rename from pyrogram/client/types/chat_members.py rename to pyrogram/client/types/user_and_chats/chat_members.py diff --git a/pyrogram/client/types/chat_photo.py b/pyrogram/client/types/user_and_chats/chat_photo.py similarity index 100% rename from pyrogram/client/types/chat_photo.py rename to pyrogram/client/types/user_and_chats/chat_photo.py diff --git a/pyrogram/client/types/dialog.py b/pyrogram/client/types/user_and_chats/dialog.py similarity index 100% rename from pyrogram/client/types/dialog.py rename to pyrogram/client/types/user_and_chats/dialog.py diff --git a/pyrogram/client/types/dialogs.py b/pyrogram/client/types/user_and_chats/dialogs.py similarity index 100% rename from pyrogram/client/types/dialogs.py rename to pyrogram/client/types/user_and_chats/dialogs.py diff --git a/pyrogram/client/types/user.py b/pyrogram/client/types/user_and_chats/user.py similarity index 100% rename from pyrogram/client/types/user.py rename to pyrogram/client/types/user_and_chats/user.py From a93f98cfa6967006b43617a4f7e6703fcb99752b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 9 Aug 2018 21:51:00 +0200 Subject: [PATCH 118/530] Create a new sub-folder for bot related types --- pyrogram/client/types/__init__.py | 13 ++++++++----- .../client/types/{reply_markup => bots}/__init__.py | 1 + pyrogram/client/types/{ => bots}/callback_query.py | 0 .../types/{reply_markup => bots}/force_reply.py | 0 .../inline_keyboard_button.py | 0 .../inline_keyboard_markup.py | 0 .../types/{reply_markup => bots}/keyboard_button.py | 0 .../{reply_markup => bots}/reply_keyboard_markup.py | 0 .../{reply_markup => bots}/reply_keyboard_remove.py | 0 9 files changed, 9 insertions(+), 5 deletions(-) rename pyrogram/client/types/{reply_markup => bots}/__init__.py (96%) rename pyrogram/client/types/{ => bots}/callback_query.py (100%) rename pyrogram/client/types/{reply_markup => bots}/force_reply.py (100%) rename pyrogram/client/types/{reply_markup => bots}/inline_keyboard_button.py (100%) rename pyrogram/client/types/{reply_markup => bots}/inline_keyboard_markup.py (100%) rename pyrogram/client/types/{reply_markup => bots}/keyboard_button.py (100%) rename pyrogram/client/types/{reply_markup => bots}/reply_keyboard_markup.py (100%) rename pyrogram/client/types/{reply_markup => bots}/reply_keyboard_remove.py (100%) diff --git a/pyrogram/client/types/__init__.py b/pyrogram/client/types/__init__.py index 13198982..3fd4a8d1 100644 --- a/pyrogram/client/types/__init__.py +++ b/pyrogram/client/types/__init__.py @@ -16,7 +16,14 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . -from .callback_query import CallbackQuery +from .bots import ( + CallbackQuery, ForceReply, InlineKeyboardButton, InlineKeyboardMarkup, + KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove +) +from .bots import ( + ForceReply, InlineKeyboardButton, InlineKeyboardMarkup, + KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove +) from .input_media import ( InputMediaAudio, InputPhoneContact, InputMediaVideo, InputMediaPhoto, InputMediaDocument, InputMediaAnimation @@ -28,10 +35,6 @@ from .media import ( from .message import Message from .message_entity import MessageEntity from .messages import Messages -from .reply_markup import ( - ForceReply, InlineKeyboardButton, InlineKeyboardMarkup, - KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove -) from .update import Update from .user_and_chats import ( Chat, ChatMember, ChatMembers, ChatPhoto, diff --git a/pyrogram/client/types/reply_markup/__init__.py b/pyrogram/client/types/bots/__init__.py similarity index 96% rename from pyrogram/client/types/reply_markup/__init__.py rename to pyrogram/client/types/bots/__init__.py index 62ce7152..9f7cc7e6 100644 --- a/pyrogram/client/types/reply_markup/__init__.py +++ b/pyrogram/client/types/bots/__init__.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +from .callback_query import CallbackQuery from .force_reply import ForceReply from .inline_keyboard_button import InlineKeyboardButton from .inline_keyboard_markup import InlineKeyboardMarkup diff --git a/pyrogram/client/types/callback_query.py b/pyrogram/client/types/bots/callback_query.py similarity index 100% rename from pyrogram/client/types/callback_query.py rename to pyrogram/client/types/bots/callback_query.py diff --git a/pyrogram/client/types/reply_markup/force_reply.py b/pyrogram/client/types/bots/force_reply.py similarity index 100% rename from pyrogram/client/types/reply_markup/force_reply.py rename to pyrogram/client/types/bots/force_reply.py diff --git a/pyrogram/client/types/reply_markup/inline_keyboard_button.py b/pyrogram/client/types/bots/inline_keyboard_button.py similarity index 100% rename from pyrogram/client/types/reply_markup/inline_keyboard_button.py rename to pyrogram/client/types/bots/inline_keyboard_button.py diff --git a/pyrogram/client/types/reply_markup/inline_keyboard_markup.py b/pyrogram/client/types/bots/inline_keyboard_markup.py similarity index 100% rename from pyrogram/client/types/reply_markup/inline_keyboard_markup.py rename to pyrogram/client/types/bots/inline_keyboard_markup.py diff --git a/pyrogram/client/types/reply_markup/keyboard_button.py b/pyrogram/client/types/bots/keyboard_button.py similarity index 100% rename from pyrogram/client/types/reply_markup/keyboard_button.py rename to pyrogram/client/types/bots/keyboard_button.py diff --git a/pyrogram/client/types/reply_markup/reply_keyboard_markup.py b/pyrogram/client/types/bots/reply_keyboard_markup.py similarity index 100% rename from pyrogram/client/types/reply_markup/reply_keyboard_markup.py rename to pyrogram/client/types/bots/reply_keyboard_markup.py diff --git a/pyrogram/client/types/reply_markup/reply_keyboard_remove.py b/pyrogram/client/types/bots/reply_keyboard_remove.py similarity index 100% rename from pyrogram/client/types/reply_markup/reply_keyboard_remove.py rename to pyrogram/client/types/bots/reply_keyboard_remove.py From 3a5dc20fb52d528c17f6cdd3034e5528d56b1f70 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 9 Aug 2018 21:51:43 +0200 Subject: [PATCH 119/530] Rename reply_markup to bots --- compiler/api/compiler.py | 12 ++++++------ pyrogram/client/filters/filters.py | 2 +- pyrogram/client/types/message.py | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/compiler/api/compiler.py b/compiler/api/compiler.py index 69713867..555d1824 100644 --- a/compiler/api/compiler.py +++ b/compiler/api/compiler.py @@ -494,12 +494,12 @@ def start(): f.write("\n 0xb0700015: \"pyrogram.client.types.ChatPhoto\",") f.write("\n 0xb0700016: \"pyrogram.client.types.ChatMember\",") f.write("\n 0xb0700017: \"pyrogram.client.types.Sticker\",") - f.write("\n 0xb0700018: \"pyrogram.client.types.reply_markup.ForceReply\",") - f.write("\n 0xb0700019: \"pyrogram.client.types.reply_markup.InlineKeyboardButton\",") - f.write("\n 0xb0700020: \"pyrogram.client.types.reply_markup.InlineKeyboardMarkup\",") - f.write("\n 0xb0700021: \"pyrogram.client.types.reply_markup.KeyboardButton\",") - f.write("\n 0xb0700022: \"pyrogram.client.types.reply_markup.ReplyKeyboardMarkup\",") - f.write("\n 0xb0700023: \"pyrogram.client.types.reply_markup.ReplyKeyboardRemove\",") + f.write("\n 0xb0700018: \"pyrogram.client.types.bots.ForceReply\",") + f.write("\n 0xb0700019: \"pyrogram.client.types.bots.InlineKeyboardButton\",") + f.write("\n 0xb0700020: \"pyrogram.client.types.bots.InlineKeyboardMarkup\",") + f.write("\n 0xb0700021: \"pyrogram.client.types.bots.KeyboardButton\",") + f.write("\n 0xb0700022: \"pyrogram.client.types.bots.ReplyKeyboardMarkup\",") + f.write("\n 0xb0700023: \"pyrogram.client.types.bots.ReplyKeyboardRemove\",") f.write("\n 0xb0700024: \"pyrogram.client.types.CallbackQuery\",") f.write("\n 0xb0700025: \"pyrogram.client.types.Animation\",") f.write("\n 0xb0700026: \"pyrogram.client.types.Messages\",") diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index 133ab6c2..e28fdfc5 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -19,7 +19,7 @@ import re from .filter import Filter -from ..types.reply_markup import InlineKeyboardMarkup, ReplyKeyboardMarkup +from ..types.bots import InlineKeyboardMarkup, ReplyKeyboardMarkup def build(name: str, func: callable, **kwargs) -> type: diff --git a/pyrogram/client/types/message.py b/pyrogram/client/types/message.py index 7b05bfac..0a2022e8 100644 --- a/pyrogram/client/types/message.py +++ b/pyrogram/client/types/message.py @@ -17,7 +17,7 @@ # along with Pyrogram. If not, see . from pyrogram.api.core import Object -from .reply_markup import InlineKeyboardMarkup, ReplyKeyboardMarkup +from .bots import InlineKeyboardMarkup, ReplyKeyboardMarkup class Message(Object): From 2b4138ee30e02d569d606ebb59172f1adbcd7e3f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 9 Aug 2018 21:53:49 +0200 Subject: [PATCH 120/530] Add new folder for messages and media related types --- .../client/types/{media => messages_and_media}/__init__.py | 3 +++ .../client/types/{media => messages_and_media}/animation.py | 0 pyrogram/client/types/{media => messages_and_media}/audio.py | 0 pyrogram/client/types/{media => messages_and_media}/contact.py | 0 .../client/types/{media => messages_and_media}/document.py | 0 .../client/types/{media => messages_and_media}/location.py | 0 pyrogram/client/types/{ => messages_and_media}/message.py | 0 .../client/types/{ => messages_and_media}/message_entity.py | 0 pyrogram/client/types/{ => messages_and_media}/messages.py | 0 pyrogram/client/types/{media => messages_and_media}/photo.py | 0 .../client/types/{media => messages_and_media}/photo_size.py | 0 pyrogram/client/types/{media => messages_and_media}/sticker.py | 0 .../types/{media => messages_and_media}/user_profile_photos.py | 0 pyrogram/client/types/{media => messages_and_media}/venue.py | 0 pyrogram/client/types/{media => messages_and_media}/video.py | 0 .../client/types/{media => messages_and_media}/video_note.py | 0 pyrogram/client/types/{media => messages_and_media}/voice.py | 0 17 files changed, 3 insertions(+) rename pyrogram/client/types/{media => messages_and_media}/__init__.py (92%) rename pyrogram/client/types/{media => messages_and_media}/animation.py (100%) rename pyrogram/client/types/{media => messages_and_media}/audio.py (100%) rename pyrogram/client/types/{media => messages_and_media}/contact.py (100%) rename pyrogram/client/types/{media => messages_and_media}/document.py (100%) rename pyrogram/client/types/{media => messages_and_media}/location.py (100%) rename pyrogram/client/types/{ => messages_and_media}/message.py (100%) rename pyrogram/client/types/{ => messages_and_media}/message_entity.py (100%) rename pyrogram/client/types/{ => messages_and_media}/messages.py (100%) rename pyrogram/client/types/{media => messages_and_media}/photo.py (100%) rename pyrogram/client/types/{media => messages_and_media}/photo_size.py (100%) rename pyrogram/client/types/{media => messages_and_media}/sticker.py (100%) rename pyrogram/client/types/{media => messages_and_media}/user_profile_photos.py (100%) rename pyrogram/client/types/{media => messages_and_media}/venue.py (100%) rename pyrogram/client/types/{media => messages_and_media}/video.py (100%) rename pyrogram/client/types/{media => messages_and_media}/video_note.py (100%) rename pyrogram/client/types/{media => messages_and_media}/voice.py (100%) diff --git a/pyrogram/client/types/media/__init__.py b/pyrogram/client/types/messages_and_media/__init__.py similarity index 92% rename from pyrogram/client/types/media/__init__.py rename to pyrogram/client/types/messages_and_media/__init__.py index 07d1280c..3ab359ae 100644 --- a/pyrogram/client/types/media/__init__.py +++ b/pyrogram/client/types/messages_and_media/__init__.py @@ -21,6 +21,9 @@ from .audio import Audio from .contact import Contact from .document import Document from .location import Location +from .message import Message +from .message_entity import MessageEntity +from .messages import Messages from .photo import Photo from .photo_size import PhotoSize from .sticker import Sticker diff --git a/pyrogram/client/types/media/animation.py b/pyrogram/client/types/messages_and_media/animation.py similarity index 100% rename from pyrogram/client/types/media/animation.py rename to pyrogram/client/types/messages_and_media/animation.py diff --git a/pyrogram/client/types/media/audio.py b/pyrogram/client/types/messages_and_media/audio.py similarity index 100% rename from pyrogram/client/types/media/audio.py rename to pyrogram/client/types/messages_and_media/audio.py diff --git a/pyrogram/client/types/media/contact.py b/pyrogram/client/types/messages_and_media/contact.py similarity index 100% rename from pyrogram/client/types/media/contact.py rename to pyrogram/client/types/messages_and_media/contact.py diff --git a/pyrogram/client/types/media/document.py b/pyrogram/client/types/messages_and_media/document.py similarity index 100% rename from pyrogram/client/types/media/document.py rename to pyrogram/client/types/messages_and_media/document.py diff --git a/pyrogram/client/types/media/location.py b/pyrogram/client/types/messages_and_media/location.py similarity index 100% rename from pyrogram/client/types/media/location.py rename to pyrogram/client/types/messages_and_media/location.py diff --git a/pyrogram/client/types/message.py b/pyrogram/client/types/messages_and_media/message.py similarity index 100% rename from pyrogram/client/types/message.py rename to pyrogram/client/types/messages_and_media/message.py diff --git a/pyrogram/client/types/message_entity.py b/pyrogram/client/types/messages_and_media/message_entity.py similarity index 100% rename from pyrogram/client/types/message_entity.py rename to pyrogram/client/types/messages_and_media/message_entity.py diff --git a/pyrogram/client/types/messages.py b/pyrogram/client/types/messages_and_media/messages.py similarity index 100% rename from pyrogram/client/types/messages.py rename to pyrogram/client/types/messages_and_media/messages.py diff --git a/pyrogram/client/types/media/photo.py b/pyrogram/client/types/messages_and_media/photo.py similarity index 100% rename from pyrogram/client/types/media/photo.py rename to pyrogram/client/types/messages_and_media/photo.py diff --git a/pyrogram/client/types/media/photo_size.py b/pyrogram/client/types/messages_and_media/photo_size.py similarity index 100% rename from pyrogram/client/types/media/photo_size.py rename to pyrogram/client/types/messages_and_media/photo_size.py diff --git a/pyrogram/client/types/media/sticker.py b/pyrogram/client/types/messages_and_media/sticker.py similarity index 100% rename from pyrogram/client/types/media/sticker.py rename to pyrogram/client/types/messages_and_media/sticker.py diff --git a/pyrogram/client/types/media/user_profile_photos.py b/pyrogram/client/types/messages_and_media/user_profile_photos.py similarity index 100% rename from pyrogram/client/types/media/user_profile_photos.py rename to pyrogram/client/types/messages_and_media/user_profile_photos.py diff --git a/pyrogram/client/types/media/venue.py b/pyrogram/client/types/messages_and_media/venue.py similarity index 100% rename from pyrogram/client/types/media/venue.py rename to pyrogram/client/types/messages_and_media/venue.py diff --git a/pyrogram/client/types/media/video.py b/pyrogram/client/types/messages_and_media/video.py similarity index 100% rename from pyrogram/client/types/media/video.py rename to pyrogram/client/types/messages_and_media/video.py diff --git a/pyrogram/client/types/media/video_note.py b/pyrogram/client/types/messages_and_media/video_note.py similarity index 100% rename from pyrogram/client/types/media/video_note.py rename to pyrogram/client/types/messages_and_media/video_note.py diff --git a/pyrogram/client/types/media/voice.py b/pyrogram/client/types/messages_and_media/voice.py similarity index 100% rename from pyrogram/client/types/media/voice.py rename to pyrogram/client/types/messages_and_media/voice.py From 888b3cc6aab07b929840cf75847e75af1d1df10b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 9 Aug 2018 21:55:06 +0200 Subject: [PATCH 121/530] Add missing import --- pyrogram/client/types/input_media/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyrogram/client/types/input_media/__init__.py b/pyrogram/client/types/input_media/__init__.py index 4b3d90a3..5f5be30d 100644 --- a/pyrogram/client/types/input_media/__init__.py +++ b/pyrogram/client/types/input_media/__init__.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +from .input_media import InputMedia from .input_media_animation import InputMediaAnimation from .input_media_audio import InputMediaAudio from .input_media_document import InputMediaDocument From 61663b3dde608b7a3121d2197736fa5f2d1dd400 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:16:31 +0200 Subject: [PATCH 122/530] Add new utilities folder --- pyrogram/client/methods/utilities/__init__.py | 25 +++++++++++++++++++ .../methods/{ => utilities}/download_media.py | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 pyrogram/client/methods/utilities/__init__.py rename pyrogram/client/methods/{ => utilities}/download_media.py (99%) diff --git a/pyrogram/client/methods/utilities/__init__.py b/pyrogram/client/methods/utilities/__init__.py new file mode 100644 index 00000000..f8db23e5 --- /dev/null +++ b/pyrogram/client/methods/utilities/__init__.py @@ -0,0 +1,25 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from .download_media import DownloadMedia + + +class Utilities( + DownloadMedia +): + pass diff --git a/pyrogram/client/methods/download_media.py b/pyrogram/client/methods/utilities/download_media.py similarity index 99% rename from pyrogram/client/methods/download_media.py rename to pyrogram/client/methods/utilities/download_media.py index 816a8cba..d511667c 100644 --- a/pyrogram/client/methods/download_media.py +++ b/pyrogram/client/methods/utilities/download_media.py @@ -19,7 +19,7 @@ from threading import Event from pyrogram.client import types as pyrogram_types -from ..ext import BaseClient +from ...ext import BaseClient class DownloadMedia(BaseClient): From 4e6add7a70fd25596588761033166dd22dfb3500 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:16:57 +0200 Subject: [PATCH 123/530] Fix download_media referencing to gif instead of animation --- pyrogram/client/methods/utilities/download_media.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/methods/utilities/download_media.py b/pyrogram/client/methods/utilities/download_media.py index d511667c..26918f27 100644 --- a/pyrogram/client/methods/utilities/download_media.py +++ b/pyrogram/client/methods/utilities/download_media.py @@ -98,8 +98,8 @@ class DownloadMedia(BaseClient): media = message.video_note elif message.sticker: media = message.sticker - elif message.gif: - media = message.gif + elif message.animation: + media = message.animation else: raise ValueError(error_message) elif isinstance(message, ( From 42d3b467fbec32b1314042271c2a08c798ce025f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:17:21 +0200 Subject: [PATCH 124/530] Fix init not having message and media types --- pyrogram/client/types/__init__.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pyrogram/client/types/__init__.py b/pyrogram/client/types/__init__.py index 3fd4a8d1..230d5e5d 100644 --- a/pyrogram/client/types/__init__.py +++ b/pyrogram/client/types/__init__.py @@ -28,13 +28,11 @@ from .input_media import ( InputMediaAudio, InputPhoneContact, InputMediaVideo, InputMediaPhoto, InputMediaDocument, InputMediaAnimation ) -from .media import ( +from .messages_and_media import ( Audio, Contact, Document, Animation, Location, Photo, PhotoSize, - Sticker, Venue, Video, VideoNote, Voice, UserProfilePhotos + Sticker, Venue, Video, VideoNote, Voice, UserProfilePhotos, + Message, Messages, MessageEntity ) -from .message import Message -from .message_entity import MessageEntity -from .messages import Messages from .update import Update from .user_and_chats import ( Chat, ChatMember, ChatMembers, ChatPhoto, From 6437c6c5be6745f6001159b58b8d8082176df8d7 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:17:53 +0200 Subject: [PATCH 125/530] Move resolve_peer into utilities --- pyrogram/client/client.py | 48 ------------ .../client/methods/utilities/resolve_peer.py | 73 +++++++++++++++++++ 2 files changed, 73 insertions(+), 48 deletions(-) create mode 100644 pyrogram/client/methods/utilities/resolve_peer.py diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 3af60931..9fcf6324 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -1010,54 +1010,6 @@ class Client(Methods, BaseClient): self.get_initial_dialogs_chunk() - def resolve_peer(self, peer_id: int or str): - """Use this method to get the InputPeer of a known peer_id. - - This is a utility method intended to be used only when working with Raw Functions (i.e: a Telegram API method - you wish to use which is not available yet in the Client class as an easy-to-use method), whenever an InputPeer - type is required. - - Args: - peer_id (``int`` | ``str``): - The peer id you want to extract the InputPeer from. - Can be a direct id (int), a username (str) or a phone number (str). - - Returns: - On success, the resolved peer id is returned in form of an InputPeer object. - - Raises: - :class:`Error ` - """ - if type(peer_id) is str: - if peer_id in ("self", "me"): - return types.InputPeerSelf() - - peer_id = re.sub(r"[@+\s]", "", peer_id.lower()) - - try: - int(peer_id) - except ValueError: - if peer_id not in self.peers_by_username: - self.send(functions.contacts.ResolveUsername(peer_id)) - - return self.peers_by_username[peer_id] - else: - try: - return self.peers_by_phone[peer_id] - except KeyError: - raise PeerIdInvalid - - try: # User - return self.peers_by_id[peer_id] - except KeyError: - try: # Chat - return self.peers_by_id[-peer_id] - except KeyError: - try: # Channel - return self.peers_by_id[int("-100" + str(peer_id))] - except (KeyError, ValueError): - raise PeerIdInvalid - def save_file(self, path: str, file_id: int = None, diff --git a/pyrogram/client/methods/utilities/resolve_peer.py b/pyrogram/client/methods/utilities/resolve_peer.py new file mode 100644 index 00000000..7cf31078 --- /dev/null +++ b/pyrogram/client/methods/utilities/resolve_peer.py @@ -0,0 +1,73 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +import re + +from pyrogram.api import types, functions +from pyrogram.api.errors import PeerIdInvalid +from ...ext import BaseClient + + +class ResolvePeer(BaseClient): + def resolve_peer(self, peer_id: int or str): + """Use this method to get the InputPeer of a known peer_id. + + This is a utility method intended to be used only when working with Raw Functions (i.e: a Telegram API method + you wish to use which is not available yet in the Client class as an easy-to-use method), whenever an InputPeer + type is required. + + Args: + peer_id (``int`` | ``str``): + The peer id you want to extract the InputPeer from. + Can be a direct id (int), a username (str) or a phone number (str). + + Returns: + On success, the resolved peer id is returned in form of an InputPeer object. + + Raises: + :class:`Error ` + """ + if type(peer_id) is str: + if peer_id in ("self", "me"): + return types.InputPeerSelf() + + peer_id = re.sub(r"[@+\s]", "", peer_id.lower()) + + try: + int(peer_id) + except ValueError: + if peer_id not in self.peers_by_username: + self.send(functions.contacts.ResolveUsername(peer_id)) + + return self.peers_by_username[peer_id] + else: + try: + return self.peers_by_phone[peer_id] + except KeyError: + raise PeerIdInvalid + + try: # User + return self.peers_by_id[peer_id] + except KeyError: + try: # Chat + return self.peers_by_id[-peer_id] + except KeyError: + try: # Channel + return self.peers_by_id[int("-100" + str(peer_id))] + except (KeyError, ValueError): + raise PeerIdInvalid From dd422c0edfe8f2b40bfc8c40aab4b2c89da7c82d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:18:28 +0200 Subject: [PATCH 126/530] Export resolve_peer --- pyrogram/client/methods/__init__.py | 4 ++-- pyrogram/client/methods/utilities/__init__.py | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/methods/__init__.py b/pyrogram/client/methods/__init__.py index 396fd3c2..e245a14a 100644 --- a/pyrogram/client/methods/__init__.py +++ b/pyrogram/client/methods/__init__.py @@ -20,7 +20,7 @@ from .bots import Bots from .chats import Chats from .contacts import Contacts from .decorators import Decorators -from .download_media import DownloadMedia +from .utilities import Utilities from .messages import Messages from .password import Password from .users import Users @@ -32,7 +32,7 @@ class Methods( Password, Chats, Users, - DownloadMedia, + Utilities, Messages, Decorators ): diff --git a/pyrogram/client/methods/utilities/__init__.py b/pyrogram/client/methods/utilities/__init__.py index f8db23e5..b14c2a1f 100644 --- a/pyrogram/client/methods/utilities/__init__.py +++ b/pyrogram/client/methods/utilities/__init__.py @@ -17,9 +17,11 @@ # along with Pyrogram. If not, see . from .download_media import DownloadMedia +from .resolve_peer import ResolvePeer class Utilities( - DownloadMedia + DownloadMedia, + ResolvePeer ): pass From ef6f08054672924a8a47e6611f41828236c57924 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:29:05 +0200 Subject: [PATCH 127/530] Revert "Export resolve_peer" This reverts commit dd422c0 --- pyrogram/client/methods/__init__.py | 4 ++-- pyrogram/client/methods/utilities/__init__.py | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/pyrogram/client/methods/__init__.py b/pyrogram/client/methods/__init__.py index e245a14a..396fd3c2 100644 --- a/pyrogram/client/methods/__init__.py +++ b/pyrogram/client/methods/__init__.py @@ -20,7 +20,7 @@ from .bots import Bots from .chats import Chats from .contacts import Contacts from .decorators import Decorators -from .utilities import Utilities +from .download_media import DownloadMedia from .messages import Messages from .password import Password from .users import Users @@ -32,7 +32,7 @@ class Methods( Password, Chats, Users, - Utilities, + DownloadMedia, Messages, Decorators ): diff --git a/pyrogram/client/methods/utilities/__init__.py b/pyrogram/client/methods/utilities/__init__.py index b14c2a1f..f8db23e5 100644 --- a/pyrogram/client/methods/utilities/__init__.py +++ b/pyrogram/client/methods/utilities/__init__.py @@ -17,11 +17,9 @@ # along with Pyrogram. If not, see . from .download_media import DownloadMedia -from .resolve_peer import ResolvePeer class Utilities( - DownloadMedia, - ResolvePeer + DownloadMedia ): pass From da436461a88b7d8a80b05ae770ea8d9e9e82de88 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:29:13 +0200 Subject: [PATCH 128/530] Revert "Move resolve_peer into utilities" This reverts commit 6437c6c --- pyrogram/client/client.py | 48 ++++++++++++ .../client/methods/utilities/resolve_peer.py | 73 ------------------- 2 files changed, 48 insertions(+), 73 deletions(-) delete mode 100644 pyrogram/client/methods/utilities/resolve_peer.py diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 9fcf6324..3af60931 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -1010,6 +1010,54 @@ class Client(Methods, BaseClient): self.get_initial_dialogs_chunk() + def resolve_peer(self, peer_id: int or str): + """Use this method to get the InputPeer of a known peer_id. + + This is a utility method intended to be used only when working with Raw Functions (i.e: a Telegram API method + you wish to use which is not available yet in the Client class as an easy-to-use method), whenever an InputPeer + type is required. + + Args: + peer_id (``int`` | ``str``): + The peer id you want to extract the InputPeer from. + Can be a direct id (int), a username (str) or a phone number (str). + + Returns: + On success, the resolved peer id is returned in form of an InputPeer object. + + Raises: + :class:`Error ` + """ + if type(peer_id) is str: + if peer_id in ("self", "me"): + return types.InputPeerSelf() + + peer_id = re.sub(r"[@+\s]", "", peer_id.lower()) + + try: + int(peer_id) + except ValueError: + if peer_id not in self.peers_by_username: + self.send(functions.contacts.ResolveUsername(peer_id)) + + return self.peers_by_username[peer_id] + else: + try: + return self.peers_by_phone[peer_id] + except KeyError: + raise PeerIdInvalid + + try: # User + return self.peers_by_id[peer_id] + except KeyError: + try: # Chat + return self.peers_by_id[-peer_id] + except KeyError: + try: # Channel + return self.peers_by_id[int("-100" + str(peer_id))] + except (KeyError, ValueError): + raise PeerIdInvalid + def save_file(self, path: str, file_id: int = None, diff --git a/pyrogram/client/methods/utilities/resolve_peer.py b/pyrogram/client/methods/utilities/resolve_peer.py deleted file mode 100644 index 7cf31078..00000000 --- a/pyrogram/client/methods/utilities/resolve_peer.py +++ /dev/null @@ -1,73 +0,0 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - -import re - -from pyrogram.api import types, functions -from pyrogram.api.errors import PeerIdInvalid -from ...ext import BaseClient - - -class ResolvePeer(BaseClient): - def resolve_peer(self, peer_id: int or str): - """Use this method to get the InputPeer of a known peer_id. - - This is a utility method intended to be used only when working with Raw Functions (i.e: a Telegram API method - you wish to use which is not available yet in the Client class as an easy-to-use method), whenever an InputPeer - type is required. - - Args: - peer_id (``int`` | ``str``): - The peer id you want to extract the InputPeer from. - Can be a direct id (int), a username (str) or a phone number (str). - - Returns: - On success, the resolved peer id is returned in form of an InputPeer object. - - Raises: - :class:`Error ` - """ - if type(peer_id) is str: - if peer_id in ("self", "me"): - return types.InputPeerSelf() - - peer_id = re.sub(r"[@+\s]", "", peer_id.lower()) - - try: - int(peer_id) - except ValueError: - if peer_id not in self.peers_by_username: - self.send(functions.contacts.ResolveUsername(peer_id)) - - return self.peers_by_username[peer_id] - else: - try: - return self.peers_by_phone[peer_id] - except KeyError: - raise PeerIdInvalid - - try: # User - return self.peers_by_id[peer_id] - except KeyError: - try: # Chat - return self.peers_by_id[-peer_id] - except KeyError: - try: # Channel - return self.peers_by_id[int("-100" + str(peer_id))] - except (KeyError, ValueError): - raise PeerIdInvalid From 7162850523adbd71d1c8f4298d7af1c8c3e44e09 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:29:55 +0200 Subject: [PATCH 129/530] Export Utility methods --- pyrogram/client/methods/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/methods/__init__.py b/pyrogram/client/methods/__init__.py index 396fd3c2..eba768bb 100644 --- a/pyrogram/client/methods/__init__.py +++ b/pyrogram/client/methods/__init__.py @@ -20,10 +20,10 @@ from .bots import Bots from .chats import Chats from .contacts import Contacts from .decorators import Decorators -from .download_media import DownloadMedia from .messages import Messages from .password import Password from .users import Users +from .utilities import Utilities class Methods( @@ -32,7 +32,7 @@ class Methods( Password, Chats, Users, - DownloadMedia, + Utilities, Messages, Decorators ): From 9c7de81d8214826d2df3f23abcee5de90ee1f246 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 10 Aug 2018 11:30:36 +0200 Subject: [PATCH 130/530] Fix relative imports --- pyrogram/client/types/messages_and_media/message.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/types/messages_and_media/message.py b/pyrogram/client/types/messages_and_media/message.py index 0a2022e8..3065cf9f 100644 --- a/pyrogram/client/types/messages_and_media/message.py +++ b/pyrogram/client/types/messages_and_media/message.py @@ -17,7 +17,7 @@ # along with Pyrogram. If not, see . from pyrogram.api.core import Object -from .bots import InlineKeyboardMarkup, ReplyKeyboardMarkup +from ..bots import InlineKeyboardMarkup, ReplyKeyboardMarkup class Message(Object): From 3ccb3de3f4413857e6cab21fbb7e95f68fba3f11 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 11 Aug 2018 19:46:43 +0200 Subject: [PATCH 131/530] Fix docs still containing GIF instead of Animation --- docs/source/pyrogram/Client.rst | 2 +- docs/source/pyrogram/types/index.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/pyrogram/Client.rst b/docs/source/pyrogram/Client.rst index 642d43d8..5dd42e4e 100644 --- a/docs/source/pyrogram/Client.rst +++ b/docs/source/pyrogram/Client.rst @@ -48,7 +48,7 @@ Messages send_document send_sticker send_video - send_gif + send_animation send_voice send_video_note send_media_group diff --git a/docs/source/pyrogram/types/index.rst b/docs/source/pyrogram/types/index.rst index d93ecceb..92093b11 100644 --- a/docs/source/pyrogram/types/index.rst +++ b/docs/source/pyrogram/types/index.rst @@ -31,7 +31,7 @@ Messages & Media UserProfilePhotos Audio Document - GIF + Animation Video Voice VideoNote @@ -115,7 +115,7 @@ Input Media .. autoclass:: Document :members: -.. autoclass:: GIF +.. autoclass:: Animation :members: .. autoclass:: Video From 80179f2f25aebbd26a2b1a30580d0e558cdcc244 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 11 Aug 2018 19:47:49 +0200 Subject: [PATCH 132/530] Rework Handler's page They are now all listed in a single page --- docs/source/pyrogram/handlers/index.rst | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/docs/source/pyrogram/handlers/index.rst b/docs/source/pyrogram/handlers/index.rst index 272e529f..9f69c2c9 100644 --- a/docs/source/pyrogram/handlers/index.rst +++ b/docs/source/pyrogram/handlers/index.rst @@ -1,11 +1,29 @@ -:tocdepth: 1 - Handlers ======== -.. toctree:: +.. currentmodule:: pyrogram + +.. autosummary:: + :nosignatures: + MessageHandler DeletedMessagesHandler CallbackQueryHandler DisconnectHandler RawUpdateHandler + +.. autoclass:: MessageHandler + :members: + +.. autoclass:: DeletedMessagesHandler + :members: + +.. autoclass:: CallbackQueryHandler + :members: + +.. autoclass:: DisconnectHandler + :members: + +.. autoclass:: RawUpdateHandler + :members: + From 58568686a4c326579b1b8cbef7998772ef396739 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 11 Aug 2018 19:50:03 +0200 Subject: [PATCH 133/530] Delete unused files --- docs/source/pyrogram/handlers/CallbackQueryHandler.rst | 6 ------ docs/source/pyrogram/handlers/DeletedMessagesHandler.rst | 6 ------ docs/source/pyrogram/handlers/DisconnectHandler.rst | 6 ------ docs/source/pyrogram/handlers/MessageHandler.rst | 6 ------ docs/source/pyrogram/handlers/RawUpdateHandler.rst | 6 ------ 5 files changed, 30 deletions(-) delete mode 100644 docs/source/pyrogram/handlers/CallbackQueryHandler.rst delete mode 100644 docs/source/pyrogram/handlers/DeletedMessagesHandler.rst delete mode 100644 docs/source/pyrogram/handlers/DisconnectHandler.rst delete mode 100644 docs/source/pyrogram/handlers/MessageHandler.rst delete mode 100644 docs/source/pyrogram/handlers/RawUpdateHandler.rst diff --git a/docs/source/pyrogram/handlers/CallbackQueryHandler.rst b/docs/source/pyrogram/handlers/CallbackQueryHandler.rst deleted file mode 100644 index 5c9f4c17..00000000 --- a/docs/source/pyrogram/handlers/CallbackQueryHandler.rst +++ /dev/null @@ -1,6 +0,0 @@ -CallbackQueryHandler -==================== - -.. autoclass:: pyrogram.CallbackQueryHandler - :members: - :undoc-members: diff --git a/docs/source/pyrogram/handlers/DeletedMessagesHandler.rst b/docs/source/pyrogram/handlers/DeletedMessagesHandler.rst deleted file mode 100644 index 128bc656..00000000 --- a/docs/source/pyrogram/handlers/DeletedMessagesHandler.rst +++ /dev/null @@ -1,6 +0,0 @@ -DeletedMessagesHandler -====================== - -.. autoclass:: pyrogram.DeletedMessagesHandler - :members: - :undoc-members: diff --git a/docs/source/pyrogram/handlers/DisconnectHandler.rst b/docs/source/pyrogram/handlers/DisconnectHandler.rst deleted file mode 100644 index 594081f1..00000000 --- a/docs/source/pyrogram/handlers/DisconnectHandler.rst +++ /dev/null @@ -1,6 +0,0 @@ -DisconnectHandler -================= - -.. autoclass:: pyrogram.DisconnectHandler - :members: - :undoc-members: diff --git a/docs/source/pyrogram/handlers/MessageHandler.rst b/docs/source/pyrogram/handlers/MessageHandler.rst deleted file mode 100644 index de908bd3..00000000 --- a/docs/source/pyrogram/handlers/MessageHandler.rst +++ /dev/null @@ -1,6 +0,0 @@ -MessageHandler -============== - -.. autoclass:: pyrogram.MessageHandler - :members: - :undoc-members: diff --git a/docs/source/pyrogram/handlers/RawUpdateHandler.rst b/docs/source/pyrogram/handlers/RawUpdateHandler.rst deleted file mode 100644 index a6d21ef3..00000000 --- a/docs/source/pyrogram/handlers/RawUpdateHandler.rst +++ /dev/null @@ -1,6 +0,0 @@ -RawUpdateHandler -================ - -.. autoclass:: pyrogram.RawUpdateHandler - :members: - :undoc-members: From ece50e5f9bcff6fa90c8937492876749c8adba8f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 12 Aug 2018 13:30:54 +0200 Subject: [PATCH 134/530] Rename Filters.gif to Filters.animation --- pyrogram/client/filters/filters.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index e28fdfc5..5c2538f4 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -69,8 +69,8 @@ class Filters: sticker = build("Sticker", lambda _, m: bool(m.sticker)) """Filter messages that contain :obj:`Sticker ` objects.""" - gif = build("GIF", lambda _, m: bool(m.gif)) - """Filter messages that contain :obj:`GIF ` objects.""" + animation = build("GIF", lambda _, m: bool(m.animation)) + """Filter messages that contain :obj:`Animation ` objects.""" video = build("Video", lambda _, m: bool(m.video)) """Filter messages that contain :obj:`Video ` objects.""" @@ -276,7 +276,7 @@ class Filters: or Filters.photo(m) or Filters.sticker(m) or Filters.video(m) - or Filters.gif(m) + or Filters.animation(m) or Filters.voice(m) or Filters.video_note(m) or Filters.contact(m) From cbe34d0b28a4a3d0dcb80c96164b5c7084abdd3b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 12 Aug 2018 13:31:24 +0200 Subject: [PATCH 135/530] Remove handlers and types doc page containing folders --- docs/source/pyrogram/{handlers/index.rst => Handlers.rst} | 0 docs/source/pyrogram/{types/index.rst => Types.rst} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename docs/source/pyrogram/{handlers/index.rst => Handlers.rst} (100%) rename docs/source/pyrogram/{types/index.rst => Types.rst} (100%) diff --git a/docs/source/pyrogram/handlers/index.rst b/docs/source/pyrogram/Handlers.rst similarity index 100% rename from docs/source/pyrogram/handlers/index.rst rename to docs/source/pyrogram/Handlers.rst diff --git a/docs/source/pyrogram/types/index.rst b/docs/source/pyrogram/Types.rst similarity index 100% rename from docs/source/pyrogram/types/index.rst rename to docs/source/pyrogram/Types.rst From 7d516bfff24dbd2e4eaa0f5deeb5275d4e07cce6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 12 Aug 2018 13:31:58 +0200 Subject: [PATCH 136/530] Fix Pyrogram doc package index page --- docs/source/pyrogram/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/pyrogram/index.rst b/docs/source/pyrogram/index.rst index af8b281a..20e7c918 100644 --- a/docs/source/pyrogram/index.rst +++ b/docs/source/pyrogram/index.rst @@ -10,8 +10,8 @@ after the well established `Telegram Bot API`_ methods, thus offering a familiar :maxdepth: 1 Client - types/index - handlers/index + Types + Handlers Filters ChatAction ParseMode From ba549c2862335bd041a2bb6f0bab6accfadd82af Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 12 Aug 2018 13:32:10 +0200 Subject: [PATCH 137/530] Remove tocdepth --- docs/source/pyrogram/Error.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/source/pyrogram/Error.rst b/docs/source/pyrogram/Error.rst index 96a140fa..b5474e73 100644 --- a/docs/source/pyrogram/Error.rst +++ b/docs/source/pyrogram/Error.rst @@ -1,5 +1,3 @@ -:tocdepth: 1 - Error ===== From 85c50ef4dd09e16840385efac39e3794dd9928d2 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 13 Aug 2018 22:06:20 +0200 Subject: [PATCH 138/530] Add phone_number message entity --- pyrogram/client/ext/utils.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index c1d859d0..9508a426 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -69,7 +69,8 @@ ENTITIES = { types.MessageEntityCode.ID: "code", types.MessageEntityPre.ID: "pre", types.MessageEntityTextUrl.ID: "text_link", - types.MessageEntityMentionName.ID: "text_mention" + types.MessageEntityMentionName.ID: "text_mention", + types.MessageEntityPhone.ID: "phone_number" } From 4fe9cffc32ad511c269774a153a173dca39a0931 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 13 Aug 2018 22:06:43 +0200 Subject: [PATCH 139/530] Code style fix --- pyrogram/client/ext/utils.py | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 9508a426..8f3245a9 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -81,18 +81,20 @@ def parse_entities(entities: list, users: dict) -> list: entity_type = ENTITIES.get(entity.ID, None) if entity_type: - output_entities.append(pyrogram_types.MessageEntity( - type=entity_type, - offset=entity.offset, - length=entity.length, - url=getattr(entity, "url", None), - user=parse_user( - users.get( - getattr(entity, "user_id", None), - None + output_entities.append( + pyrogram_types.MessageEntity( + type=entity_type, + offset=entity.offset, + length=entity.length, + url=getattr(entity, "url", None), + user=parse_user( + users.get( + getattr(entity, "user_id", None), + None + ) ) ) - )) + ) return output_entities From ec0d6dd6e0df8c7ab9eaab7760544531bff7044f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 14 Aug 2018 14:14:03 +0200 Subject: [PATCH 140/530] Add support for animations in edit_message_media --- .../methods/messages/edit_message_media.py | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index c6b2eb97..086d8dc2 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -25,7 +25,8 @@ from pyrogram.api import functions, types from pyrogram.api.errors import FileIdInvalid from pyrogram.client.ext import BaseClient, utils from pyrogram.client.types import ( - InputMediaPhoto, InputMediaVideo, InputMediaAudio + InputMediaPhoto, InputMediaVideo, InputMediaAudio, + InputMediaAnimation ) @@ -189,6 +190,61 @@ class EditMessageMedia(BaseClient): ) ) + if isinstance(media, InputMediaAnimation): + if os.path.exists(media.media): + media = self.send( + functions.messages.UploadMedia( + peer=self.resolve_peer(chat_id), + media=types.InputMediaUploadedDocument( + mime_type=mimetypes.types_map[".mp4"], + file=self.save_file(media.media), + attributes=[ + types.DocumentAttributeVideo( + supports_streaming=True, + duration=media.duration, + w=media.width, + h=media.height + ), + types.DocumentAttributeFilename(os.path.basename(media.media)), + types.DocumentAttributeAnimated() + ] + ) + ) + ) + + media = types.InputMediaDocument( + id=types.InputDocument( + id=media.document.id, + access_hash=media.document.access_hash + ) + ) + elif media.media.startswith("http"): + media = types.InputMediaDocumentExternal( + url=media.media + ) + else: + try: + decoded = utils.decode(media.media) + fmt = " 24 else " Date: Tue, 14 Aug 2018 14:25:54 +0200 Subject: [PATCH 141/530] Add foursquare_type to Venue --- pyrogram/client/ext/utils.py | 3 ++- pyrogram/client/types/messages_and_media/venue.py | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 8f3245a9..b98a05a8 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -378,7 +378,8 @@ def parse_messages( ), title=media.title, address=media.address, - foursquare_id=media.venue_id or None + foursquare_id=media.venue_id or None, + foursquare_type=media.venue_type ) elif isinstance(media, types.MessageMediaDocument): doc = media.document diff --git a/pyrogram/client/types/messages_and_media/venue.py b/pyrogram/client/types/messages_and_media/venue.py index 5d9e387f..3c5b2b05 100644 --- a/pyrogram/client/types/messages_and_media/venue.py +++ b/pyrogram/client/types/messages_and_media/venue.py @@ -35,12 +35,24 @@ class Venue(Object): foursquare_id (``str``, *optional*): Foursquare identifier of the venue. + foursquare_type (``str``, *optional*): + Foursquare type of the venue. + (For example, "arts_entertainment/default", "arts_entertainment/aquarium" or "food/icecream".) + """ ID = 0xb0700013 - def __init__(self, location, title: str, address: str, foursquare_id: str = None): + def __init__( + self, + location, + title: str, + address: str, + foursquare_id: str = None, + foursquare_type: str = None + ): self.location = location self.title = title self.address = address self.foursquare_id = foursquare_id + self.foursquare_type = foursquare_type From 49e2e529e13d23b0dbaca72eeb0a52898950724f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 14 Aug 2018 14:36:01 +0200 Subject: [PATCH 142/530] Add parameter foursquare_type to send_venue method --- pyrogram/client/methods/messages/send_venue.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/messages/send_venue.py b/pyrogram/client/methods/messages/send_venue.py index 39ae0ca2..3decd5fb 100644 --- a/pyrogram/client/methods/messages/send_venue.py +++ b/pyrogram/client/methods/messages/send_venue.py @@ -28,6 +28,7 @@ class SendVenue(BaseClient): title: str, address: str, foursquare_id: str = "", + foursquare_type: str = "", disable_notification: bool = None, reply_to_message_id: int = None, reply_markup=None): @@ -54,6 +55,10 @@ class SendVenue(BaseClient): foursquare_id (``str``, *optional*): Foursquare identifier of the venue. + foursquare_type (``str``, *optional*): + Foursquare type of the venue, if known. + (For example, "arts_entertainment/default", "arts_entertainment/aquarium" or "food/icecream".) + disable_notification (``bool``, *optional*): Sends the message silently. Users will receive a notification with no sound. @@ -83,7 +88,7 @@ class SendVenue(BaseClient): address=address, provider="", venue_id=foursquare_id, - venue_type="" + venue_type=foursquare_type ), message="", silent=disable_notification or None, From 6879a4da9b107bb223ad8e3425a70a108dcf8189 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 15 Aug 2018 22:33:01 +0200 Subject: [PATCH 143/530] Update vcard docstrings for Contact type and send_contact method --- pyrogram/client/methods/messages/send_contact.py | 2 +- pyrogram/client/types/messages_and_media/contact.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pyrogram/client/methods/messages/send_contact.py b/pyrogram/client/methods/messages/send_contact.py index 99a96abc..f661a31f 100644 --- a/pyrogram/client/methods/messages/send_contact.py +++ b/pyrogram/client/methods/messages/send_contact.py @@ -48,7 +48,7 @@ class SendContact(BaseClient): Contact's last name. vcard (``str``, *optional*): - Contact's vCard information. + Additional data about the contact in the form of a vCard, 0-2048 bytes disable_notification (``bool``, *optional*): Sends the message silently. diff --git a/pyrogram/client/types/messages_and_media/contact.py b/pyrogram/client/types/messages_and_media/contact.py index a59e2047..a7be558e 100644 --- a/pyrogram/client/types/messages_and_media/contact.py +++ b/pyrogram/client/types/messages_and_media/contact.py @@ -32,11 +32,11 @@ class Contact(Object): last_name (``str``, *optional*): Contact's last name. - vcard (``str``, *optional*): - Contact's vCard. - user_id (``int``, *optional*): Contact's user identifier in Telegram. + + vcard (``str``, *optional*): + Additional data about the contact in the form of a vCard """ ID = 0xb0700011 @@ -46,11 +46,11 @@ class Contact(Object): phone_number: str, first_name: str, last_name: str = None, - vcard: str = None, - user_id: int = None + user_id: int = None, + vcard: str = None ): self.phone_number = phone_number self.first_name = first_name self.last_name = last_name - self.vcard = vcard self.user_id = user_id + self.vcard = vcard From 30620cb783759f240a712854dcd12402a0fd116a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 16 Aug 2018 18:53:53 +0200 Subject: [PATCH 144/530] Refine API Keys documentation section --- docs/source/start/Setup.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/source/start/Setup.rst b/docs/source/start/Setup.rst index 417d62d8..79fb169d 100644 --- a/docs/source/start/Setup.rst +++ b/docs/source/start/Setup.rst @@ -8,14 +8,17 @@ with Pyrogram. API Keys -------- -The very first step requires you to obtain a valid Telegram API key. +The very first step requires you to obtain a valid Telegram API key (API id/hash pair). If you already have one you can skip this step, otherwise: #. Visit https://my.telegram.org/apps and log in with your Telegram Account. #. Fill out the form to register a new Telegram application. -#. Done. The Telegram API key consists of two parts: the **App api_id** and the **App api_hash**. +#. Done. The API key consists of two parts: **App api_id** and **App api_hash**. -.. important:: This key should be kept secret. + +.. important:: + + This API key is personal and should be kept secret. Configuration ------------- From a7c9dd4a59b4e0933c4a58ce985045ed046c1ecb Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 16 Aug 2018 18:54:38 +0200 Subject: [PATCH 145/530] Make it clear that API keys are required for bots too --- docs/source/start/Setup.rst | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/docs/source/start/Setup.rst b/docs/source/start/Setup.rst index 79fb169d..17449911 100644 --- a/docs/source/start/Setup.rst +++ b/docs/source/start/Setup.rst @@ -23,10 +23,14 @@ If you already have one you can skip this step, otherwise: Configuration ------------- -There are two ways to configure a Pyrogram application project, and you can choose the one that fits better for you: +The API key obtained in the `previous step <#api-keys>`_ defines a token for your application allowing you to access +the Telegram database using the MTProto API — **it is therefore required for all authorizations of both Users and Bots**. + +Having it handy, it's time to configure your Pyrogram project. There are two ways to do so, and you can choose what +fits better for you: - Create a new ``config.ini`` file at the root of your working directory, copy-paste the following and replace the - **api_id** and **api_hash** values with `your own <#api-keys>`_. This is the preferred method because allows you + **api_id** and **api_hash** values with your own. This is the preferred method because allows you to keep your credentials out of your code without having to deal with how to load them: .. code-block:: ini @@ -84,11 +88,12 @@ and as long as you keep the session alive, Pyrogram won't ask you again to enter Bot Authorization ----------------- -Being written entirely from the ground up, Pyrogram is also able to authorize Bots. -Bots are a special kind of users which also make use of MTProto, the underlying Telegram protocol. -This means that you can use Pyrogram to execute API calls with a Bot identity. +Bots are a special kind of users and are authorized via their tokens (instead of phone numbers), which are created by +BotFather_. Bot tokens replace the Users' phone numbers only — you still need to +`configure a Telegram API key <#configuration>`_ with Pyrogram, even when using Bots. -Instead of phone numbers, Bots are authorized via their tokens which are created by BotFather_: +The authorization process is automatically managed. All you need to do is pass the bot token as ``session_name``. +The session file will be named after the Bot user_id, which is ``123456.session`` for the example below. .. code-block:: python @@ -97,9 +102,6 @@ Instead of phone numbers, Bots are authorized via their tokens which are created app = Client("123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11") app.run() -That's all, no further action is needed. The session file will be named after the Bot user_id, which is -``123456.session`` for the example above. - .. _installed Pyrogram: Installation.html .. _`Country Code`: https://en.wikipedia.org/wiki/List_of_country_calling_codes .. _BotFather: https://t.me/botfather \ No newline at end of file From 173fabd869616c82e8fd1172bf6ec4acb2012217 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 16 Aug 2018 18:55:27 +0200 Subject: [PATCH 146/530] Small Setup page fixes and refinements --- docs/source/start/Setup.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/source/start/Setup.rst b/docs/source/start/Setup.rst index 17449911..e0cccc2c 100644 --- a/docs/source/start/Setup.rst +++ b/docs/source/start/Setup.rst @@ -52,7 +52,8 @@ fits better for you: api_hash="0123456789abcdef0123456789abcdef" ) -.. note:: The examples below assume you have created a ``config.ini`` file, thus they won't show the *api_id* +.. note:: + The examples below assume you have created a ``config.ini`` file, thus they won't show the *api_id* and *api_hash* parameters usage. User Authorization @@ -83,7 +84,7 @@ After successfully authorizing yourself, a new file called ``my_account.session` Pyrogram executing API calls with your identity. This file will be loaded again when you restart your app, and as long as you keep the session alive, Pyrogram won't ask you again to enter your phone number. -.. important:: Your ``*.session`` file(s) must be kept secret. +.. important:: Your ``*.session`` files are personal and must be kept secret. Bot Authorization ----------------- From d45caa63716e1a17d797a9f7fd8ba576a84b9ff6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 17 Aug 2018 02:02:15 +0200 Subject: [PATCH 147/530] Fix some documentation links --- docs/source/pyrogram/Client.rst | 2 -- docs/source/start/Usage.rst | 6 +++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/source/pyrogram/Client.rst b/docs/source/pyrogram/Client.rst index 5dd42e4e..45d40368 100644 --- a/docs/source/pyrogram/Client.rst +++ b/docs/source/pyrogram/Client.rst @@ -33,8 +33,6 @@ Decorators on_disconnect on_raw_update -.. _available-methods: - Messages -------- diff --git a/docs/source/start/Usage.rst b/docs/source/start/Usage.rst index 6c20decd..6c560f90 100644 --- a/docs/source/start/Usage.rst +++ b/docs/source/start/Usage.rst @@ -108,9 +108,9 @@ Examples (more on `GitHub Date: Fri, 17 Aug 2018 02:17:48 +0200 Subject: [PATCH 148/530] Rename "build" to "create" (friendlier name) --- pyrogram/client/filters/filters.py | 84 +++++++++++++++--------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index 5c2538f4..92fb278e 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -22,7 +22,7 @@ from .filter import Filter from ..types.bots import InlineKeyboardMarkup, ReplyKeyboardMarkup -def build(name: str, func: callable, **kwargs) -> type: +def create(name: str, func: callable, **kwargs) -> type: d = {"__call__": func} d.update(kwargs) @@ -33,109 +33,109 @@ class Filters: """This class provides access to all Filters available in Pyrogram. Filters are intended to be used with the :obj:`MessageHandler `.""" - bot = build("Bot", lambda _, m: bool(m.from_user and m.from_user.is_bot)) + bot = create("Bot", lambda _, m: bool(m.from_user and m.from_user.is_bot)) """Filter messages coming from bots""" - incoming = build("Incoming", lambda _, m: not m.outgoing) + incoming = create("Incoming", lambda _, m: not m.outgoing) """Filter incoming messages.""" - outgoing = build("Outgoing", lambda _, m: m.outgoing) + outgoing = create("Outgoing", lambda _, m: m.outgoing) """Filter outgoing messages.""" - text = build("Text", lambda _, m: bool(m.text)) + text = create("Text", lambda _, m: bool(m.text)) """Filter text messages.""" - reply = build("Reply", lambda _, m: bool(m.reply_to_message)) + reply = create("Reply", lambda _, m: bool(m.reply_to_message)) """Filter messages that are replies to other messages.""" - forwarded = build("Forwarded", lambda _, m: bool(m.forward_date)) + forwarded = create("Forwarded", lambda _, m: bool(m.forward_date)) """Filter messages that are forwarded.""" - caption = build("Caption", lambda _, m: bool(m.caption)) + caption = create("Caption", lambda _, m: bool(m.caption)) """Filter media messages that contain captions.""" - edited = build("Edited", lambda _, m: bool(m.edit_date)) + edited = create("Edited", lambda _, m: bool(m.edit_date)) """Filter edited messages.""" - audio = build("Audio", lambda _, m: bool(m.audio)) + audio = create("Audio", lambda _, m: bool(m.audio)) """Filter messages that contain :obj:`Audio ` objects.""" - document = build("Document", lambda _, m: bool(m.document)) + document = create("Document", lambda _, m: bool(m.document)) """Filter messages that contain :obj:`Document ` objects.""" - photo = build("Photo", lambda _, m: bool(m.photo)) + photo = create("Photo", lambda _, m: bool(m.photo)) """Filter messages that contain :obj:`Photo ` objects.""" - sticker = build("Sticker", lambda _, m: bool(m.sticker)) + sticker = create("Sticker", lambda _, m: bool(m.sticker)) """Filter messages that contain :obj:`Sticker ` objects.""" - animation = build("GIF", lambda _, m: bool(m.animation)) + animation = create("GIF", lambda _, m: bool(m.animation)) """Filter messages that contain :obj:`Animation ` objects.""" - video = build("Video", lambda _, m: bool(m.video)) + video = create("Video", lambda _, m: bool(m.video)) """Filter messages that contain :obj:`Video ` objects.""" - voice = build("Voice", lambda _, m: bool(m.voice)) + voice = create("Voice", lambda _, m: bool(m.voice)) """Filter messages that contain :obj:`Voice ` note objects.""" - video_note = build("Voice", lambda _, m: bool(m.video_note)) + video_note = create("Voice", lambda _, m: bool(m.video_note)) """Filter messages that contain :obj:`VideoNote ` objects.""" - contact = build("Contact", lambda _, m: bool(m.contact)) + contact = create("Contact", lambda _, m: bool(m.contact)) """Filter messages that contain :obj:`Contact ` objects.""" - location = build("Location", lambda _, m: bool(m.location)) + location = create("Location", lambda _, m: bool(m.location)) """Filter messages that contain :obj:`Location ` objects.""" - venue = build("Venue", lambda _, m: bool(m.venue)) + venue = create("Venue", lambda _, m: bool(m.venue)) """Filter messages that contain :obj:`Venue ` objects.""" - private = build("Private", lambda _, m: bool(m.chat and m.chat.type == "private")) + private = create("Private", lambda _, m: bool(m.chat and m.chat.type == "private")) """Filter messages sent in private chats.""" - group = build("Group", lambda _, m: bool(m.chat and m.chat.type in {"group", "supergroup"})) + group = create("Group", lambda _, m: bool(m.chat and m.chat.type in {"group", "supergroup"})) """Filter messages sent in group or supergroup chats.""" - channel = build("Channel", lambda _, m: bool(m.chat and m.chat.type == "channel")) + channel = create("Channel", lambda _, m: bool(m.chat and m.chat.type == "channel")) """Filter messages sent in channels.""" - new_chat_members = build("NewChatMembers", lambda _, m: bool(m.new_chat_members)) + new_chat_members = create("NewChatMembers", lambda _, m: bool(m.new_chat_members)) """Filter service messages for new chat members.""" - left_chat_member = build("LeftChatMember", lambda _, m: bool(m.left_chat_member)) + left_chat_member = create("LeftChatMember", lambda _, m: bool(m.left_chat_member)) """Filter service messages for members that left the chat.""" - new_chat_title = build("NewChatTitle", lambda _, m: bool(m.new_chat_title)) + new_chat_title = create("NewChatTitle", lambda _, m: bool(m.new_chat_title)) """Filter service messages for new chat titles.""" - new_chat_photo = build("NewChatPhoto", lambda _, m: bool(m.new_chat_photo)) + new_chat_photo = create("NewChatPhoto", lambda _, m: bool(m.new_chat_photo)) """Filter service messages for new chat photos.""" - delete_chat_photo = build("DeleteChatPhoto", lambda _, m: bool(m.delete_chat_photo)) + delete_chat_photo = create("DeleteChatPhoto", lambda _, m: bool(m.delete_chat_photo)) """Filter service messages for deleted photos.""" - group_chat_created = build("GroupChatCreated", lambda _, m: bool(m.group_chat_created)) + group_chat_created = create("GroupChatCreated", lambda _, m: bool(m.group_chat_created)) """Filter service messages for group chat creations.""" - supergroup_chat_created = build("SupergroupChatCreated", lambda _, m: bool(m.supergroup_chat_created)) + supergroup_chat_created = create("SupergroupChatCreated", lambda _, m: bool(m.supergroup_chat_created)) """Filter service messages for supergroup chat creations.""" - channel_chat_created = build("ChannelChatCreated", lambda _, m: bool(m.channel_chat_created)) + channel_chat_created = create("ChannelChatCreated", lambda _, m: bool(m.channel_chat_created)) """Filter service messages for channel chat creations.""" - migrate_to_chat_id = build("MigrateToChatId", lambda _, m: bool(m.migrate_to_chat_id)) + migrate_to_chat_id = create("MigrateToChatId", lambda _, m: bool(m.migrate_to_chat_id)) """Filter service messages that contain migrate_to_chat_id.""" - migrate_from_chat_id = build("MigrateFromChatId", lambda _, m: bool(m.migrate_from_chat_id)) + migrate_from_chat_id = create("MigrateFromChatId", lambda _, m: bool(m.migrate_from_chat_id)) """Filter service messages that contain migrate_from_chat_id.""" - pinned_message = build("PinnedMessage", lambda _, m: bool(m.pinned_message)) + pinned_message = create("PinnedMessage", lambda _, m: bool(m.pinned_message)) """Filter service messages for pinned messages.""" - reply_keyboard = build("ReplyKeyboard", lambda _, m: isinstance(m.reply_markup, ReplyKeyboardMarkup)) + reply_keyboard = create("ReplyKeyboard", lambda _, m: isinstance(m.reply_markup, ReplyKeyboardMarkup)) """Filter messages containing reply keyboard markups""" - inline_keyboard = build("InlineKeyboard", lambda _, m: isinstance(m.reply_markup, InlineKeyboardMarkup)) + inline_keyboard = create("InlineKeyboard", lambda _, m: isinstance(m.reply_markup, InlineKeyboardMarkup)) """Filter messages containing inline keyboard markups""" @staticmethod @@ -174,7 +174,7 @@ class Filters: return bool(m.command) - return build( + return create( "Command", f, c={command if case_sensitive @@ -206,7 +206,7 @@ class Filters: m.matches = [i for i in _.p.finditer(m.text or "")] return bool(m.matches) - return build("Regex", f, p=re.compile(pattern, flags)) + return create("Regex", f, p=re.compile(pattern, flags)) @staticmethod def user(user: int or str or list): @@ -216,7 +216,7 @@ class Filters: user (``int`` | ``str`` | ``list``): The user or list of user IDs (int) or usernames (str) the filter should look for. """ - return build( + return create( "User", lambda _, m: bool(m.from_user and (m.from_user.id in _.u @@ -237,7 +237,7 @@ class Filters: chat (``int`` | ``str`` | ``list``): The chat or list of chat IDs (int) or usernames (str) the filter should look for. """ - return build( + return create( "Chat", lambda _, m: bool(m.chat and (m.chat.id in _.c @@ -250,7 +250,7 @@ class Filters: ) ) - service = build( + service = create( "Service", lambda _, m: bool( Filters.new_chat_members(m) @@ -268,7 +268,7 @@ class Filters: ) """Filter all service messages.""" - media = build( + media = create( "Media", lambda _, m: bool( Filters.audio(m) From 0c77fe91fe8be09c4dcc43904cf938298c6fe677 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 17 Aug 2018 12:17:54 +0200 Subject: [PATCH 149/530] Add TODO --- pyrogram/client/filters/filters.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index 92fb278e..ba8e7c4b 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -23,6 +23,7 @@ from ..types.bots import InlineKeyboardMarkup, ReplyKeyboardMarkup def create(name: str, func: callable, **kwargs) -> type: + # TODO: unpack kwargs using **kwargs into the dict itself. For Python 3.5+ only d = {"__call__": func} d.update(kwargs) From 6dfaa3ddeaa0ca26e80716efdc14236909701e76 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 18 Aug 2018 18:18:40 +0200 Subject: [PATCH 150/530] Small documentation updates --- docs/source/start/Installation.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/start/Installation.rst b/docs/source/start/Installation.rst index 8aea16de..bba927e4 100644 --- a/docs/source/start/Installation.rst +++ b/docs/source/start/Installation.rst @@ -7,7 +7,8 @@ We recommend using the latest version of Python 3 and pip. Get Python 3 from https://www.python.org/downloads/ or with your package manager and pip by following the instructions at https://pip.pypa.io/en/latest/installing/. -Pyrogram supports Python 3 only, starting from version 3.4 and PyPy. +.. note:: + Pyrogram supports Python 3 only, starting from version 3.4 and PyPy. Install Pyrogram ---------------- From ed05c56f5236e15dbe3922ae50eb522d361607a5 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 19 Aug 2018 17:22:28 +0200 Subject: [PATCH 151/530] Clearer Filters docs. Add create to Filters' namespace --- pyrogram/client/filters/filters.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index ba8e7c4b..043f29ff 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -31,8 +31,14 @@ def create(name: str, func: callable, **kwargs) -> type: class Filters: - """This class provides access to all Filters available in Pyrogram. - Filters are intended to be used with the :obj:`MessageHandler `.""" + """This class provides access to all library-defined Filters available in Pyrogram. + + The Filters listed here are intended to be used with the :obj:`MessageHandler ` only. + At the moment, if you want to filter updates coming from different `Handlers `_ you have to create + your own filters with :meth:`Filters.create` and use them in the same way. + """ + + create = create bot = create("Bot", lambda _, m: bool(m.from_user and m.from_user.is_bot)) """Filter messages coming from bots""" From 493fc4a6582e65fc82af6964b9c6c338329e5990 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 19 Aug 2018 17:24:24 +0200 Subject: [PATCH 152/530] Document Filters.create() method --- pyrogram/client/filters/filters.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index 043f29ff..4cd4b191 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -23,6 +23,27 @@ from ..types.bots import InlineKeyboardMarkup, ReplyKeyboardMarkup def create(name: str, func: callable, **kwargs) -> type: + """Use this method to create a Filter. + + Custom filters give you extra control over which updates are allowed or not to be processed by your handlers. + + Args: + name (``str``): + Your filter's name. Can be anything you like. + + func (``callable``): + A function that accepts two arguments *(filter, update)* and returns a Boolean: True if the update should be + handled, False otherwise. + The "update" argument type will vary depending on which `Handler `_ is coming from. + For example, in a :obj:`MessageHandler ` the update type will be + a :obj:`Message `; in a :obj:`CallbackQueryHandler ` the + update type will be a :obj:`CallbackQuery `. Your function body can then access the + incoming update and decide whether to allow it or not. + + **kwargs (``any``, *optional*): + Any keyword argument you would like to pass. Useful for custom filters that accept parameters (e.g.: + :meth:`Filters.command`, :meth:`Filters.regex`). + """ # TODO: unpack kwargs using **kwargs into the dict itself. For Python 3.5+ only d = {"__call__": func} d.update(kwargs) From de9beac2ce4614ef8265d6ba67b397489d59e3a1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 19 Aug 2018 17:25:09 +0200 Subject: [PATCH 153/530] Refactor UpdateHandling page --- docs/source/resources/UpdateHandling.rst | 186 ++++------------------- 1 file changed, 28 insertions(+), 158 deletions(-) diff --git a/docs/source/resources/UpdateHandling.rst b/docs/source/resources/UpdateHandling.rst index 0aa6457f..781a48af 100644 --- a/docs/source/resources/UpdateHandling.rst +++ b/docs/source/resources/UpdateHandling.rst @@ -2,188 +2,58 @@ Update Handling =============== Updates are events that happen in your Telegram account (incoming messages, new channel posts, new members join, ...) -and are handled by registering one or more callback functions with an Handler. There are multiple Handlers to choose -from, one for each kind of update: +and can be handled by registering one or more callback functions in your app by using an `Handler <../pyrogram/Handlers.html>`_. -- `MessageHandler <../pyrogram/handlers/MessageHandler.html>`_ -- `DeletedMessagesHandler <../pyrogram/handlers/DeletedMessagesHandler.html>`_ -- `CallbackQueryHandler <../pyrogram/handlers/CallbackQueryHandler.html>`_ -- `RawUpdateHandler <../pyrogram/handlers/RawUpdateHandler.html>`_ -- `DisconnectHandler <../pyrogram/handlers/DisconnectHandler.html>`_ +To put it simply, whenever an update is received from Telegram it will be dispatched and your previously defined callback +function(s) will be called back with the update itself as argument. Registering an Handler ---------------------- -We shall examine the :obj:`MessageHandler `, which will be in charge for handling -:obj:`Message ` objects. - -- The easiest and nicest way to register a MessageHandler is by decorating your function with the - :meth:`on_message() ` decorator. Here's a full example that prints out the content - of a message as soon as it arrives. - - .. code-block:: python - - from pyrogram import Client - - app = Client("my_account") +To explain how `Handlers <../pyrogram/Handlers.html>`_ work let's have a look at the most used one, the +:obj:`MessageHandler `, which will be in charge for handling :obj:`Message ` +updates coming from all around your chats. Every other handler shares the same setup logic; you should not have troubles +settings them up once you learn from this section. - @app.on_message() - def my_handler(client, message): - print(message) - - - app.run() - -- If you prefer not to use decorators, there is an alternative way for registering Handlers. - This is useful, for example, when you want to keep your callback functions in separate files. - - .. code-block:: python - - from pyrogram import Client, MessageHandler - - - def my_handler(client, message): - print(message) - - - app = Client("my_account") - - app.add_handler(MessageHandler(my_handler)) - - app.run() - -Using Filters -------------- - -For a finer grained control over what kind of messages will be allowed or not in your callback functions, you can use -:class:`Filters `. - -- This example will show you how to **only** handle messages containing an - :obj:`Audio ` object and filter out any other message: - - .. code-block:: python - - from pyrogram import Filters - - - @app.on_message(Filters.audio) - def my_handler(client, message): - print(message) - -- or, without decorators: - - .. code-block:: python - - from pyrogram import Filters, MessageHandler - - - def my_handler(client, message): - print(message) - - - app.add_handler(MessageHandler(my_handler, Filters.audio)) - -Combining Filters ------------------ - -Filters can also be used in a more advanced way by combining more filters together using bitwise operators: - -- Use ``~`` to invert a filter (behaves like the ``not`` operator). -- Use ``&`` and ``|`` to merge two filters (behave like ``and``, ``or`` operators respectively). - -Here are some examples: - -- Message is a **text** message **and** is **not edited**. - - .. code-block:: python - - @app.on_message(Filters.text & ~Filters.edited) - def my_handler(client, message): - print(message) - -- Message is a **sticker** **and** is coming from a **channel or** a **private** chat. - - .. code-block:: python - - @app.on_message(Filters.sticker & (Filters.channel | Filters.private)) - def my_handler(client, message): - print(message) - -Advanced Filters +Using Decorators ---------------- -Some filters, like :obj:`command() ` or :obj:`regex() ` -can also accept arguments: - -- Message is either a */start* or */help* **command**. - - .. code-block:: python - - @app.on_message(Filters.command(["start", "help"])) - def my_handler(client, message): - print(message) - -- Message is a **text** message matching the given **regex** pattern. - - .. code-block:: python - - @app.on_message(Filters.regex("pyrogram")) - def my_handler(client, message): - print(message) - -More handlers using different filters can also live together. +The easiest and nicest way to register a MessageHandler is by decorating your function with the +:meth:`on_message() ` decorator. Here's a full example that prints out the content +of a message as soon as it arrives. .. code-block:: python - @app.on_message(Filters.command("start")) - def start_command(client, message): - print("This is the /start command") + from pyrogram import Client + + app = Client("my_account") - @app.on_message(Filters.command("help")) - def help_command(client, message): - print("This is the /help command") + @app.on_message() + def my_handler(client, message): + print(message) - @app.on_message(Filters.chat("PyrogramChat")) - def from_pyrogramchat(client, message): - print("New message in @PyrogramChat") + app.run() -Handler Groups --------------- +Using add_handler() +------------------- -If you register handlers with overlapping filters, only the first one is executed and any other handler will be ignored. - -In order to process the same message more than once, you can register your handler in a different group. -Groups are identified by a number (number 0 being the default) and are sorted. This means that a lower group number has -a higher priority. - -For example, in: +If you prefer not to use decorators for any reason, there is an alternative way for registering Handlers. +This is useful, for example, when you want to keep your callback functions in separate files. .. code-block:: python - @app.on_message(Filters.text | Filters.sticker) - def text_or_sticker(client, message): - print("Text or Sticker") + from pyrogram import Client, MessageHandler - @app.on_message(Filters.text) - def just_text(client, message): - print("Just Text") + def my_handler(client, message): + print(message) -``just_text`` is never executed. To enable it, simply register the function using a different group: -.. code-block:: python + app = Client("my_account") - @app.on_message(Filters.text, group=1) - def just_text(client, message): - print("Just Text") + app.add_handler(MessageHandler(my_handler)) -or, if you want ``just_text`` to be fired *before* ``text_or_sticker``: - -.. code-block:: python - - @app.on_message(Filters.text, group=-1) - def just_text(client, message): - print("Just Text") \ No newline at end of file + app.run() From 1666eaac7753a4f8c6275ba6e28b546330ed3557 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 19 Aug 2018 17:25:39 +0200 Subject: [PATCH 154/530] Add UsingFilter doc page --- docs/source/index.rst | 1 + docs/source/resources/UsingFilters.rst | 228 +++++++++++++++++++++++++ 2 files changed, 229 insertions(+) create mode 100644 docs/source/resources/UsingFilters.rst diff --git a/docs/source/index.rst b/docs/source/index.rst index 051b5af8..ec6b24f2 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -84,6 +84,7 @@ To get started, press the Next button. :caption: Resources resources/UpdateHandling + resources/UsingFilters resources/AutoAuthorization resources/CustomizeSessions resources/TgCrypto diff --git a/docs/source/resources/UsingFilters.rst b/docs/source/resources/UsingFilters.rst new file mode 100644 index 00000000..79ecd24f --- /dev/null +++ b/docs/source/resources/UsingFilters.rst @@ -0,0 +1,228 @@ +Using Filters +============= + +For a finer grained control over what kind of messages will be allowed or not in your callback functions, you can use +:class:`Filters `. + +.. note:: + This section makes use of Handlers to handle updates. Learn more at `Update Handling `_. + +- This example will show you how to **only** handle messages containing an :obj:`Audio ` object and + ignore any other message: + + .. code-block:: python + + from pyrogram import Filters + + + @app.on_message(Filters.audio) + def my_handler(client, message): + print(message) + +- or, without decorators: + + .. code-block:: python + + from pyrogram import Filters, MessageHandler + + + def my_handler(client, message): + print(message) + + + app.add_handler(MessageHandler(my_handler, Filters.audio)) + +Combining Filters +----------------- + +Filters can also be used in a more advanced way by inverting and combining more filters together using bitwise +operators: + +- Use ``~`` to invert a filter (behaves like the ``not`` operator). +- Use ``&`` and ``|`` to merge two filters (behave like ``and``, ``or`` operators respectively). + +Here are some examples: + +- Message is a **text** message **and** is **not edited**. + + .. code-block:: python + + @app.on_message(Filters.text & ~Filters.edited) + def my_handler(client, message): + print(message) + +- Message is a **sticker** **and** is coming from a **channel or** a **private** chat. + + .. code-block:: python + + @app.on_message(Filters.sticker & (Filters.channel | Filters.private)) + def my_handler(client, message): + print(message) + +Advanced Filters +---------------- + +Some filters, like :meth:`command() ` or :meth:`regex() ` +can also accept arguments: + +- Message is either a */start* or */help* **command**. + + .. code-block:: python + + @app.on_message(Filters.command(["start", "help"])) + def my_handler(client, message): + print(message) + +- Message is a **text** message matching the given **regex** pattern. + + .. code-block:: python + + @app.on_message(Filters.regex("pyrogram")) + def my_handler(client, message): + print(message) + +More handlers using different filters can also live together. + +.. code-block:: python + + @app.on_message(Filters.command("start")) + def start_command(client, message): + print("This is the /start command") + + + @app.on_message(Filters.command("help")) + def help_command(client, message): + print("This is the /help command") + + + @app.on_message(Filters.chat("PyrogramChat")) + def from_pyrogramchat(client, message): + print("New message in @PyrogramChat") + +Handler Groups +-------------- + +If you register handlers with overlapping filters, only the first one is executed and any other handler will be ignored. + +In order to process the same message more than once, you can register your handler in a different group. +Groups are identified by a number (number 0 being the default) and are sorted. This means that a lower group number has +a higher priority. + +For example, in: + +.. code-block:: python + + @app.on_message(Filters.text | Filters.sticker) + def text_or_sticker(client, message): + print("Text or Sticker") + + + @app.on_message(Filters.text) + def just_text(client, message): + print("Just Text") + +``just_text`` is never executed because ``text_or_sticker`` already handles texts. To enable it, simply register the +function using a different group: + +.. code-block:: python + + @app.on_message(Filters.text, group=1) + def just_text(client, message): + print("Just Text") + +or, if you want ``just_text`` to be fired *before* ``text_or_sticker`` (note ``-1``, which is less than ``0``): + +.. code-block:: python + + @app.on_message(Filters.text, group=-1) + def just_text(client, message): + print("Just Text") + +Custom Filters +-------------- + +Pyrogram already provides lots of built-in :class:`Filters ` to work with, but in case you can't find +a specific one for your needs or want to build a custom filter by yourself (to be used in a different handler, for +example) you can use :meth:`Filters.create() `. + +.. note:: + At the moment, the built-in filters are intended to be used with the :obj:`MessageHandler ` + only. + +An example to demonstrate how custom filters work is to show how to create and use one for the +:obj:`CallbackQueryHandler `. Note that callback queries updates are only received by Bots; +create and `authorize your bot <../start/Setup.html#bot-authorization>`_, then send a message with an inline keyboard to +yourself. This allows you to test your filter by pressing the inline button: + +.. code-block:: python + + from pyrogram import InlineKeyboardMarkup, InlineKeyboardButton + + app.send_message( + "username", # Change this to your username or id + "Pyrogram's custom filter test", + reply_markup=InlineKeyboardMarkup( + [[InlineKeyboardButton("Press me", "pyrogram")]] + ) + ) + +Basic Filters +^^^^^^^^^^^^^ + +For this basic filter we will be using only the first two parameters of :meth:`Filters.create() `. + +The code below creates a simple filter for hardcoded callback data. This filter will only allow callback queries +containing "pyrogram" as data: + +.. code-block:: python + + hardcoded_data = Filters.create( + name="HardcodedData", + func=lambda filter, callback_query: callback_query.data == "pyrogram" + ) + +The ``lambda`` operator in python is used to create small anonymous functions and is perfect for this example, the same +could be achieved with a normal function, but we don't really need it as it makes sense only inside the filter itself: + +.. code-block:: python + + def func(filter, callback_query): + return callback_query.data == "pyrogram" + + hardcoded_data = Filters.create( + name="HardcodedData", + func=func + ) + +The filter usage remains the same: + +.. code-block:: python + + @app.on_callback_query(hardcoded_data) + def pyrogram_data(client, callback_query): + client.answer_callback_query(callback_query.id, "it works!") + +Filters with Arguments +^^^^^^^^^^^^^^^^^^^^^^ + +A much cooler filter would be one that accepts "pyrogram" or any other data as argument at usage time. +A dynamic filter like this will make use of the third parameter of :meth:`Filters.create() `. + +This is how a dynamic custom filter looks like: + +.. code-block:: python + + def dynamic_data(data): + return Filters.create( + name="DynamicData", + func=lambda filter, callback_query: filter.data == callback_query.data, + data=data # "data" kwarg is accessed with "filter.data" + ) + +And its usage: + +.. code-block:: python + + @app.on_callback_query(dynamic_data("pyrogram")) + def pyrogram_data(client, callback_query): + client.answer_callback_query(callback_query.id, "it works!") \ No newline at end of file From 21d914e414ef36a09017d42b40e7bfe638f0f5cd Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 19 Aug 2018 19:40:23 +0200 Subject: [PATCH 155/530] Remove unused constant --- pyrogram/client/ext/base_client.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyrogram/client/ext/base_client.py b/pyrogram/client/ext/base_client.py index c8a6029d..c78997c1 100644 --- a/pyrogram/client/ext/base_client.py +++ b/pyrogram/client/ext/base_client.py @@ -41,7 +41,6 @@ class BaseClient: platform.release() ) - SYSTEM_LANG_CODE = "en" LANG_CODE = "en" INVITE_LINK_RE = re.compile(r"^(?:https?://)?(?:www\.)?(?:t(?:elegram)?\.(?:org|me|dog)/joinchat/)([\w-]+)$") From 088a4c35c973723ebe0ecf3cc0ce9d5046de8274 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 20 Aug 2018 02:12:21 +0200 Subject: [PATCH 156/530] Add is_pinned attribute to Dialog --- pyrogram/client/methods/messages/get_dialogs.py | 3 ++- pyrogram/client/types/user_and_chats/dialog.py | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/methods/messages/get_dialogs.py b/pyrogram/client/methods/messages/get_dialogs.py index f43ca6a5..e7b3e2a8 100644 --- a/pyrogram/client/methods/messages/get_dialogs.py +++ b/pyrogram/client/methods/messages/get_dialogs.py @@ -92,7 +92,8 @@ class GetDialogs(BaseClient): top_message=messages.get(chat_id), unread_messages_count=dialog.unread_count, unread_mentions_count=dialog.unread_mentions_count, - unread_mark=dialog.unread_mark + unread_mark=dialog.unread_mark, + is_pinned=dialog.pinned ) ) diff --git a/pyrogram/client/types/user_and_chats/dialog.py b/pyrogram/client/types/user_and_chats/dialog.py index 60ffb76c..fa5fb2b8 100644 --- a/pyrogram/client/types/user_and_chats/dialog.py +++ b/pyrogram/client/types/user_and_chats/dialog.py @@ -37,6 +37,9 @@ class Dialog(Object): unread_mark (``bool``): True, if the dialog has the unread mark set. + + is_pinned (``bool``): + True, if the dialog is pinned. """ ID = 0xb0700028 @@ -45,9 +48,11 @@ class Dialog(Object): top_message, unread_messages_count: int, unread_mentions_count: int, - unread_mark: bool): + unread_mark: bool, + is_pinned: bool): self.chat = chat self.top_message = top_message self.unread_messages_count = unread_messages_count self.unread_mentions_count = unread_mentions_count self.unread_mark = unread_mark + self.is_pinned = is_pinned From 9c0f8b2f3b4a9fdec002f35dfa165d4bdab838b7 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 20 Aug 2018 11:24:00 +0200 Subject: [PATCH 157/530] Document get_dialogs() method --- .../client/methods/messages/get_dialogs.py | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/pyrogram/client/methods/messages/get_dialogs.py b/pyrogram/client/methods/messages/get_dialogs.py index e7b3e2a8..e22f7e2f 100644 --- a/pyrogram/client/methods/messages/get_dialogs.py +++ b/pyrogram/client/methods/messages/get_dialogs.py @@ -22,19 +22,41 @@ from ...ext import BaseClient, utils class GetDialogs(BaseClient): - # TODO docstrings - def get_dialogs(self, + offset_dialogs=None, limit: int = 100, - pinned_only: bool = False, - last_chunk=None): + pinned_only: bool = False): + """Use this method to get the user's dialogs + + You can get up to 100 dialogs at once. + + Args: + limit (``str``, *optional*): + Limits the number of dialogs to be retrieved. + Defaults to 100 + + pinned_only (``bool``, *optional*): + Pass True if you want to get only pinned dialogs. + Defaults to False. + + offset_dialogs (:obj:`Dialogs`): + Pass the previous dialogs object to retrieve the next dialogs chunk starting from the last dialog. + Defaults to None (start from the beginning). + + Returns: + On success, a :obj:`Dialogs` object is returned. + + Raises: + :class:`Error` + """ + if pinned_only: r = self.send(functions.messages.GetPinnedDialogs()) else: offset_date = 0 - if last_chunk: - for dialog in reversed(last_chunk.dialogs): + if offset_dialogs: + for dialog in reversed(offset_dialogs.dialogs): top_message = dialog.top_message if top_message: From 2d8792a7cd09f5c169287c2e4dc60d89dea5a19c Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 20 Aug 2018 11:24:47 +0200 Subject: [PATCH 158/530] Move get_dialogs() from "messages" to "chats" namespace --- pyrogram/client/methods/chats/__init__.py | 4 +++- pyrogram/client/methods/{messages => chats}/get_dialogs.py | 0 pyrogram/client/methods/messages/__init__.py | 4 +--- 3 files changed, 4 insertions(+), 4 deletions(-) rename pyrogram/client/methods/{messages => chats}/get_dialogs.py (100%) diff --git a/pyrogram/client/methods/chats/__init__.py b/pyrogram/client/methods/chats/__init__.py index ce56f16b..72134abf 100644 --- a/pyrogram/client/methods/chats/__init__.py +++ b/pyrogram/client/methods/chats/__init__.py @@ -21,6 +21,7 @@ from .export_chat_invite_link import ExportChatInviteLink from .get_chat import GetChat from .get_chat_member import GetChatMember from .get_chat_members import GetChatMembers +from .get_dialogs import GetDialogs from .join_chat import JoinChat from .kick_chat_member import KickChatMember from .leave_chat import LeaveChat @@ -50,6 +51,7 @@ class Chats( SetChatTitle, SetChatDescription, PinChatMessage, - UnpinChatMessage + UnpinChatMessage, + GetDialogs ): pass diff --git a/pyrogram/client/methods/messages/get_dialogs.py b/pyrogram/client/methods/chats/get_dialogs.py similarity index 100% rename from pyrogram/client/methods/messages/get_dialogs.py rename to pyrogram/client/methods/chats/get_dialogs.py diff --git a/pyrogram/client/methods/messages/__init__.py b/pyrogram/client/methods/messages/__init__.py index 174586bc..35dae756 100644 --- a/pyrogram/client/methods/messages/__init__.py +++ b/pyrogram/client/methods/messages/__init__.py @@ -22,14 +22,13 @@ from .edit_message_media import EditMessageMedia from .edit_message_reply_markup import EditMessageReplyMarkup from .edit_message_text import EditMessageText from .forward_messages import ForwardMessages -from .get_dialogs import GetDialogs from .get_history import GetHistory from .get_messages import GetMessages +from .send_animation import SendAnimation from .send_audio import SendAudio from .send_chat_action import SendChatAction from .send_contact import SendContact from .send_document import SendDocument -from .send_animation import SendAnimation from .send_location import SendLocation from .send_media_group import SendMediaGroup from .send_message import SendMessage @@ -50,7 +49,6 @@ class Messages( ForwardMessages, GetHistory, GetMessages, - GetDialogs, SendAudio, SendChatAction, SendContact, From 03b17d5bcefa42e3c413ffde253bb0166aaa96ad Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 21 Aug 2018 21:18:06 +0200 Subject: [PATCH 159/530] Fix clickable link --- pyrogram/client/methods/messages/send_message.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/methods/messages/send_message.py b/pyrogram/client/methods/messages/send_message.py index b770133e..00087307 100644 --- a/pyrogram/client/methods/messages/send_message.py +++ b/pyrogram/client/methods/messages/send_message.py @@ -61,7 +61,7 @@ class SendMessage(BaseClient): instructions to remove reply keyboard or to force a reply from the user. Returns: - On success, the sent Message is returned. + On success, the sent :obj:`Message` is returned. Raises: :class:`Error ` From c501eeb5a2ee164e656742903953cc93e45a9da9 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 21 Aug 2018 21:23:19 +0200 Subject: [PATCH 160/530] Update to v0.8.0dev1 There are a quite lot of changes it deserves a new "minor" update. --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index a822524c..7ef07777 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -23,7 +23,7 @@ __copyright__ = "Copyright (C) 2017-2018 Dan Tès Date: Thu, 23 Aug 2018 20:42:42 +0200 Subject: [PATCH 161/530] Update API scheme to Layer 85 --- compiler/api/source/main_api.tl | 57 +++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/compiler/api/source/main_api.tl b/compiler/api/source/main_api.tl index 9ee01cb3..d3f227ce 100644 --- a/compiler/api/source/main_api.tl +++ b/compiler/api/source/main_api.tl @@ -191,6 +191,7 @@ inputReportReasonSpam#58dbcab8 = ReportReason; inputReportReasonViolence#1e22c78d = ReportReason; inputReportReasonPornography#2e59d922 = ReportReason; inputReportReasonOther#e1746d0a text:string = ReportReason; +inputReportReasonCopyright#9b89f93a = ReportReason; userFull#f220f3f flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true user:User about:flags.1?string link:contacts.Link profile_photo:flags.2?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo common_chats_count:int = UserFull; @@ -342,7 +343,7 @@ config#3213dbba flags:# phonecalls_enabled:flags.1?true default_p2p_contacts:fla nearestDc#8e1a1775 country:string this_dc:int nearest_dc:int = NearestDc; -help.appUpdate#8987f311 id:int critical:Bool url:string text:string = help.AppUpdate; +help.appUpdate#1da7158f flags:# popup:flags.0?true id:int version:string text:string entities:Vector document:flags.1?Document url:flags.2?string = help.AppUpdate; help.noAppUpdate#c45a6536 = help.AppUpdate; help.inviteText#18cb9f78 message:string = help.InviteText; @@ -458,12 +459,11 @@ authorization#7bf2e6f6 hash:long flags:int device_model:string platform:string s account.authorizations#1250abde authorizations:Vector = account.Authorizations; -account.noPassword#5ea182f6 new_salt:bytes new_secure_salt:bytes secure_random:bytes email_unconfirmed_pattern:string = account.Password; -account.password#ca39b447 flags:# has_recovery:flags.0?true has_secure_values:flags.1?true current_salt:bytes new_salt:bytes new_secure_salt:bytes secure_random:bytes hint:string email_unconfirmed_pattern:string = account.Password; +account.password#ad2641f8 flags:# has_recovery:flags.0?true has_secure_values:flags.1?true has_password:flags.2?true current_algo:flags.2?PasswordKdfAlgo srp_B:flags.2?bytes srp_id:flags.2?long hint:flags.3?string email_unconfirmed_pattern:flags.4?string new_algo:PasswordKdfAlgo new_secure_algo:SecurePasswordKdfAlgo secure_random:bytes = account.Password; -account.passwordSettings#7bd9c3f1 email:string secure_salt:bytes secure_secret:bytes secure_secret_id:long = account.PasswordSettings; +account.passwordSettings#9a5c33e5 flags:# email:flags.0?string secure_settings:flags.1?SecureSecretSettings = account.PasswordSettings; -account.passwordInputSettings#21ffa60d flags:# new_salt:flags.0?bytes new_password_hash:flags.0?bytes hint:flags.0?string email:flags.1?string new_secure_salt:flags.2?bytes new_secure_secret:flags.2?bytes new_secure_secret_id:flags.2?long = account.PasswordInputSettings; +account.passwordInputSettings#c23727c9 flags:# new_algo:flags.0?PasswordKdfAlgo new_password_hash:flags.0?bytes hint:flags.0?string email:flags.1?string new_secure_settings:flags.2?SecureSecretSettings = account.PasswordInputSettings; auth.passwordRecovery#137948a5 email_pattern:string = auth.PasswordRecovery; @@ -864,9 +864,9 @@ secureValueTypeTemporaryRegistration#ea02ec33 = SecureValueType; secureValueTypePhone#b320aadb = SecureValueType; secureValueTypeEmail#8e3ca7ee = SecureValueType; -secureValue#b4b4b699 flags:# type:SecureValueType data:flags.0?SecureData front_side:flags.1?SecureFile reverse_side:flags.2?SecureFile selfie:flags.3?SecureFile files:flags.4?Vector plain_data:flags.5?SecurePlainData hash:bytes = SecureValue; +secureValue#187fa0ca flags:# type:SecureValueType data:flags.0?SecureData front_side:flags.1?SecureFile reverse_side:flags.2?SecureFile selfie:flags.3?SecureFile translation:flags.6?Vector files:flags.4?Vector plain_data:flags.5?SecurePlainData hash:bytes = SecureValue; -inputSecureValue#67872e8 flags:# type:SecureValueType data:flags.0?SecureData front_side:flags.1?InputSecureFile reverse_side:flags.2?InputSecureFile selfie:flags.3?InputSecureFile files:flags.4?Vector plain_data:flags.5?SecurePlainData = InputSecureValue; +inputSecureValue#db21d0a7 flags:# type:SecureValueType data:flags.0?SecureData front_side:flags.1?InputSecureFile reverse_side:flags.2?InputSecureFile selfie:flags.3?InputSecureFile translation:flags.6?Vector files:flags.4?Vector plain_data:flags.5?SecurePlainData = InputSecureValue; secureValueHash#ed1ecdb0 type:SecureValueType hash:bytes = SecureValueHash; @@ -876,10 +876,13 @@ secureValueErrorReverseSide#868a2aa5 type:SecureValueType file_hash:bytes text:s secureValueErrorSelfie#e537ced6 type:SecureValueType file_hash:bytes text:string = SecureValueError; secureValueErrorFile#7a700873 type:SecureValueType file_hash:bytes text:string = SecureValueError; secureValueErrorFiles#666220e9 type:SecureValueType file_hash:Vector text:string = SecureValueError; +secureValueError#869d758f type:SecureValueType hash:bytes text:string = SecureValueError; +secureValueErrorTranslationFile#a1144770 type:SecureValueType file_hash:bytes text:string = SecureValueError; +secureValueErrorTranslationFiles#34636dd8 type:SecureValueType file_hash:Vector text:string = SecureValueError; secureCredentialsEncrypted#33f0ea47 data:bytes hash:bytes secret:bytes = SecureCredentialsEncrypted; -account.authorizationForm#cb976d53 flags:# selfie_required:flags.1?true required_types:Vector values:Vector errors:Vector users:Vector privacy_policy_url:flags.0?string = account.AuthorizationForm; +account.authorizationForm#ad2e1cd8 flags:# required_types:Vector values:Vector errors:Vector users:Vector privacy_policy_url:flags.0?string = account.AuthorizationForm; account.sentEmailCode#811f854f email_pattern:string length:int = account.SentEmailCode; @@ -890,6 +893,24 @@ savedPhoneContact#1142bd56 phone:string first_name:string last_name:string date: account.takeout#4dba4501 id:long = account.Takeout; +passwordKdfAlgoUnknown#d45ab096 = PasswordKdfAlgo; +passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow#3a912d4a salt1:bytes salt2:bytes g:int p:bytes = PasswordKdfAlgo; + +securePasswordKdfAlgoUnknown#4a8537 = SecurePasswordKdfAlgo; +securePasswordKdfAlgoPBKDF2HMACSHA512iter100000#bbf2dda0 salt:bytes = SecurePasswordKdfAlgo; +securePasswordKdfAlgoSHA512#86471d92 salt:bytes = SecurePasswordKdfAlgo; + +secureSecretSettings#1527bcac secure_algo:SecurePasswordKdfAlgo secure_secret:bytes secure_secret_id:long = SecureSecretSettings; + +inputCheckPasswordEmpty#9880f658 = InputCheckPasswordSRP; +inputCheckPasswordSRP#d27ff082 srp_id:long A:bytes M1:bytes = InputCheckPasswordSRP; + +secureRequiredType#829d99da flags:# native_names:flags.0?true selfie_required:flags.1?true translation_required:flags.2?true type:SecureValueType = SecureRequiredType; +secureRequiredTypeOneOf#27477b4 types:Vector = SecureRequiredType; + +help.passportConfigNotModified#bfb9f457 = help.PassportConfig; +help.passportConfig#a098d6af hash:int countries_langs:DataJSON = help.PassportConfig; + ---functions--- invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; @@ -909,7 +930,7 @@ auth.exportAuthorization#e5bfffcd dc_id:int = auth.ExportedAuthorization; auth.importAuthorization#e3ef9613 id:int bytes:bytes = auth.Authorization; auth.bindTempAuthKey#cdd42a05 perm_auth_key_id:long nonce:long expires_at:int encrypted_message:bytes = Bool; auth.importBotAuthorization#67a3ff2c flags:int api_id:int api_hash:string bot_auth_token:string = auth.Authorization; -auth.checkPassword#a63011e password_hash:bytes = auth.Authorization; +auth.checkPassword#d18b4d16 password:InputCheckPasswordSRP = auth.Authorization; auth.requestPasswordRecovery#d897bc66 = auth.PasswordRecovery; auth.recoverPassword#4ea56e92 code:string = auth.Authorization; auth.resendCode#3ef1a9bf phone_number:string phone_code_hash:string = auth.SentCode; @@ -938,11 +959,11 @@ account.updateDeviceLocked#38df3532 period:int = Bool; account.getAuthorizations#e320c158 = account.Authorizations; account.resetAuthorization#df77f3bc hash:long = Bool; account.getPassword#548a30f5 = account.Password; -account.getPasswordSettings#bc8d11bb current_password_hash:bytes = account.PasswordSettings; -account.updatePasswordSettings#fa7c4b86 current_password_hash:bytes new_settings:account.PasswordInputSettings = Bool; +account.getPasswordSettings#9cd4eaf9 password:InputCheckPasswordSRP = account.PasswordSettings; +account.updatePasswordSettings#a59b102f password:InputCheckPasswordSRP new_settings:account.PasswordInputSettings = Bool; account.sendConfirmPhoneCode#1516d7bd flags:# allow_flashcall:flags.0?true hash:string current_number:flags.0?Bool = auth.SentCode; account.confirmPhone#5f2178c3 phone_code_hash:string phone_code:string = Bool; -account.getTmpPassword#4a82327e password_hash:bytes period:int = account.TmpPassword; +account.getTmpPassword#449e0b51 password:InputCheckPasswordSRP period:int = account.TmpPassword; account.getWebAuthorizations#182e6d6f = account.WebAuthorizations; account.resetWebAuthorization#2d01b9ef hash:long = Bool; account.resetWebAuthorizations#682d2594 = Bool; @@ -1080,6 +1101,7 @@ messages.searchStickerSets#c2b7d08b flags:# exclude_featured:flags.0?true q:stri messages.getSplitRanges#1cff7e08 = Vector; messages.markDialogUnread#c286d98f flags:# unread:flags.0?true peer:InputDialogPeer = Bool; messages.getDialogUnreadMarks#22e24e22 = Vector; +messages.clearAllDrafts#7e58ee9c = Bool; updates.getState#edd4882a = updates.State; updates.getDifference#25939651 flags:# pts:int pts_total_limit:flags.0?int date:int qts:int = updates.Difference; @@ -1101,7 +1123,7 @@ upload.getFileHashes#c7025931 location:InputFileLocation offset:int = Vector = Bool; help.getInviteText#4d392343 = help.InviteText; help.getSupport#9cdf08cd = help.Support; @@ -1113,6 +1135,7 @@ help.getProxyData#3d7758e1 = help.ProxyData; help.getTermsOfServiceUpdate#2ca51fd1 = help.TermsOfServiceUpdate; help.acceptTermsOfService#ee72f79a id:DataJSON = Bool; help.getDeepLinkInfo#3fedc75f path:string = help.DeepLinkInfo; +help.getPassportConfig#c661ad08 hash:int = help.PassportConfig; channels.readHistory#cc104937 channel:InputChannel max_id:int = Bool; channels.deleteMessages#84c1fd4e channel:InputChannel id:Vector = messages.AffectedMessages; @@ -1172,9 +1195,9 @@ phone.discardCall#78d413a6 peer:InputPhoneCall duration:int reason:PhoneCallDisc phone.setCallRating#1c536a34 peer:InputPhoneCall rating:int comment:string = Updates; phone.saveCallDebug#277add7e peer:InputPhoneCall debug:DataJSON = Bool; -langpack.getLangPack#9ab5c58e lang_code:string = LangPackDifference; -langpack.getStrings#2e1ee318 lang_code:string keys:Vector = Vector; +langpack.getLangPack#f2f2330a lang_pack:string lang_code:string = LangPackDifference; +langpack.getStrings#efea3803 lang_pack:string lang_code:string keys:Vector = Vector; langpack.getDifference#b2e4d7d from_version:int = LangPackDifference; -langpack.getLanguages#800fd57d = Vector; +langpack.getLanguages#42c6978f lang_pack:string = Vector; -// LAYER 82 +// LAYER 85 From 2617618cef93a4484eaf691aa5158b0351168892 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 23 Aug 2018 21:21:27 +0200 Subject: [PATCH 162/530] Add support for Document message edits --- .../methods/messages/edit_message_media.py | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index 086d8dc2..7bf66d5e 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -26,7 +26,7 @@ from pyrogram.api.errors import FileIdInvalid from pyrogram.client.ext import BaseClient, utils from pyrogram.client.types import ( InputMediaPhoto, InputMediaVideo, InputMediaAudio, - InputMediaAnimation + InputMediaAnimation, InputMediaDocument ) @@ -245,6 +245,54 @@ class EditMessageMedia(BaseClient): ) ) + if isinstance(media, InputMediaDocument): + if os.path.exists(media.media): + media = self.send( + functions.messages.UploadMedia( + peer=self.resolve_peer(chat_id), + media=types.InputMediaUploadedDocument( + mime_type=mimetypes.types_map.get("." + media.media.split(".")[-1], "text/plain"), + file=self.save_file(media.media), + attributes=[ + types.DocumentAttributeFilename(os.path.basename(media.media)) + ] + ) + ) + ) + + media = types.InputMediaDocument( + id=types.InputDocument( + id=media.document.id, + access_hash=media.document.access_hash + ) + ) + elif media.media.startswith("http"): + media = types.InputMediaDocumentExternal( + url=media.media + ) + else: + try: + decoded = utils.decode(media.media) + fmt = " 24 else " Date: Fri, 24 Aug 2018 16:03:52 +0200 Subject: [PATCH 163/530] Add phone_number type of entity to docs --- pyrogram/client/types/messages_and_media/message_entity.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/types/messages_and_media/message_entity.py b/pyrogram/client/types/messages_and_media/message_entity.py index db2eee3e..f8f41734 100644 --- a/pyrogram/client/types/messages_and_media/message_entity.py +++ b/pyrogram/client/types/messages_and_media/message_entity.py @@ -26,9 +26,9 @@ class MessageEntity(Object): Args: type (``str``): Type of the entity. - Can be "mention" (@username), "hashtag", "cashtag", "bot_command", "url", "email", "bold" (bold text), - italic (italic text), "code" (monowidth string), "pre" (monowidth block), "text_link" (for clickable text - URLs), "text_mention" (for users without usernames). + Can be "mention" (@username), "hashtag", "cashtag", "bot_command", "url", "email", "phone_number", "bold" + (bold text), italic (italic text), "code" (monowidth string), "pre" (monowidth block), "text_link" + (for clickable text URLs), "text_mention" (for users without usernames). offset (``int``): Offset in UTF-16 code units to the start of the entity. From 0b6b59805934a1897324b306cab066539f539941 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 24 Aug 2018 17:39:55 +0200 Subject: [PATCH 164/530] Log unknown constructors --- pyrogram/api/core/object.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pyrogram/api/core/object.py b/pyrogram/api/core/object.py index a1e20726..3cf12329 100644 --- a/pyrogram/api/core/object.py +++ b/pyrogram/api/core/object.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +import logging from collections import OrderedDict from datetime import datetime from io import BytesIO @@ -23,13 +24,23 @@ from json import JSONEncoder, dumps from ..all import objects +log = logging.getLogger(__name__) + class Object: all = {} @staticmethod def read(b: BytesIO, *args): - return Object.all[int.from_bytes(b.read(4), "little")].read(b, *args) + constructor_id = int.from_bytes(b.read(4), "little") + + try: + return Object.all[constructor_id].read(b, *args) + except KeyError: + log.error("Unknown constructor found: {}. Full data: {}".format( + hex(constructor_id), + b.getvalue().hex()) + ) def write(self, *args) -> bytes: pass From 77a1d5871485ac1f9f479612d6b1a13d2842a653 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 24 Aug 2018 18:13:07 +0200 Subject: [PATCH 165/530] Normalize "0.8.0dev1" to "0.8.0.dev1" --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 7ef07777..1de05f2c 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -23,7 +23,7 @@ __copyright__ = "Copyright (C) 2017-2018 Dan Tès Date: Sat, 25 Aug 2018 13:53:48 +0200 Subject: [PATCH 166/530] Add clean command to setup.py --- setup.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 00f9be63..a5ad052d 100644 --- a/setup.py +++ b/setup.py @@ -17,9 +17,10 @@ # along with Pyrogram. If not, see . import re +import shutil from sys import argv -from setuptools import setup, find_packages +from setuptools import setup, find_packages, Command from compiler.api import compiler as api_compiler from compiler.docs import compiler as docs_compiler @@ -44,6 +45,24 @@ with open("README.rst", encoding="utf-8") as f: readme = re.sub(r"\.\. \|.+\| raw:: html(?:\s{4}.+)+\n\n", "", f.read()) readme = re.sub(r"\|header\|", "|logo|\n\n|description|\n\n|scheme| |tgcrypto|", readme) + +class Clean(Command): + PATHS = "./build ./dist ./Pyrogram.egg-info".split() + + user_options = [] + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + for path in self.PATHS: + print("removing {}".format(path)) + shutil.rmtree(path, ignore_errors=True) + + setup( name="Pyrogram", version=version, @@ -85,5 +104,8 @@ setup( packages=find_packages(exclude=["compiler*"]), zip_safe=False, install_requires=read("requirements.txt"), - extras_require={"tgcrypto": ["tgcrypto>=1.0.4"]} + extras_require={"tgcrypto": ["tgcrypto>=1.0.4"]}, + cmdclass={ + "clean": Clean + } ) From 1e56f70b9309ab974de1ac396dc67ef9e090f456 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 25 Aug 2018 13:58:55 +0200 Subject: [PATCH 167/530] Also clean generated filed --- setup.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a5ad052d..ee716857 100644 --- a/setup.py +++ b/setup.py @@ -47,7 +47,15 @@ with open("README.rst", encoding="utf-8") as f: class Clean(Command): - PATHS = "./build ./dist ./Pyrogram.egg-info".split() + PATHS = [ + "./build", + "./dist", + "./Pyrogram.egg-info", + "pyrogram/api/errors/exceptions", + "pyrogram/api/functions", + "pyrogram/api/types", + "pyrogram/api/all.py" + ] user_options = [] From c9a946bc02ef8f1c44774fd3c05790d145b4e37c Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 25 Aug 2018 14:00:04 +0200 Subject: [PATCH 168/530] Turn version and readme into function --- setup.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index ee716857..f9153dfe 100644 --- a/setup.py +++ b/setup.py @@ -37,13 +37,17 @@ if len(argv) > 1 and argv[1] != "sdist": docs_compiler.start() error_compiler.start() -with open("pyrogram/__init__.py", encoding="utf-8") as f: - version = re.findall(r"__version__ = \"(.+)\"", f.read())[0] -# PyPI doesn't like raw html -with open("README.rst", encoding="utf-8") as f: - readme = re.sub(r"\.\. \|.+\| raw:: html(?:\s{4}.+)+\n\n", "", f.read()) - readme = re.sub(r"\|header\|", "|logo|\n\n|description|\n\n|scheme| |tgcrypto|", readme) +def get_version(): + with open("pyrogram/__init__.py", encoding="utf-8") as f: + return re.findall(r"__version__ = \"(.+)\"", f.read())[0] + + +def get_readme(): + # PyPI doesn't like raw html + with open("README.rst", encoding="utf-8") as f: + readme = re.sub(r"\.\. \|.+\| raw:: html(?:\s{4}.+)+\n\n", "", f.read()) + return re.sub(r"\|header\|", "|logo|\n\n|description|\n\n|scheme| |tgcrypto|", readme) class Clean(Command): @@ -73,9 +77,9 @@ class Clean(Command): setup( name="Pyrogram", - version=version, + version=get_version(), description="Telegram MTProto API Client Library for Python", - long_description=readme, + long_description=get_readme(), url="https://github.com/pyrogram", download_url="https://github.com/pyrogram/pyrogram/releases/latest", author="Dan Tès", From d6a0fcf4adaacf9315a41282904c0f89cc9aed1e Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 25 Aug 2018 14:22:19 +0200 Subject: [PATCH 169/530] Also clean docs generated files --- setup.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index f9153dfe..929222db 100644 --- a/setup.py +++ b/setup.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +import os import re import shutil from sys import argv @@ -58,7 +59,9 @@ class Clean(Command): "pyrogram/api/errors/exceptions", "pyrogram/api/functions", "pyrogram/api/types", - "pyrogram/api/all.py" + "pyrogram/api/all.py", + "docs/source/functions", + "docs/source/types" ] user_options = [] @@ -71,9 +74,12 @@ class Clean(Command): def run(self): for path in self.PATHS: - print("removing {}".format(path)) - shutil.rmtree(path, ignore_errors=True) - + try: + shutil.rmtree(path) if os.path.isdir(path) else os.remove(path) + except OSError: + print("skipping {}".format(path)) + else: + print("removing {}".format(path)) setup( name="Pyrogram", From 47f8a4eb34b17cd3f4bba493e6ec83e505200903 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 25 Aug 2018 15:14:51 +0200 Subject: [PATCH 170/530] Add generate command to setup.py --- setup.py | 95 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 81 insertions(+), 14 deletions(-) diff --git a/setup.py b/setup.py index 929222db..6cc10340 100644 --- a/setup.py +++ b/setup.py @@ -33,38 +33,56 @@ def read(file: str) -> list: return [i.strip() for i in r] -if len(argv) > 1 and argv[1] != "sdist": - api_compiler.start() - docs_compiler.start() - error_compiler.start() - - def get_version(): with open("pyrogram/__init__.py", encoding="utf-8") as f: return re.findall(r"__version__ = \"(.+)\"", f.read())[0] def get_readme(): - # PyPI doesn't like raw html + # PyPI doesn"t like raw html with open("README.rst", encoding="utf-8") as f: readme = re.sub(r"\.\. \|.+\| raw:: html(?:\s{4}.+)+\n\n", "", f.read()) return re.sub(r"\|header\|", "|logo|\n\n|description|\n\n|scheme| |tgcrypto|", readme) class Clean(Command): - PATHS = [ + DIST = [ "./build", "./dist", - "./Pyrogram.egg-info", + "./Pyrogram.egg-info" + ] + + API = [ "pyrogram/api/errors/exceptions", "pyrogram/api/functions", "pyrogram/api/types", "pyrogram/api/all.py", - "docs/source/functions", - "docs/source/types" ] - user_options = [] + DOCS = [ + "docs/source/functions", + "docs/source/types", + "docs/build" + ] + + ALL = DIST + API + DOCS + + description = "Clean generated files" + + user_options = [ + ("dist", None, "Clean distribution files"), + ("api", None, "Clean generated API files"), + ("docs", None, "Clean generated docs files"), + ("all", None, "Clean all generated files"), + ] + + def __init__(self, dist, **kw): + super().__init__(dist, **kw) + + self.dist = None + self.api = None + self.docs = None + self.all = None def initialize_options(self): pass @@ -73,7 +91,21 @@ class Clean(Command): pass def run(self): - for path in self.PATHS: + paths = set() + + if self.dist: + paths.update(Clean.DIST) + + if self.api: + paths.update(Clean.API) + + if self.docs: + paths.update(Clean.DOCS) + + if self.all: + paths.update(Clean.ALL) + + for path in sorted(list(paths)): try: shutil.rmtree(path) if os.path.isdir(path) else os.remove(path) except OSError: @@ -81,6 +113,40 @@ class Clean(Command): else: print("removing {}".format(path)) + +class Generate(Command): + description = "Generate Pyrogram files" + + user_options = [ + ("api", None, "Generate API files"), + ("docs", None, "Generate docs files"), + ] + + def __init__(self, dist, **kw): + super().__init__(dist, **kw) + + self.api = None + self.docs = None + + def initialize_options(self): + pass + + def finalize_options(self): + pass + + def run(self): + if self.api: + error_compiler.start() + api_compiler.start() + + if self.docs: + docs_compiler.start() + + +if len(argv) > 1 and argv[1] in ["bdist_wheel", "install"]: + error_compiler.start() + api_compiler.start() + setup( name="Pyrogram", version=get_version(), @@ -124,6 +190,7 @@ setup( install_requires=read("requirements.txt"), extras_require={"tgcrypto": ["tgcrypto>=1.0.4"]}, cmdclass={ - "clean": Clean + "clean": Clean, + "generate": Generate, } ) From ccc3cb0c876ae43c3fbcffd82bb96d9c38c78c73 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 26 Aug 2018 19:18:14 +0200 Subject: [PATCH 171/530] Rename generate to build Replaces the default build behaviour --- setup.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index 6cc10340..5df52747 100644 --- a/setup.py +++ b/setup.py @@ -114,12 +114,12 @@ class Clean(Command): print("removing {}".format(path)) -class Generate(Command): - description = "Generate Pyrogram files" +class Build(Command): + description = "Build Pyrogram files" user_options = [ - ("api", None, "Generate API files"), - ("docs", None, "Generate docs files"), + ("api", None, "Build API files"), + ("docs", None, "Build docs files"), ] def __init__(self, dist, **kw): @@ -191,6 +191,6 @@ setup( extras_require={"tgcrypto": ["tgcrypto>=1.0.4"]}, cmdclass={ "clean": Clean, - "generate": Generate, + "build": Build, } ) From 2779e33d1351a461ce3fc1d0f8a692360e4cc8e1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 27 Aug 2018 02:11:07 +0200 Subject: [PATCH 172/530] Rename "token" to "bot_token" --- pyrogram/client/client.py | 8 ++++---- pyrogram/client/ext/base_client.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 3af60931..dba204fd 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -201,7 +201,7 @@ class Client(Methods, BaseClient): raise ConnectionError("Client has already been started") if self.BOT_TOKEN_RE.match(self.session_name): - self.token = self.session_name + self.bot_token = self.session_name self.session_name = self.session_name.split(":")[0] self.load_config() @@ -217,14 +217,14 @@ class Client(Methods, BaseClient): self.is_started = True if self.user_id is None: - if self.token is None: + if self.bot_token is None: self.authorize_user() else: self.authorize_bot() self.save_session() - if self.token is None: + if self.bot_token is None: now = time.time() if abs(now - self.date) > Client.OFFLINE_SLEEP: @@ -381,7 +381,7 @@ class Client(Methods, BaseClient): flags=0, api_id=self.api_id, api_hash=self.api_hash, - bot_auth_token=self.token + bot_auth_token=self.bot_token ) ) except UserMigrate as e: diff --git a/pyrogram/client/ext/base_client.py b/pyrogram/client/ext/base_client.py index c78997c1..fa96e1db 100644 --- a/pyrogram/client/ext/base_client.py +++ b/pyrogram/client/ext/base_client.py @@ -64,7 +64,7 @@ class BaseClient: } def __init__(self): - self.token = None + self.bot_token = None self.dc_id = None self.auth_key = None self.user_id = None From 973ccfcd033b4d11c7fe18a2698da0f064a3306b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 28 Aug 2018 12:23:22 +0200 Subject: [PATCH 173/530] Use compact IPv6 addresses --- pyrogram/session/internals/data_center.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pyrogram/session/internals/data_center.py b/pyrogram/session/internals/data_center.py index 154cd9e0..154ba4e5 100644 --- a/pyrogram/session/internals/data_center.py +++ b/pyrogram/session/internals/data_center.py @@ -35,19 +35,19 @@ class DataCenter: } TEST_IPV6 = { - 1: "2001:0b28:f23d:f001:0000:0000:0000:000e", - 2: "2001:067c:04e8:f002:0000:0000:0000:000e", - 3: "2001:0b28:f23d:f003:0000:0000:0000:000e", - 121: "2a03:b0c0:0003:00d0:0000:0000:0114:d001" + 1: "2001:b28:f23d:f001::e", + 2: "2001:67c:4e8:f002::e", + 3: "2001:b28:f23d:f003::e", + 121: "2a03:b0c0:3:d0::114:d001" } PROD_IPV6 = { - 1: "2001:0b28:f23d:f001:0000:0000:0000:000a", - 2: "2001:067c:04e8:f002:0000:0000:0000:000a", - 3: "2001:0b28:f23d:f003:0000:0000:0000:000a", - 4: "2001:067c:04e8:f004:0000:0000:0000:000a", - 5: "2001:0b28:f23f:f005:0000:0000:0000:000a", - 121: "2a03:b0c0:0003:00d0:0000:0000:0114:d001" + 1: "2001:b28:f23d:f001::a", + 2: "2001:67c:4e8:f002::a", + 3: "2001:b28:f23d:f003::a", + 4: "2001:67c:4e8:f004::a", + 5: "2001:b28:f23f:f005::a", + 121: "2a03:b0c0:3:d0::114:d001" } def __new__(cls, dc_id: int, test_mode: bool, ipv6: bool): From a0c1018a1bcf63201fb3b0676b6e3aea2eeca4c3 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 28 Aug 2018 12:25:08 +0200 Subject: [PATCH 174/530] Minor style fix --- pyrogram/session/internals/data_center.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pyrogram/session/internals/data_center.py b/pyrogram/session/internals/data_center.py index 154ba4e5..d36e0613 100644 --- a/pyrogram/session/internals/data_center.py +++ b/pyrogram/session/internals/data_center.py @@ -52,6 +52,14 @@ class DataCenter: def __new__(cls, dc_id: int, test_mode: bool, ipv6: bool): if ipv6: - return (cls.TEST_IPV6[dc_id], 80) if test_mode else (cls.PROD_IPV6[dc_id], 443) + return ( + (cls.TEST_IPV6[dc_id], 80) + if test_mode + else (cls.PROD_IPV6[dc_id], 443) + ) else: - return (cls.TEST[dc_id], 80) if test_mode else (cls.PROD[dc_id], 443) + return ( + (cls.TEST[dc_id], 80) + if test_mode + else (cls.PROD[dc_id], 443) + ) From f50638772cebc5bd1dad2b01de8ae6a1b58382e6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 28 Aug 2018 12:38:02 +0200 Subject: [PATCH 175/530] Minor fix: update info log --- pyrogram/session/session.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index c87f0698..f0387002 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -156,7 +156,7 @@ class Session: self.ping_thread = Thread(target=self.ping, name="PingThread") self.ping_thread.start() - log.info("Connection inited: Layer {}".format(layer)) + log.info("Session initialized: Layer {}".format(layer)) except AuthKeyDuplicated as e: self.stop() raise e From b845544e638eb7b6e96c74154af5052d1300a51d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 28 Aug 2018 12:39:14 +0200 Subject: [PATCH 176/530] Info log device and system parameters --- pyrogram/session/session.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index f0387002..4ca32733 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -157,6 +157,9 @@ class Session: self.ping_thread.start() log.info("Session initialized: Layer {}".format(layer)) + log.info("Device: {} - {}".format(self.client.device_model, self.client.app_version)) + log.info("System: {} ({})".format(self.client.system_version, self.client.lang_code.upper())) + except AuthKeyDuplicated as e: self.stop() raise e From 49f2cbe04f1d41d8a62cc6d1981c28109080f574 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 29 Aug 2018 22:04:04 +0200 Subject: [PATCH 177/530] Move CURRENT_DH_PRIME into Prime namespace --- pyrogram/crypto/prime.py | 12 ++++++++++++ pyrogram/session/auth.py | 14 +------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pyrogram/crypto/prime.py b/pyrogram/crypto/prime.py index 9338c206..8e9426ca 100644 --- a/pyrogram/crypto/prime.py +++ b/pyrogram/crypto/prime.py @@ -20,6 +20,18 @@ from random import randint class Prime: + CURRENT_DH_PRIME = int( + "C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F" + "48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C37" + "20FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F64" + "2477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4" + "A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754" + "FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4" + "E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F" + "0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5B", + 16 + ) + # Recursive variant # @classmethod # def gcd(cls, a: int, b: int) -> int: diff --git a/pyrogram/session/auth.py b/pyrogram/session/auth.py index 2142be59..a545a642 100644 --- a/pyrogram/session/auth.py +++ b/pyrogram/session/auth.py @@ -34,18 +34,6 @@ log = logging.getLogger(__name__) class Auth: MAX_RETRIES = 5 - CURRENT_DH_PRIME = int( - "C71CAEB9C6B1C9048E6C522F70F13F73980D40238E3E21C14934D037563D930F" - "48198A0AA7C14058229493D22530F4DBFA336F6E0AC925139543AED44CCE7C37" - "20FD51F69458705AC68CD4FE6B6B13ABDC9746512969328454F18FAF8C595F64" - "2477FE96BB2A941D5BCD1D4AC8CC49880708FA9B378E3C4F3A9060BEE67CF9A4" - "A4A695811051907E162753B56B0F6B410DBA74D8A84B2A14B3144E0EF1284754" - "FD17ED950D5965B4B9DD46582DB1178D169C6BC465B0D6FF9CA3928FEF5B9AE4" - "E418FC15E83EBEA0F87FA9FF5EED70050DED2849F47BF959D956850CE929851F" - "0D8115F635B105EE2E4E15D04B2454BF6F4FADF034B10403119CD8E3B92FCC5B", - 16 - ) - def __init__(self, dc_id: int, test_mode: bool, ipv6: bool, proxy: dict): self.dc_id = dc_id self.test_mode = test_mode @@ -220,7 +208,7 @@ class Auth: # Security checks ####################### - assert dh_prime == self.CURRENT_DH_PRIME + assert dh_prime == Prime.CURRENT_DH_PRIME log.debug("DH parameters check: OK") # https://core.telegram.org/mtproto/security_guidelines#g-a-and-g-b-validation From ef9fc969d3334c8c97c1cdd203055e00093c3707 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 29 Aug 2018 22:20:00 +0200 Subject: [PATCH 178/530] Info log connection settings --- pyrogram/connection/connection.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyrogram/connection/connection.py b/pyrogram/connection/connection.py index ca9bd96c..b9d4cc87 100644 --- a/pyrogram/connection/connection.py +++ b/pyrogram/connection/connection.py @@ -58,6 +58,10 @@ class Connection: self.connection.close() time.sleep(1) else: + log.info("Connected! IPv{} - {}".format( + "6" if self.ipv6 else "4", + self.mode.__name__ + )) break else: raise TimeoutError From 43483a1ccdf46644901a8795dd2d03c6ed55e442 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 29 Aug 2018 22:20:32 +0200 Subject: [PATCH 179/530] Remove info logs from protocol impls --- pyrogram/connection/transport/tcp/tcp_abridged.py | 2 -- pyrogram/connection/transport/tcp/tcp_abridged_o.py | 2 -- pyrogram/connection/transport/tcp/tcp_full.py | 1 - pyrogram/connection/transport/tcp/tcp_intermediate.py | 2 -- pyrogram/connection/transport/tcp/tcp_intermediate_o.py | 2 -- 5 files changed, 9 deletions(-) diff --git a/pyrogram/connection/transport/tcp/tcp_abridged.py b/pyrogram/connection/transport/tcp/tcp_abridged.py index d89421f5..5566b179 100644 --- a/pyrogram/connection/transport/tcp/tcp_abridged.py +++ b/pyrogram/connection/transport/tcp/tcp_abridged.py @@ -31,8 +31,6 @@ class TCPAbridged(TCP): super().connect(address) super().sendall(b"\xef") - log.info("Connected{}!".format(" with proxy" if self.proxy_enabled else "")) - def sendall(self, data: bytes, *args): length = len(data) // 4 diff --git a/pyrogram/connection/transport/tcp/tcp_abridged_o.py b/pyrogram/connection/transport/tcp/tcp_abridged_o.py index 57cc0336..91ee8375 100644 --- a/pyrogram/connection/transport/tcp/tcp_abridged_o.py +++ b/pyrogram/connection/transport/tcp/tcp_abridged_o.py @@ -55,8 +55,6 @@ class TCPAbridgedO(TCP): super().sendall(nonce) - log.info("Connected{}!".format(" with proxy" if self.proxy_enabled else "")) - def sendall(self, data: bytes, *args): length = len(data) // 4 diff --git a/pyrogram/connection/transport/tcp/tcp_full.py b/pyrogram/connection/transport/tcp/tcp_full.py index 0aac1a14..8704247b 100644 --- a/pyrogram/connection/transport/tcp/tcp_full.py +++ b/pyrogram/connection/transport/tcp/tcp_full.py @@ -34,7 +34,6 @@ class TCPFull(TCP): def connect(self, address: tuple): super().connect(address) self.seq_no = 0 - log.info("Connected{}!".format(" with proxy" if self.proxy_enabled else "")) def sendall(self, data: bytes, *args): # 12 = packet_length (4), seq_no (4), crc32 (4) (at the end) diff --git a/pyrogram/connection/transport/tcp/tcp_intermediate.py b/pyrogram/connection/transport/tcp/tcp_intermediate.py index b33fe466..aa198db7 100644 --- a/pyrogram/connection/transport/tcp/tcp_intermediate.py +++ b/pyrogram/connection/transport/tcp/tcp_intermediate.py @@ -32,8 +32,6 @@ class TCPIntermediate(TCP): super().connect(address) super().sendall(b"\xee" * 4) - log.info("Connected{}!".format(" with proxy" if self.proxy_enabled else "")) - def sendall(self, data: bytes, *args): super().sendall(pack(" Date: Thu, 30 Aug 2018 01:17:13 +0200 Subject: [PATCH 180/530] Rename "build" to "generate" It was interfering with the built-in command "install" --- setup.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index 5df52747..a7a1458a 100644 --- a/setup.py +++ b/setup.py @@ -114,12 +114,12 @@ class Clean(Command): print("removing {}".format(path)) -class Build(Command): - description = "Build Pyrogram files" +class Generate(Command): + description = "Generate Pyrogram files" user_options = [ - ("api", None, "Build API files"), - ("docs", None, "Build docs files"), + ("api", None, "Generate API files"), + ("docs", None, "Generate docs files") ] def __init__(self, dist, **kw): @@ -191,6 +191,6 @@ setup( extras_require={"tgcrypto": ["tgcrypto>=1.0.4"]}, cmdclass={ "clean": Clean, - "build": Build, + "generate": Generate } ) From ca15778ac893214db59d521381364e5a5fdb3515 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 30 Aug 2018 01:17:35 +0200 Subject: [PATCH 181/530] Make clean default to all --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a7a1458a..76f1f7a9 100644 --- a/setup.py +++ b/setup.py @@ -102,7 +102,7 @@ class Clean(Command): if self.docs: paths.update(Clean.DOCS) - if self.all: + if self.all or not paths: paths.update(Clean.ALL) for path in sorted(list(paths)): From 2a78dff79cb75769465fe2e10541e4377fc28789 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 30 Aug 2018 01:17:51 +0200 Subject: [PATCH 182/530] Minor style fixes --- setup.py | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/setup.py b/setup.py index 76f1f7a9..b8d5c274 100644 --- a/setup.py +++ b/setup.py @@ -46,25 +46,9 @@ def get_readme(): class Clean(Command): - DIST = [ - "./build", - "./dist", - "./Pyrogram.egg-info" - ] - - API = [ - "pyrogram/api/errors/exceptions", - "pyrogram/api/functions", - "pyrogram/api/types", - "pyrogram/api/all.py", - ] - - DOCS = [ - "docs/source/functions", - "docs/source/types", - "docs/build" - ] - + DIST = ["./build", "./dist", "./Pyrogram.egg-info"] + API = ["pyrogram/api/errors/exceptions", "pyrogram/api/functions", "pyrogram/api/types", "pyrogram/api/all.py"] + DOCS = ["docs/source/functions", "docs/source/types", "docs/build"] ALL = DIST + API + DOCS description = "Clean generated files" From 9f4d7854e8f91ef79562e6566085e3ea6bc0e735 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 30 Aug 2018 01:23:19 +0200 Subject: [PATCH 183/530] Fix ipv6 branch merge mess --- pyrogram/client/client.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 7d195e01..e9be7a4e 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -1074,7 +1074,7 @@ class Client(Methods, BaseClient): file_id = file_id or self.rnd_id() md5_sum = md5() if not is_big and not is_missing_part else None - session = Session(self, self.ipv6, self.dc_id, self.auth_key, is_media=True) + session = Session(self, self.dc_id, self.auth_key, is_media=True) session.start() try: @@ -1160,7 +1160,7 @@ class Client(Methods, BaseClient): session = Session( self, dc_id, - Auth(dc_id, self.test_mode, self._proxy).create(), + Auth(dc_id, self.test_mode, self.ipv6, self._proxy).create(), is_media=True ) @@ -1245,7 +1245,7 @@ class Client(Methods, BaseClient): cdn_session = Session( self, r.dc_id, - Auth(r.dc_id, self.test_mode, self._proxy).create(), + Auth(r.dc_id, self.test_mode, self.ipv6, self._proxy).create(), is_media=True, is_cdn=True ) From d5ca99dfffcf2521e0e53dbace70aa3a3b6a665d Mon Sep 17 00:00:00 2001 From: zeroone2numeral2 Date: Thu, 30 Aug 2018 11:50:09 +0200 Subject: [PATCH 184/530] Allow to set audio thumbnail when using send_audio With the Bot API 4.0 update (https://core.telegram.org/bots/api#july-26-2018), sendAudio allows bots to pass a thumbnail - making it possible for pyrogram to include a 'thumb' parameter in its convenience method 'send_audio' --- pyrogram/client/methods/messages/send_audio.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pyrogram/client/methods/messages/send_audio.py b/pyrogram/client/methods/messages/send_audio.py index 7d590b79..43635f01 100644 --- a/pyrogram/client/methods/messages/send_audio.py +++ b/pyrogram/client/methods/messages/send_audio.py @@ -35,6 +35,7 @@ class SendAudio(BaseClient): duration: int = 0, performer: str = None, title: str = None, + thumb: str = None, disable_notification: bool = None, reply_to_message_id: int = None, reply_markup=None, @@ -74,6 +75,11 @@ class SendAudio(BaseClient): title (``str``, *optional*): Track name. + thumb (``str``, *optional*): + Audio thumbnail. + Pass a file path as string to send an image that exists on your local machine. + Thumbnail should have 90 or less pixels of width and 90 or less pixels of height. + disable_notification (``bool``, *optional*): Sends the message silently. Users will receive a notification with no sound. @@ -118,10 +124,12 @@ class SendAudio(BaseClient): style = self.html if parse_mode.lower() == "html" else self.markdown if os.path.exists(audio): + thumb = None if thumb is None else self.save_file(thumb) file = self.save_file(audio, progress=progress, progress_args=progress_args) media = types.InputMediaUploadedDocument( mime_type=mimetypes.types_map.get("." + audio.split(".")[-1], "audio/mpeg"), file=file, + thumb=thumb, attributes=[ types.DocumentAttributeAudio( duration=duration, From a5979a3ac7b1a3bef249ab111642dafe1c57a026 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 31 Aug 2018 12:56:05 +0200 Subject: [PATCH 185/530] Update tgcrypto function names --- pyrogram/crypto/aes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyrogram/crypto/aes.py b/pyrogram/crypto/aes.py index e4fb94b1..065a5b4d 100644 --- a/pyrogram/crypto/aes.py +++ b/pyrogram/crypto/aes.py @@ -30,19 +30,19 @@ try: # TODO: Use new tgcrypto function names @classmethod def ige256_encrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes: - return tgcrypto.ige_encrypt(data, key, iv) + return tgcrypto.ige256_encrypt(data, key, iv) @classmethod def ige256_decrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes: - return tgcrypto.ige_decrypt(data, key, iv) + return tgcrypto.ige256_decrypt(data, key, iv) @staticmethod def ctr256_encrypt(data: bytes, key: bytes, iv: bytearray, state: bytearray = None) -> bytes: - return tgcrypto.ctr_encrypt(data, key, iv, state or bytearray(1)) + return tgcrypto.ctr256_encrypt(data, key, iv, state or bytearray(1)) @staticmethod def ctr256_decrypt(data: bytes, key: bytes, iv: bytearray, state: bytearray = None) -> bytes: - return tgcrypto.ctr_decrypt(data, key, iv, state or bytearray(1)) + return tgcrypto.ctr256_decrypt(data, key, iv, state or bytearray(1)) @staticmethod def xor(a: bytes, b: bytes) -> bytes: From f576fc899dc5765822a01d2af1696db648256c82 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 31 Aug 2018 13:12:13 +0200 Subject: [PATCH 186/530] Remove TODO --- pyrogram/crypto/aes.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyrogram/crypto/aes.py b/pyrogram/crypto/aes.py index 065a5b4d..f16688c4 100644 --- a/pyrogram/crypto/aes.py +++ b/pyrogram/crypto/aes.py @@ -27,7 +27,6 @@ try: class AES: - # TODO: Use new tgcrypto function names @classmethod def ige256_encrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes: return tgcrypto.ige256_encrypt(data, key, iv) From 07a9cce8efe1b2353556298e3351611eaa0007b8 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 1 Sep 2018 00:58:44 +0200 Subject: [PATCH 187/530] Add missing InputMedia types to docs --- docs/source/pyrogram/Types.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/source/pyrogram/Types.rst b/docs/source/pyrogram/Types.rst index 92093b11..e8dc709c 100644 --- a/docs/source/pyrogram/Types.rst +++ b/docs/source/pyrogram/Types.rst @@ -62,6 +62,9 @@ Input Media InputMediaPhoto InputMediaVideo + InputMediaAudio + InputMediaAnimation + InputMediaDocument InputPhoneContact .. User & Chats @@ -172,5 +175,14 @@ Input Media .. autoclass:: InputMediaVideo :members: +.. autoclass:: InputMediaAudio + :members: + +.. autoclass:: InputMediaAnimation + :members: + +.. autoclass:: InputMediaDocument + :members: + .. autoclass:: InputPhoneContact :members: From 4c9d9d84f289c40c3c9b44491db47d2c88b00204 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 1 Sep 2018 01:27:22 +0200 Subject: [PATCH 188/530] Change the way int to bytes conversion is used Maybe at some point I should switch to struct --- pyrogram/api/core/primitives/bool.py | 2 +- pyrogram/api/core/primitives/bytes.py | 2 +- pyrogram/api/core/primitives/int.py | 2 +- pyrogram/api/core/primitives/null.py | 2 +- pyrogram/crypto/rsa.py | 14 +++++--------- pyrogram/session/auth.py | 20 ++++++++++---------- 6 files changed, 19 insertions(+), 23 deletions(-) diff --git a/pyrogram/api/core/primitives/bool.py b/pyrogram/api/core/primitives/bool.py index cc8655d9..9641e865 100644 --- a/pyrogram/api/core/primitives/bool.py +++ b/pyrogram/api/core/primitives/bool.py @@ -30,7 +30,7 @@ class BoolFalse(Object): return cls.value def __new__(cls) -> bytes: - return int.to_bytes(cls.ID, 4, "little") + return cls.ID.to_bytes(4, "little") class BoolTrue(BoolFalse): diff --git a/pyrogram/api/core/primitives/bytes.py b/pyrogram/api/core/primitives/bytes.py index da438ef1..d161cc9c 100644 --- a/pyrogram/api/core/primitives/bytes.py +++ b/pyrogram/api/core/primitives/bytes.py @@ -48,7 +48,7 @@ class Bytes(Object): else: return ( bytes([254]) - + int.to_bytes(length, 3, "little") + + length.to_bytes(3, "little") + value + bytes(-length % 4) ) diff --git a/pyrogram/api/core/primitives/int.py b/pyrogram/api/core/primitives/int.py index 0985367f..3de37151 100644 --- a/pyrogram/api/core/primitives/int.py +++ b/pyrogram/api/core/primitives/int.py @@ -29,7 +29,7 @@ class Int(Object): return int.from_bytes(b.read(cls.SIZE), "little", signed=signed) def __new__(cls, value: int, signed: bool = True) -> bytes: - return int.to_bytes(value, cls.SIZE, "little", signed=signed) + return value.to_bytes(cls.SIZE, "little", signed=signed) class Long(Int): diff --git a/pyrogram/api/core/primitives/null.py b/pyrogram/api/core/primitives/null.py index 3d73c06e..7a26b112 100644 --- a/pyrogram/api/core/primitives/null.py +++ b/pyrogram/api/core/primitives/null.py @@ -29,4 +29,4 @@ class Null(Object): return None def __new__(cls) -> bytes: - return int.to_bytes(cls.ID, 4, "little") + return cls.ID.to_bytes(4, "little") diff --git a/pyrogram/crypto/rsa.py b/pyrogram/crypto/rsa.py index 9f02e2cc..10302dab 100644 --- a/pyrogram/crypto/rsa.py +++ b/pyrogram/crypto/rsa.py @@ -206,12 +206,8 @@ class RSA: @classmethod def encrypt(cls, data: bytes, fingerprint: int) -> bytes: - return int.to_bytes( - pow( - int.from_bytes(data, "big"), - cls.server_public_keys[fingerprint].e, - cls.server_public_keys[fingerprint].m - ), - 256, - "big" - ) + return pow( + int.from_bytes(data, "big"), + cls.server_public_keys[fingerprint].e, + cls.server_public_keys[fingerprint].m + ).to_bytes(256, "big") diff --git a/pyrogram/session/auth.py b/pyrogram/session/auth.py index a545a642..87817da1 100644 --- a/pyrogram/session/auth.py +++ b/pyrogram/session/auth.py @@ -111,8 +111,8 @@ class Auth: data = types.PQInnerData( res_pq.pq, - int.to_bytes(p, 4, "big"), - int.to_bytes(q, 4, "big"), + p.to_bytes(4, "big"), + q.to_bytes(4, "big"), nonce, server_nonce, new_nonce, @@ -131,8 +131,8 @@ class Auth: functions.ReqDHParams( nonce, server_nonce, - int.to_bytes(p, 4, "big"), - int.to_bytes(q, 4, "big"), + p.to_bytes(4, "big"), + q.to_bytes(4, "big"), public_key_fingerprint, encrypted_data ) @@ -140,8 +140,8 @@ class Auth: encrypted_answer = server_dh_params.encrypted_answer - server_nonce = int.to_bytes(server_nonce, 16, "little", signed=True) - new_nonce = int.to_bytes(new_nonce, 32, "little", signed=True) + server_nonce = server_nonce.to_bytes(16, "little", signed=True) + new_nonce = new_nonce.to_bytes(32, "little", signed=True) tmp_aes_key = ( sha1(new_nonce + server_nonce).digest() @@ -170,7 +170,7 @@ class Auth: # Step 6 g = server_dh_inner_data.g b = int.from_bytes(urandom(256), "big") - g_b = int.to_bytes(pow(g, b, dh_prime), 256, "big") + g_b = pow(g, b, dh_prime).to_bytes(256, "big") retry_id = 0 @@ -199,8 +199,8 @@ class Auth: # Step 7; Step 8 g_a = int.from_bytes(server_dh_inner_data.g_a, "big") - auth_key = int.to_bytes(pow(g_a, b, dh_prime), 256, "big") - server_nonce = int.to_bytes(server_nonce, 16, "little", signed=True) + auth_key = pow(g_a, b, dh_prime).to_bytes(256, "big") + server_nonce = server_nonce.to_bytes(16, "little", signed=True) # TODO: Handle errors @@ -235,7 +235,7 @@ class Auth: # 3rd message assert nonce == set_client_dh_params_answer.nonce assert server_nonce == set_client_dh_params_answer.server_nonce - server_nonce = int.to_bytes(server_nonce, 16, "little", signed=True) + server_nonce = server_nonce.to_bytes(16, "little", signed=True) log.debug("Nonce fields check: OK") # Step 9 From db6042e91b1b8dfafa2ae51e9e2b8c4d07b6a329 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 2 Sep 2018 13:04:29 +0200 Subject: [PATCH 189/530] Fetch ChatForbidden and ChannelForbidden peers This fixes unwanted PEER_ID_INVALID errors in cases where a user or a bot was kicked/banned from a group, supergroup or channel --- pyrogram/client/client.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index e9be7a4e..a3cbd93b 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -615,7 +615,7 @@ class Client(Methods, BaseClient): if phone is not None: self.peers_by_phone[phone] = input_peer - if isinstance(entity, types.Chat): + if isinstance(entity, (types.Chat, types.ChatForbidden)): chat_id = entity.id peer_id = -chat_id @@ -625,7 +625,7 @@ class Client(Methods, BaseClient): self.peers_by_id[peer_id] = input_peer - if isinstance(entity, types.Channel): + if isinstance(entity, (types.Channel, types.ChannelForbidden)): channel_id = entity.id peer_id = int("-100" + str(channel_id)) @@ -634,7 +634,7 @@ class Client(Methods, BaseClient): if access_hash is None: continue - username = entity.username + username = getattr(entity, "username", None) input_peer = types.InputPeerChannel( channel_id=channel_id, From b619818c407c4ec298e563614360db7d811e0830 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 3 Sep 2018 16:35:22 +0200 Subject: [PATCH 190/530] Clear recv_queue on session stop. Fixes #103 --- pyrogram/session/session.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index b7645b11..2372d6bf 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -196,6 +196,7 @@ class Session: i.join() self.net_worker_list.clear() + self.recv_queue.queue.clear() for i in self.results.values(): i.event.set() From 392f0070fb694c0bc4d3f4a767ebcd3d392d7f93 Mon Sep 17 00:00:00 2001 From: Konstantin Klimov Date: Tue, 4 Sep 2018 08:25:56 +0300 Subject: [PATCH 191/530] Fixed decode error in `api.core.primitives.string.py` --- pyrogram/api/core/primitives/string.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/api/core/primitives/string.py b/pyrogram/api/core/primitives/string.py index 5c05e5b0..7d26fb57 100644 --- a/pyrogram/api/core/primitives/string.py +++ b/pyrogram/api/core/primitives/string.py @@ -24,7 +24,7 @@ from . import Bytes class String(Bytes): @staticmethod def read(b: BytesIO, *args) -> str: - return super(String, String).read(b).decode() + return super(String, String).read(b).decode(errors='replace') def __new__(cls, value: str) -> bytes: return super().__new__(cls, value.encode()) From b64d66130542b9d9aeb913c5c3b5f8280a306930 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 5 Sep 2018 16:41:46 +0200 Subject: [PATCH 192/530] Restore original Makefile --- docs/Makefile | 2 +- docs/Makefile_ | 20 -------------------- 2 files changed, 1 insertion(+), 21 deletions(-) delete mode 100644 docs/Makefile_ diff --git a/docs/Makefile b/docs/Makefile index c01e3d3d..c647eb13 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -3,7 +3,7 @@ # You can set these variables from the command line. SPHINXOPTS = -SPHINXBUILD = ~/PycharmProjects/pyrogram/venv3.6/bin/sphinx-build +SPHINXBUILD = sphinx-build SPHINXPROJ = Pyrogram SOURCEDIR = source BUILDDIR = build diff --git a/docs/Makefile_ b/docs/Makefile_ deleted file mode 100644 index c647eb13..00000000 --- a/docs/Makefile_ +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = Pyrogram -SOURCEDIR = source -BUILDDIR = build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file From 024e3280c1c623ff92ed70e810033f5c04e0079d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 5 Sep 2018 16:44:07 +0200 Subject: [PATCH 193/530] Remove unneeded file --- compiler/api/compiler.py | 5 ++--- compiler/api/source/pyrogram.tl | 22 ---------------------- 2 files changed, 2 insertions(+), 25 deletions(-) delete mode 100644 compiler/api/source/pyrogram.tl diff --git a/compiler/api/compiler.py b/compiler/api/compiler.py index 555d1824..bcb96ea4 100644 --- a/compiler/api/compiler.py +++ b/compiler/api/compiler.py @@ -172,9 +172,8 @@ def start(): with open("{}/source/auth_key.tl".format(HOME), encoding="utf-8") as auth, \ open("{}/source/sys_msgs.tl".format(HOME), encoding="utf-8") as system, \ - open("{}/source/main_api.tl".format(HOME), encoding="utf-8") as api, \ - open("{}/source/pyrogram.tl".format(HOME), encoding="utf-8") as pyrogram: - schema = (auth.read() + system.read() + api.read() + pyrogram.read()).splitlines() + open("{}/source/main_api.tl".format(HOME), encoding="utf-8") as api: + schema = (auth.read() + system.read() + api.read()).splitlines() with open("{}/template/mtproto.txt".format(HOME), encoding="utf-8") as f: mtproto_template = f.read() diff --git a/compiler/api/source/pyrogram.tl b/compiler/api/source/pyrogram.tl deleted file mode 100644 index a8232bd6..00000000 --- a/compiler/api/source/pyrogram.tl +++ /dev/null @@ -1,22 +0,0 @@ -// Pyrogram - ----types--- - -//pyrogram.update#b0700000 flags:# update_id:int message:flags.0?Message edited_message:flags.1?Message channel_post:flags.2?Message edited_channel_post:flags.3?Message inline_query:flags.4?InlineQuery chosen_inline_result:flags.5?ChosenInlineResult callback_query:flags.6?CallbackQuery shipping_query:flags.7?ShippingQuery pre_checkout_query:flags.8?PreCheckoutQuery = pyrogram.Update; -//pyrogram.user#b0700001 flags:# id:int is_bot:Bool first_name:string last_name:flags.0?string username:flags.1?string language_code:flags.2?string phone_number:flags.3?string photo:flags.4?ChatPhoto = pyrogram.User; -//pyrogram.chat#b0700002 flags:# id:int type:string title:flags.0?string username:flags.1?string first_name:flags.2?string last_name:flags.3?string all_members_are_administrators:flags.4?Bool photo:flags.5?ChatPhoto description:flags.6?string invite_link:flags.7?string pinned_message:flags.8?Message sticker_set_name:flags.9?string can_set_sticker_set:flags.10?Bool = pyrogram.Chat; -//pyrogram.message#b0700003 flags:# message_id:int from_user:flags.0?User date:int chat:Chat forward_from:flags.1?User forward_from_chat:flags.2?Chat forward_from_message_id:flags.3?int forward_signature:flags.4?string forward_date:flags.5?int reply_to_message:flags.6?Message edit_date:flags.7?int media_group_id:flags.8?string author_signature:flags.9?string text:flags.10?string entities:flags.11?Vector caption_entities:flags.12?Vector audio:flags.13?Audio document:flags.14?Document game:flags.15?Game photo:flags.16?Vector sticker:flags.17?Sticker video:flags.18?Video voice:flags.19?Voice video_note:flags.20?VideoNote caption:flags.21?string contact:flags.22?Contact location:flags.23?Location venue:flags.24?Venue new_chat_members:flags.25?Vector left_chat_member:flags.26?User new_chat_title:flags.27?string new_chat_photo:flags.28?Vector delete_chat_photo:flags.29?true group_chat_created:flags.30?true supergroup_chat_created:flags.31?true channel_chat_created:flags.32?true migrate_to_chat_id:flags.33?int migrate_from_chat_id:flags.34?int pinned_message:flags.35?Message invoice:flags.36?Invoice successful_payment:flags.37?SuccessfulPayment connected_website:flags.38?string views:flags.39?int via_bot:flags.40?User = pyrogram.Message; -//pyrogram.messageEntity#b0700004 flags:# type:string offset:int length:int url:flags.0?string user:flags.1?User = pyrogram.MessageEntity; -//pyrogram.photoSize#b0700005 flags:# file_id:string file_size:flags.0?int date:flags.1?int width:int height:int = pyrogram.PhotoSize; -//pyrogram.audio#b0700006 flags:# file_id:string thumb:flags.0?PhotoSize file_name:flags.1?string mime_type:flags.2?string file_size:flags.3?int date:flags.4?int duration:int performer:flags.5?string title:flags.6?string = pyrogram.Audio; -//pyrogram.document#b0700007 flags:# file_id:string thumb:flags.0?PhotoSize file_name:flags.1?string mime_type:flags.2?string file_size:flags.3?int date:flags.4?int = pyrogram.Document; -//pyrogram.video#b0700008 flags:# file_id:string thumb:flags.0?PhotoSize file_name:flags.1?string mime_type:flags.2?string file_size:flags.3?int date:flags.4?int width:int height:int duration:int = pyrogram.Video; -//pyrogram.voice#b0700009 flags:# file_id:string thumb:flags.0?PhotoSize file_name:flags.1?string mime_type:flags.2?string file_size:flags.3?int date:flags.4?int duration:int = pyrogram.Voice; -//pyrogram.videoNote#b0700010 flags:# file_id:string thumb:flags.0?PhotoSize file_name:flags.1?string mime_type:flags.2?string file_size:flags.3?int date:flags.4?int length:int duration:int = pyrogram.VideoNote; -//pyrogram.contact#b0700011 flags:# phone_number:string first_name:string last_name:flags.0?string user_id:flags.1?int = pyrogram.Contact; -//pyrogram.location#b0700012 longitude:double latitude:double = pyrogram.Location; -//pyrogram.venue#b0700013 flags:# location:Location title:string address:string foursquare_id:flags.0?string = pyrogram.Venue; -//pyrogram.userProfilePhotos#b0700014 total_count:int photos:Vector> = pyrogram.UserProfilePhotos; -//pyrogram.chatPhoto#b0700015 small_file_id:string big_file_id:string = pyrogram.ChatPhoto; -//pyrogram.chatMember#b0700016 flags:# user:User status:string until_date:flags.0?int can_be_edited:flags.1?Bool can_change_info:flags.2?Bool can_post_messages:flags.3?Bool can_edit_messages:flags.4?Bool can_delete_messages:flags.5?Bool can_invite_users:flags.6?Bool can_restrict_members:flags.7?Bool can_pin_messages:flags.8?Bool can_promote_members:flags.9?Bool can_send_messages:flags.10?Bool can_send_media_messages:flags.11?Bool can_send_other_messages:flags.12?Bool can_add_web_page_previews:flags.13?Bool = pyrogram.ChatMember; -//pyrogram.sticker#b0700017 flags:# file_id:string thumb:flags.0?PhotoSize file_name:flags.1?string mime_type:flags.2?string file_size:flags.3?int date:flags.4?int width:int height:int emoji:flags.5?string set_name:flags.6?string mask_position:flags.7?MaskPosition = pyrogram.Sticker; From b07c13a5131c3c5fddf8b3940e7c44b8a7b264bc Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 5 Sep 2018 16:50:38 +0200 Subject: [PATCH 194/530] Remove useless definition PyCharm will complain about Long not being a bytes, let's not care. --- pyrogram/api/core/primitives/int.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pyrogram/api/core/primitives/int.py b/pyrogram/api/core/primitives/int.py index 3de37151..4b9aded8 100644 --- a/pyrogram/api/core/primitives/int.py +++ b/pyrogram/api/core/primitives/int.py @@ -35,9 +35,6 @@ class Int(Object): class Long(Int): SIZE = 8 - def __new__(cls, *args): - return super().__new__(cls, *args) - class Int128(Int): SIZE = 16 From ea39062d2d1c2f4d9ade1ac237962879bee5efb1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 8 Sep 2018 19:16:51 +0200 Subject: [PATCH 195/530] Add get_chat_members_count method --- pyrogram/client/methods/chats/__init__.py | 4 +- .../methods/chats/get_chat_members_count.py | 53 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 pyrogram/client/methods/chats/get_chat_members_count.py diff --git a/pyrogram/client/methods/chats/__init__.py b/pyrogram/client/methods/chats/__init__.py index 72134abf..f9eb25f3 100644 --- a/pyrogram/client/methods/chats/__init__.py +++ b/pyrogram/client/methods/chats/__init__.py @@ -21,6 +21,7 @@ from .export_chat_invite_link import ExportChatInviteLink from .get_chat import GetChat from .get_chat_member import GetChatMember from .get_chat_members import GetChatMembers +from .get_chat_members_count import GetChatMembersCount from .get_dialogs import GetDialogs from .join_chat import JoinChat from .kick_chat_member import KickChatMember @@ -52,6 +53,7 @@ class Chats( SetChatDescription, PinChatMessage, UnpinChatMessage, - GetDialogs + GetDialogs, + GetChatMembersCount ): pass diff --git a/pyrogram/client/methods/chats/get_chat_members_count.py b/pyrogram/client/methods/chats/get_chat_members_count.py new file mode 100644 index 00000000..efe53c19 --- /dev/null +++ b/pyrogram/client/methods/chats/get_chat_members_count.py @@ -0,0 +1,53 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api import functions, types +from ...ext import BaseClient + + +class GetChatMembersCount(BaseClient): + def get_chat_members_count(self, chat_id: int or str): + """Use this method to get the number of members in a chat. + + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + + Returns: + On success, an integer is returned. + + Raises: + :class:`Error + ``ValueError``: If a chat_id belongs to user. + """ + peer = self.resolve_peer(chat_id) + + if isinstance(peer, types.InputPeerChat): + return self.send( + functions.messages.GetChats( + id=[peer.chat_id] + ) + ).chats[0].participants_count + elif isinstance(peer, types.InputPeerChannel): + return self.send( + functions.channels.GetFullChannel( + channel=peer + ) + ).full_chat.participants_count + else: + raise ValueError("The chat_id \"{}\" belongs to a user".format(chat_id)) From 05b3be1e885c21f2dfd920e9cafa49bc9c6ab303 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 8 Sep 2018 19:33:47 +0200 Subject: [PATCH 196/530] Info log DC number on connection --- pyrogram/connection/connection.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyrogram/connection/connection.py b/pyrogram/connection/connection.py index b9d4cc87..e10011d1 100644 --- a/pyrogram/connection/connection.py +++ b/pyrogram/connection/connection.py @@ -38,6 +38,7 @@ class Connection: } def __init__(self, dc_id: int, test_mode: bool, ipv6: bool, proxy: dict, mode: int = 1): + self.dc_id = dc_id self.ipv6 = ipv6 self.proxy = proxy self.address = DataCenter(dc_id, test_mode, ipv6) @@ -58,7 +59,8 @@ class Connection: self.connection.close() time.sleep(1) else: - log.info("Connected! IPv{} - {}".format( + log.info("Connected! DC{} - IPv{} - {}".format( + self.dc_id, "6" if self.ipv6 else "4", self.mode.__name__ )) From b1aff3ca5e3b670ebdbc618581f97dfdbc477876 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 12 Sep 2018 07:44:49 +0200 Subject: [PATCH 197/530] Small style fixes "double quotes" --- pyrogram/api/core/primitives/string.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/api/core/primitives/string.py b/pyrogram/api/core/primitives/string.py index 7d26fb57..3584d1b9 100644 --- a/pyrogram/api/core/primitives/string.py +++ b/pyrogram/api/core/primitives/string.py @@ -24,7 +24,7 @@ from . import Bytes class String(Bytes): @staticmethod def read(b: BytesIO, *args) -> str: - return super(String, String).read(b).decode(errors='replace') + return super(String, String).read(b).decode(errors="replace") def __new__(cls, value: str) -> bytes: return super().__new__(cls, value.encode()) From 6a4bf23b0925e1f17945f9b7e95d8f29f8e6a642 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 12 Sep 2018 08:14:49 +0200 Subject: [PATCH 198/530] Update send_audio docstrings --- pyrogram/client/methods/messages/send_audio.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/methods/messages/send_audio.py b/pyrogram/client/methods/messages/send_audio.py index 43635f01..4d9c729d 100644 --- a/pyrogram/client/methods/messages/send_audio.py +++ b/pyrogram/client/methods/messages/send_audio.py @@ -76,9 +76,10 @@ class SendAudio(BaseClient): Track name. thumb (``str``, *optional*): - Audio thumbnail. - Pass a file path as string to send an image that exists on your local machine. - Thumbnail should have 90 or less pixels of width and 90 or less pixels of height. + Thumbnail of the music file album cover. + The thumbnail should be in JPEG format and less than 200 KB in size. + A thumbnail's width and height should not exceed 90 pixels. + Thumbnails can't be reused and can be only uploaded as a new file. disable_notification (``bool``, *optional*): Sends the message silently. From eb8513e00900bd0e3b343756eec23c2484260e60 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 12 Sep 2018 08:26:13 +0200 Subject: [PATCH 199/530] Update send_video docstrings Add a more detailed "thumb" description --- pyrogram/client/methods/messages/send_video.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/methods/messages/send_video.py b/pyrogram/client/methods/messages/send_video.py index b86b4702..f646d425 100644 --- a/pyrogram/client/methods/messages/send_video.py +++ b/pyrogram/client/methods/messages/send_video.py @@ -75,9 +75,10 @@ class SendVideo(BaseClient): Video height. thumb (``str``, *optional*): - Video thumbnail. - Pass a file path as string to send an image that exists on your local machine. - Thumbnail should have 90 or less pixels of width and 90 or less pixels of height. + Thumbnail of the video sent. + The thumbnail should be in JPEG format and less than 200 KB in size. + A thumbnail's width and height should not exceed 90 pixels. + Thumbnails can't be reused and can be only uploaded as a new file. supports_streaming (``bool``, *optional*): Pass True, if the uploaded video is suitable for streaming. From b893698f1e8bbd04d44dfb4fd6d2a01e98c60908 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 14 Sep 2018 14:37:04 +0200 Subject: [PATCH 200/530] Add ability to add/remove users from the user filter. Use .users to access the inner set of users --- pyrogram/client/filters/filters.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index 4cd4b191..26ef8219 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -237,23 +237,27 @@ class Filters: return create("Regex", f, p=re.compile(pattern, flags)) @staticmethod - def user(user: int or str or list): - """Filter messages coming from specific users. + def user(users: int or str or list = None): + """Filter messages coming from one or more specific users. Args: - user (``int`` | ``str`` | ``list``): - The user or list of user IDs (int) or usernames (str) the filter should look for. + users (``int`` | ``str`` | ``list``): + Pass one or more user ids/usernames to filter the users. + The argument passed will be stored as a python set in the *.users* field of the filter instance. + To add or remove users dynamically, simply manipulate the inner set. + Defaults to None (empty set). """ return create( "User", lambda _, m: bool(m.from_user - and (m.from_user.id in _.u + and (m.from_user.id in _.users or (m.from_user.username - and m.from_user.username.lower() in _.u))), - u=( - {user.lower().strip("@") if type(user) is str else user} - if not isinstance(user, list) - else {i.lower().strip("@") if type(i) is str else i for i in user} + and m.from_user.username.lower() in _.users))), + users=( + set() if users is None + else {users.lower().strip("@") if type(users) is str else users} + if not isinstance(users, list) + else {i.lower().strip("@") if type(i) is str else i for i in users} ) ) From 4e293f23a92de671a39b801f02256ec9dca04799 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 14 Sep 2018 15:28:08 +0200 Subject: [PATCH 201/530] Make handlers test whether filters are callable and not if they exist --- pyrogram/client/handlers/callback_query_handler.py | 2 +- pyrogram/client/handlers/deleted_messages_handler.py | 2 +- pyrogram/client/handlers/message_handler.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/handlers/callback_query_handler.py b/pyrogram/client/handlers/callback_query_handler.py index c5346519..5d09f7d9 100644 --- a/pyrogram/client/handlers/callback_query_handler.py +++ b/pyrogram/client/handlers/callback_query_handler.py @@ -49,6 +49,6 @@ class CallbackQueryHandler(Handler): def check(self, callback_query): return ( self.filters(callback_query) - if self.filters + if callable(self.filters) else True ) diff --git a/pyrogram/client/handlers/deleted_messages_handler.py b/pyrogram/client/handlers/deleted_messages_handler.py index 55d5715f..8f5ef448 100644 --- a/pyrogram/client/handlers/deleted_messages_handler.py +++ b/pyrogram/client/handlers/deleted_messages_handler.py @@ -50,6 +50,6 @@ class DeletedMessagesHandler(Handler): def check(self, messages): return ( self.filters(messages.messages[0]) - if self.filters + if callable(self.filters) else True ) diff --git a/pyrogram/client/handlers/message_handler.py b/pyrogram/client/handlers/message_handler.py index 1b4770b3..e4c3d13f 100644 --- a/pyrogram/client/handlers/message_handler.py +++ b/pyrogram/client/handlers/message_handler.py @@ -50,6 +50,6 @@ class MessageHandler(Handler): def check(self, message): return ( self.filters(message) - if self.filters + if callable(self.filters) else True ) From 31578ddb33cdd29e13a3bee3320d9053be9f2fbf Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 14 Sep 2018 15:29:36 +0200 Subject: [PATCH 202/530] Give Filters.user superpowers It can now add and remove users at runtime --- pyrogram/client/filters/filters.py | 39 ++++++++++++++++-------------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index 26ef8219..7636f382 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -236,30 +236,33 @@ class Filters: return create("Regex", f, p=re.compile(pattern, flags)) - @staticmethod - def user(users: int or str or list = None): - """Filter messages coming from one or more specific users. + class user(Filter, set): + """Filter messages coming from one or more users. + + You can use `set bound methods `_ to manipulate the + users container. Args: users (``int`` | ``str`` | ``list``): Pass one or more user ids/usernames to filter the users. - The argument passed will be stored as a python set in the *.users* field of the filter instance. - To add or remove users dynamically, simply manipulate the inner set. - Defaults to None (empty set). + Defaults to None (no users). """ - return create( - "User", - lambda _, m: bool(m.from_user - and (m.from_user.id in _.users - or (m.from_user.username - and m.from_user.username.lower() in _.users))), - users=( - set() if users is None - else {users.lower().strip("@") if type(users) is str else users} - if not isinstance(users, list) - else {i.lower().strip("@") if type(i) is str else i for i in users} + + def __init__(self, users: int or str or list = None): + users = [] if users is None else users if type(users) is list else [users] + super().__init__( + {i.lower().strip("@") if type(i) is str else i for i in users} + if type(users) is list else + {users.lower().strip("@") if type(users) is str else users} + ) + + def __call__(self, message): + return bool( + message.from_user + and (message.from_user.id in self + or (message.from_user.username + and message.from_user.username.lower() in self)) ) - ) @staticmethod def chat(chat: int or str or list): From 339630dafb9c0acfe32f3a028fbf47be6c68173a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 14 Sep 2018 15:29:56 +0200 Subject: [PATCH 203/530] Add noinspection PyPep8Naming for Filters.user --- pyrogram/client/filters/filters.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index 7636f382..e218155a 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -236,6 +236,7 @@ class Filters: return create("Regex", f, p=re.compile(pattern, flags)) + # noinspection PyPep8Naming class user(Filter, set): """Filter messages coming from one or more users. From 3307b410b4dd2b0fdcebe2d740985a52d90fcc68 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 14 Sep 2018 15:33:32 +0200 Subject: [PATCH 204/530] Give superpowers to Filters.chat too It can now add and remove chats at runtime --- pyrogram/client/filters/filters.py | 40 ++++++++++++++++++------------ 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index e218155a..a573c875 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -265,26 +265,34 @@ class Filters: and message.from_user.username.lower() in self)) ) - @staticmethod - def chat(chat: int or str or list): - """Filter messages coming from specific chats. + # noinspection PyPep8Naming + class chat(Filter, set): + """Filter messages coming from one or more chats. + + You can use `set bound methods `_ to manipulate the + chats container. Args: - chat (``int`` | ``str`` | ``list``): - The chat or list of chat IDs (int) or usernames (str) the filter should look for. + chats (``int`` | ``str`` | ``list``): + Pass one or more chat ids/usernames to filter the chats. + Defaults to None (no chats). """ - return create( - "Chat", - lambda _, m: bool(m.chat - and (m.chat.id in _.c - or (m.chat.username - and m.chat.username.lower() in _.c))), - c=( - {chat.lower().strip("@") if type(chat) is str else chat} - if not isinstance(chat, list) - else {i.lower().strip("@") if type(i) is str else i for i in chat} + + def __init__(self, chats: int or str or list = None): + chats = [] if chats is None else chats if type(chats) is list else [chats] + super().__init__( + {i.lower().strip("@") if type(i) is str else i for i in chats} + if type(chats) is list else + {chats.lower().strip("@") if type(chats) is str else chats} + ) + + def __call__(self, message): + return bool( + message.chat + and (message.chat.id in self + or (message.chat.username + and message.chat.username.lower() in self)) ) - ) service = create( "Service", From edfdf9d143279aec29e7034a67163d6a956cd972 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 14 Sep 2018 15:34:00 +0200 Subject: [PATCH 205/530] Small docstring fixes --- pyrogram/client/filters/filters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index a573c875..79ab0f5f 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -245,7 +245,7 @@ class Filters: Args: users (``int`` | ``str`` | ``list``): - Pass one or more user ids/usernames to filter the users. + Pass one or more user ids/usernames to filter users. Defaults to None (no users). """ @@ -274,7 +274,7 @@ class Filters: Args: chats (``int`` | ``str`` | ``list``): - Pass one or more chat ids/usernames to filter the chats. + Pass one or more chat ids/usernames to filter chats. Defaults to None (no chats). """ From c75a4f182a0d788badfe3b7753604bbbb213ffc0 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 15 Sep 2018 13:23:25 +0200 Subject: [PATCH 206/530] Handle Telegram exceptions on start(). Fixes #121 The client doesn't need to be stopped as it never started successfully. --- pyrogram/client/client.py | 45 ++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 709ea95a..f0134be0 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -215,29 +215,34 @@ class Client(Methods, BaseClient): self.session.start() self.is_started = True + + try: + if self.user_id is None: + if self.token is None: + self.authorize_user() + else: + self.authorize_bot() + + self.save_session() - if self.user_id is None: if self.token is None: - self.authorize_user() + now = time.time() + + if abs(now - self.date) > Client.OFFLINE_SLEEP: + self.peers_by_username = {} + self.peers_by_phone = {} + + self.get_initial_dialogs() + self.get_contacts() + else: + self.send(functions.messages.GetPinnedDialogs()) + self.get_initial_dialogs_chunk() else: - self.authorize_bot() - - self.save_session() - - if self.token is None: - now = time.time() - - if abs(now - self.date) > Client.OFFLINE_SLEEP: - self.peers_by_username = {} - self.peers_by_phone = {} - - self.get_initial_dialogs() - self.get_contacts() - else: - self.send(functions.messages.GetPinnedDialogs()) - self.get_initial_dialogs_chunk() - else: - self.send(functions.updates.GetState()) + self.send(functions.updates.GetState()) + except Exception as e: + self.is_started = False + self.session.stop() + raise e for i in range(self.UPDATES_WORKERS): self.updates_workers_list.append( From d2d4f55673453dec7167895a5b221c19fa838288 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 17 Sep 2018 16:53:17 +0200 Subject: [PATCH 207/530] Revert "Remove TODO" This reverts commit f576fc8 --- pyrogram/crypto/aes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyrogram/crypto/aes.py b/pyrogram/crypto/aes.py index f16688c4..065a5b4d 100644 --- a/pyrogram/crypto/aes.py +++ b/pyrogram/crypto/aes.py @@ -27,6 +27,7 @@ try: class AES: + # TODO: Use new tgcrypto function names @classmethod def ige256_encrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes: return tgcrypto.ige256_encrypt(data, key, iv) From 0f0e757f4c1647b16e02570521ba8131e9cfb3cd Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 17 Sep 2018 16:53:21 +0200 Subject: [PATCH 208/530] Revert "Update tgcrypto function names" This reverts commit a5979a3 --- pyrogram/crypto/aes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyrogram/crypto/aes.py b/pyrogram/crypto/aes.py index 065a5b4d..e4fb94b1 100644 --- a/pyrogram/crypto/aes.py +++ b/pyrogram/crypto/aes.py @@ -30,19 +30,19 @@ try: # TODO: Use new tgcrypto function names @classmethod def ige256_encrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes: - return tgcrypto.ige256_encrypt(data, key, iv) + return tgcrypto.ige_encrypt(data, key, iv) @classmethod def ige256_decrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes: - return tgcrypto.ige256_decrypt(data, key, iv) + return tgcrypto.ige_decrypt(data, key, iv) @staticmethod def ctr256_encrypt(data: bytes, key: bytes, iv: bytearray, state: bytearray = None) -> bytes: - return tgcrypto.ctr256_encrypt(data, key, iv, state or bytearray(1)) + return tgcrypto.ctr_encrypt(data, key, iv, state or bytearray(1)) @staticmethod def ctr256_decrypt(data: bytes, key: bytes, iv: bytearray, state: bytearray = None) -> bytes: - return tgcrypto.ctr256_decrypt(data, key, iv, state or bytearray(1)) + return tgcrypto.ctr_decrypt(data, key, iv, state or bytearray(1)) @staticmethod def xor(a: bytes, b: bytes) -> bytes: From cd3649448cdbde1eda8d0a1adde9387c85ad66ac Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 17 Sep 2018 18:44:13 +0200 Subject: [PATCH 209/530] Add CHAT_WRITE_FORBIDDEN error --- compiler/error/source/403_FORBIDDEN.tsv | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 compiler/error/source/403_FORBIDDEN.tsv diff --git a/compiler/error/source/403_FORBIDDEN.tsv b/compiler/error/source/403_FORBIDDEN.tsv new file mode 100644 index 00000000..7bacbe7d --- /dev/null +++ b/compiler/error/source/403_FORBIDDEN.tsv @@ -0,0 +1,2 @@ +id message +CHAT_WRITE_FORBIDDEN You don't have rights to send messages in this chat \ No newline at end of file From f850d6352ed160fda27721209f14fdf2805d1920 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 17 Sep 2018 18:53:04 +0200 Subject: [PATCH 210/530] Enhance API by adding support for Context Managers. Closes #122 A batch script would be as simple as this example: from pyrogram import Client with Client("...") as app: app.send_message("haskell", "hi") --- pyrogram/client/client.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 97002e79..f501c01a 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -183,6 +183,13 @@ class Client(Methods, BaseClient): self.dispatcher = Dispatcher(self, workers) + def __enter__(self): + self.start() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.stop() + @property def proxy(self): return self._proxy From 19d04ca94fe3d6b79e2bf54ef925ea5e141a32e6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 18 Sep 2018 11:35:19 +0200 Subject: [PATCH 211/530] Reword Audio thumb description --- pyrogram/client/types/messages_and_media/audio.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/types/messages_and_media/audio.py b/pyrogram/client/types/messages_and_media/audio.py index 57731266..37f91992 100644 --- a/pyrogram/client/types/messages_and_media/audio.py +++ b/pyrogram/client/types/messages_and_media/audio.py @@ -30,7 +30,7 @@ class Audio(Object): Duration of the audio in seconds as defined by sender. thumb (:obj:`PhotoSize `, *optional*): - Audio thumbnail. + Thumbnail of the music file album cover. file_name (``str``, *optional*): Audio file name. From 28af5e14b4a2b23c4e57994c9c769fff660b4899 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 18 Sep 2018 11:36:20 +0200 Subject: [PATCH 212/530] Add "thumb" field for all InputMedia types except Photo --- .../client/types/input_media/input_media_animation.py | 8 ++++++++ pyrogram/client/types/input_media/input_media_audio.py | 8 ++++++++ .../client/types/input_media/input_media_document.py | 9 +++++++++ pyrogram/client/types/input_media/input_media_video.py | 8 ++++++++ 4 files changed, 33 insertions(+) diff --git a/pyrogram/client/types/input_media/input_media_animation.py b/pyrogram/client/types/input_media/input_media_animation.py index 12fe0e03..14f8c2de 100644 --- a/pyrogram/client/types/input_media/input_media_animation.py +++ b/pyrogram/client/types/input_media/input_media_animation.py @@ -28,6 +28,12 @@ class InputMediaAnimation(InputMedia): Pass a file_id as string to send a file that exists on the Telegram servers or pass a file path as string to upload a new file that exists on your local machine. + thumb (``str``, *optional*): + Thumbnail of the animation file sent. + The thumbnail should be in JPEG format and less than 200 KB in size. + A thumbnail's width and height should not exceed 90 pixels. + Thumbnails can't be reused and can be only uploaded as a new file. + caption (``str``, *optional*): Caption of the animation to be sent, 0-200 characters @@ -48,6 +54,7 @@ class InputMediaAnimation(InputMedia): def __init__(self, media: str, + thumb: str = None, caption: str = "", parse_mode: str = "", width: int = 0, @@ -55,6 +62,7 @@ class InputMediaAnimation(InputMedia): duration: int = 0): super().__init__(media, caption, parse_mode) + self.thumb = thumb self.width = width self.height = height self.duration = duration diff --git a/pyrogram/client/types/input_media/input_media_audio.py b/pyrogram/client/types/input_media/input_media_audio.py index 2c644107..83979b4a 100644 --- a/pyrogram/client/types/input_media/input_media_audio.py +++ b/pyrogram/client/types/input_media/input_media_audio.py @@ -29,6 +29,12 @@ class InputMediaAudio(InputMedia): Pass a file_id as string to send an audio that exists on the Telegram servers or pass a file path as string to upload a new audio that exists on your local machine. + thumb (``str``, *optional*): + Thumbnail of the music file album cover. + The thumbnail should be in JPEG format and less than 200 KB in size. + A thumbnail's width and height should not exceed 90 pixels. + Thumbnails can't be reused and can be only uploaded as a new file. + caption (``str``, *optional*): Caption of the audio to be sent, 0-200 characters @@ -49,6 +55,7 @@ class InputMediaAudio(InputMedia): def __init__(self, media: str, + thumb: str = None, caption: str = "", parse_mode: str = "", duration: int = 0, @@ -56,6 +63,7 @@ class InputMediaAudio(InputMedia): title: str = ""): super().__init__(media, caption, parse_mode) + self.thumb = thumb self.duration = duration self.performer = performer self.title = title diff --git a/pyrogram/client/types/input_media/input_media_document.py b/pyrogram/client/types/input_media/input_media_document.py index f64da619..07965534 100644 --- a/pyrogram/client/types/input_media/input_media_document.py +++ b/pyrogram/client/types/input_media/input_media_document.py @@ -28,6 +28,12 @@ class InputMediaDocument(InputMedia): Pass a file_id as string to send a file that exists on the Telegram servers or pass a file path as string to upload a new file that exists on your local machine. + thumb (``str``): + Thumbnail of the file sent. + The thumbnail should be in JPEG format and less than 200 KB in size. + A thumbnail's width and height should not exceed 90 pixels. + Thumbnails can't be reused and can be only uploaded as a new file. + caption (``str``, *optional*): Caption of the document to be sent, 0-200 characters @@ -39,6 +45,9 @@ class InputMediaDocument(InputMedia): def __init__(self, media: str, + thumb: str = None, caption: str = "", parse_mode: str = ""): super().__init__(media, caption, parse_mode) + + self.thumb = thumb diff --git a/pyrogram/client/types/input_media/input_media_video.py b/pyrogram/client/types/input_media/input_media_video.py index c1f2c9ac..54ce5e5e 100644 --- a/pyrogram/client/types/input_media/input_media_video.py +++ b/pyrogram/client/types/input_media/input_media_video.py @@ -30,6 +30,12 @@ class InputMediaVideo(InputMedia): pass a file path as string to upload a new video that exists on your local machine. Sending video by a URL is currently unsupported. + thumb (``str``): + Thumbnail of the video sent. + The thumbnail should be in JPEG format and less than 200 KB in size. + A thumbnail's width and height should not exceed 90 pixels. + Thumbnails can't be reused and can be only uploaded as a new file. + caption (``str``, *optional*): Caption of the video to be sent, 0-200 characters @@ -53,6 +59,7 @@ class InputMediaVideo(InputMedia): def __init__(self, media: str, + thumb: str = None, caption: str = "", parse_mode: str = "", width: int = 0, @@ -61,6 +68,7 @@ class InputMediaVideo(InputMedia): supports_streaming: bool = True): super().__init__(media, caption, parse_mode) + self.thumb = thumb self.width = width self.height = height self.duration = duration From 61e6e58be7410d055ff65cdab201aa78a0b21592 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 18 Sep 2018 11:36:52 +0200 Subject: [PATCH 213/530] Reword send_animation's thumb parameter description --- pyrogram/client/methods/messages/send_animation.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/methods/messages/send_animation.py b/pyrogram/client/methods/messages/send_animation.py index 55123332..30f28b30 100644 --- a/pyrogram/client/methods/messages/send_animation.py +++ b/pyrogram/client/methods/messages/send_animation.py @@ -73,9 +73,10 @@ class SendAnimation(BaseClient): Animation height. thumb (``str``, *optional*): - Animation thumbnail. - Pass a file path as string to send an image that exists on your local machine. - Thumbnail should have 90 or less pixels of width and 90 or less pixels of height. + Thumbnail of the animation file sent. + The thumbnail should be in JPEG format and less than 200 KB in size. + A thumbnail's width and height should not exceed 90 pixels. + Thumbnails can't be reused and can be only uploaded as a new file. disable_notification (``bool``, *optional*): Sends the message silently. From 42ea51cb77f47ee2d8bdfbde891270c686b256f5 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 18 Sep 2018 11:37:11 +0200 Subject: [PATCH 214/530] Make send_document and send_video_note accept a thumbnail #119 --- pyrogram/client/methods/messages/send_document.py | 9 +++++++++ pyrogram/client/methods/messages/send_video_note.py | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/pyrogram/client/methods/messages/send_document.py b/pyrogram/client/methods/messages/send_document.py index 01c3eca5..28d93f07 100644 --- a/pyrogram/client/methods/messages/send_document.py +++ b/pyrogram/client/methods/messages/send_document.py @@ -30,6 +30,7 @@ class SendDocument(BaseClient): def send_document(self, chat_id: int or str, document: str, + thumb: str = None, caption: str = "", parse_mode: str = "", disable_notification: bool = None, @@ -51,6 +52,12 @@ class SendDocument(BaseClient): pass an HTTP URL as a string for Telegram to get a file from the Internet, or pass a file path as string to upload a new file that exists on your local machine. + thumb (``str``): + Thumbnail of the file sent. + The thumbnail should be in JPEG format and less than 200 KB in size. + A thumbnail's width and height should not exceed 90 pixels. + Thumbnails can't be reused and can be only uploaded as a new file. + caption (``str``, *optional*): Document caption, 0-200 characters. @@ -103,10 +110,12 @@ class SendDocument(BaseClient): style = self.html if parse_mode.lower() == "html" else self.markdown if os.path.exists(document): + thumb = None if thumb is None else self.save_file(thumb) file = self.save_file(document, progress=progress, progress_args=progress_args) media = types.InputMediaUploadedDocument( mime_type=mimetypes.types_map.get("." + document.split(".")[-1], "text/plain"), file=file, + thumb=thumb, attributes=[ types.DocumentAttributeFilename(os.path.basename(document)) ] diff --git a/pyrogram/client/methods/messages/send_video_note.py b/pyrogram/client/methods/messages/send_video_note.py index 6adc6497..6da1962a 100644 --- a/pyrogram/client/methods/messages/send_video_note.py +++ b/pyrogram/client/methods/messages/send_video_note.py @@ -32,6 +32,7 @@ class SendVideoNote(BaseClient): video_note: str, duration: int = 0, length: int = 1, + thumb: str = None, disable_notification: bool = None, reply_to_message_id: int = None, reply_markup=None, @@ -57,6 +58,12 @@ class SendVideoNote(BaseClient): length (``int``, *optional*): Video width and height. + thumb (``str``, *optional*): + Thumbnail of the video sent. + The thumbnail should be in JPEG format and less than 200 KB in size. + A thumbnail's width and height should not exceed 90 pixels. + Thumbnails can't be reused and can be only uploaded as a new file. + disable_notification (``bool``, *optional*): Sends the message silently. Users will receive a notification with no sound. @@ -100,10 +107,12 @@ class SendVideoNote(BaseClient): file = None if os.path.exists(video_note): + thumb = None if thumb is None else self.save_file(thumb) file = self.save_file(video_note, progress=progress, progress_args=progress_args) media = types.InputMediaUploadedDocument( mime_type=mimetypes.types_map[".mp4"], file=file, + thumb=thumb, attributes=[ types.DocumentAttributeVideo( round_message=True, From 500ec09b47416c3e6464ca43b12fc5db1161d349 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 18 Sep 2018 19:16:55 +0200 Subject: [PATCH 215/530] Clean up load_config --- pyrogram/client/client.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index f501c01a..3ca979de 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -910,8 +910,6 @@ class Client(Methods, BaseClient): if getattr(self, option): pass else: - setattr(self, option, Client.APP_VERSION) - if parser.has_section("pyrogram"): setattr(self, option, parser.get( "pyrogram", @@ -919,18 +917,6 @@ class Client(Methods, BaseClient): fallback=getattr(Client, option.upper()) )) - if self.lang_code: - pass - else: - self.lang_code = Client.LANG_CODE - - if parser.has_section("pyrogram"): - self.lang_code = parser.get( - "pyrogram", - "lang_code", - fallback=Client.LANG_CODE - ) - if self._proxy: self._proxy["enabled"] = True else: From 8b364202c3ee50b8d152c857d9dfb1b61c72356d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 18 Sep 2018 19:17:28 +0200 Subject: [PATCH 216/530] Use list instead of set --- pyrogram/client/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 3ca979de..1f25c537 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -906,7 +906,7 @@ class Client(Methods, BaseClient): "More info: https://docs.pyrogram.ml/start/ProjectSetup#configuration" ) - for option in {"app_version", "device_model", "system_version", "lang_code"}: + for option in ["app_version", "device_model", "system_version", "lang_code"]: if getattr(self, option): pass else: From 84492fb942adb3febc05e73ff99d57b5634fdb9c Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 18 Sep 2018 21:28:44 +0200 Subject: [PATCH 217/530] Add an extra warning in case connection fails --- pyrogram/connection/connection.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyrogram/connection/connection.py b/pyrogram/connection/connection.py index e10011d1..8020bc71 100644 --- a/pyrogram/connection/connection.py +++ b/pyrogram/connection/connection.py @@ -66,6 +66,7 @@ class Connection: )) break else: + log.warning("Connection failed! Trying again...") raise TimeoutError def close(self): From 7aee163ddd14d85c3cf3c3d2c2a3df92dd1be6cd Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 11:53:26 +0200 Subject: [PATCH 218/530] Update docs reported version --- docs/source/start/Installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/start/Installation.rst b/docs/source/start/Installation.rst index bba927e4..d3ddfe7d 100644 --- a/docs/source/start/Installation.rst +++ b/docs/source/start/Installation.rst @@ -45,7 +45,7 @@ If no error shows up you are good to go. >>> import pyrogram >>> pyrogram.__version__ - '0.7.5' + '0.8.0' .. _TgCrypto: https://docs.pyrogram.ml/resources/TgCrypto .. _develop: http://github.com/pyrogram/pyrogram \ No newline at end of file From 8adcb34108c45d60f41c1299930278f5ee19d73e Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 11:58:48 +0200 Subject: [PATCH 219/530] Update docs logo and badges --- docs/source/index.rst | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index ec6b24f2..0f8a6bf0 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -5,8 +5,7 @@ Welcome to Pyrogram @@ -26,11 +25,11 @@ Welcome to Pyrogram

- Scheme Layer - TgCrypto

From 666c41a79df3afdf2cf4540c389c532a8d23f25d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 12:13:54 +0200 Subject: [PATCH 220/530] Add missing methods to docs --- docs/source/pyrogram/Client.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/source/pyrogram/Client.rst b/docs/source/pyrogram/Client.rst index 45d40368..1cd1a072 100644 --- a/docs/source/pyrogram/Client.rst +++ b/docs/source/pyrogram/Client.rst @@ -57,10 +57,10 @@ Messages edit_message_text edit_message_caption edit_message_reply_markup + edit_message_media delete_messages get_messages get_history - get_dialogs Chats ----- @@ -84,6 +84,8 @@ Chats get_chat get_chat_member get_chat_members + get_chat_members_count + get_dialogs Users ----- From 9538ed85fecbf8fa106315fdb2ca6906aae1f55e Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 13:20:36 +0200 Subject: [PATCH 221/530] Fix missing backtick --- pyrogram/client/methods/chats/get_chat_members_count.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/methods/chats/get_chat_members_count.py b/pyrogram/client/methods/chats/get_chat_members_count.py index efe53c19..41650bdd 100644 --- a/pyrogram/client/methods/chats/get_chat_members_count.py +++ b/pyrogram/client/methods/chats/get_chat_members_count.py @@ -32,7 +32,7 @@ class GetChatMembersCount(BaseClient): On success, an integer is returned. Raises: - :class:`Error + :class:`Error ` ``ValueError``: If a chat_id belongs to user. """ peer = self.resolve_peer(chat_id) From dcd087ba63b54095a5769833a6c75e295c7bb144 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 14:31:51 +0200 Subject: [PATCH 222/530] Revert "Revert "Update tgcrypto function names"" This reverts commit 0f0e757 --- pyrogram/crypto/aes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyrogram/crypto/aes.py b/pyrogram/crypto/aes.py index e4fb94b1..065a5b4d 100644 --- a/pyrogram/crypto/aes.py +++ b/pyrogram/crypto/aes.py @@ -30,19 +30,19 @@ try: # TODO: Use new tgcrypto function names @classmethod def ige256_encrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes: - return tgcrypto.ige_encrypt(data, key, iv) + return tgcrypto.ige256_encrypt(data, key, iv) @classmethod def ige256_decrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes: - return tgcrypto.ige_decrypt(data, key, iv) + return tgcrypto.ige256_decrypt(data, key, iv) @staticmethod def ctr256_encrypt(data: bytes, key: bytes, iv: bytearray, state: bytearray = None) -> bytes: - return tgcrypto.ctr_encrypt(data, key, iv, state or bytearray(1)) + return tgcrypto.ctr256_encrypt(data, key, iv, state or bytearray(1)) @staticmethod def ctr256_decrypt(data: bytes, key: bytes, iv: bytearray, state: bytearray = None) -> bytes: - return tgcrypto.ctr_decrypt(data, key, iv, state or bytearray(1)) + return tgcrypto.ctr256_decrypt(data, key, iv, state or bytearray(1)) @staticmethod def xor(a: bytes, b: bytes) -> bytes: From 6ce71b404fa8109285ce8cd3ea98aeddfb3c49a7 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 14:31:55 +0200 Subject: [PATCH 223/530] Revert "Revert "Remove TODO"" This reverts commit d2d4f55 --- pyrogram/crypto/aes.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyrogram/crypto/aes.py b/pyrogram/crypto/aes.py index 065a5b4d..f16688c4 100644 --- a/pyrogram/crypto/aes.py +++ b/pyrogram/crypto/aes.py @@ -27,7 +27,6 @@ try: class AES: - # TODO: Use new tgcrypto function names @classmethod def ige256_encrypt(cls, data: bytes, key: bytes, iv: bytes) -> bytes: return tgcrypto.ige256_encrypt(data, key, iv) From 0f6e5ef29810dd4b89151a1c6e8c1b5b13f2bffe Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 14:35:45 +0200 Subject: [PATCH 224/530] Use a stricter tgcrypto version requirement --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index b8d5c274..ee0fed9b 100644 --- a/setup.py +++ b/setup.py @@ -172,7 +172,7 @@ setup( packages=find_packages(exclude=["compiler*"]), zip_safe=False, install_requires=read("requirements.txt"), - extras_require={"tgcrypto": ["tgcrypto>=1.0.4"]}, + extras_require={"tgcrypto": ["tgcrypto==1.1.0"]}, cmdclass={ "clean": Clean, "generate": Generate From 9ef8c786e47438cdf3628fb545e3647840b4f3b6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 16:23:33 +0200 Subject: [PATCH 225/530] Update tgcrypto required version --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index ee0fed9b..10789e98 100644 --- a/setup.py +++ b/setup.py @@ -172,7 +172,7 @@ setup( packages=find_packages(exclude=["compiler*"]), zip_safe=False, install_requires=read("requirements.txt"), - extras_require={"tgcrypto": ["tgcrypto==1.1.0"]}, + extras_require={"tgcrypto": ["tgcrypto==1.1.1"]}, cmdclass={ "clean": Clean, "generate": Generate From 08f6d0b865480146724f9e8aa3dbe3071b78e0bf Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 16:24:30 +0200 Subject: [PATCH 226/530] Fix tgcrypto version in docs index page --- docs/source/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 0f8a6bf0..6e740dd0 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -29,7 +29,7 @@ Welcome to Pyrogram alt="Scheme Layer"> - TgCrypto

From 3a858e6a57c36df41e2b843358c51b7919fa1a67 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 17:30:23 +0200 Subject: [PATCH 227/530] Fix config values not being available when not using config.ini file --- pyrogram/client/client.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 1f25c537..3d8911a7 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -916,6 +916,8 @@ class Client(Methods, BaseClient): option, fallback=getattr(Client, option.upper()) )) + else: + setattr(self, option, getattr(Client, option.upper())) if self._proxy: self._proxy["enabled"] = True From da92a79b3c1f50559a1e9e04a886d0203297e8b1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 17:47:14 +0200 Subject: [PATCH 228/530] Update README.rst --- README.rst | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/README.rst b/README.rst index 0b9efb76..db2957c3 100644 --- a/README.rst +++ b/README.rst @@ -26,7 +26,7 @@ Features - **Easy to use**: You can easily install Pyrogram using pip and start building your app right away. - **High-level**: The low-level details of MTProto are abstracted and automatically handled. - **Fast**: Crypto parts are boosted up by TgCrypto_, a high-performance library written in pure C. -- **Updated** to the latest Telegram API version, currently Layer 81 on top of MTProto 2.0. +- **Updated** to the latest Telegram API version, currently Layer 82 on top of MTProto 2.0. - **Documented**: The Pyrogram API is well documented and resembles the Telegram Bot API. - **Full API**, allowing to execute any advanced action an official client is able to do, and more. @@ -78,14 +78,13 @@ Copyright & License

-
Pyrogram Icon
-
Pyrogram Label
+
Pyrogram Logo

Telegram MTProto API Client Library for Python - +
Download @@ -100,25 +99,25 @@ Copyright & License

- Scheme Layer - TgCrypto

-.. |logo| image:: https://pyrogram.ml/images/logo.png +.. |logo| image:: https://raw.githubusercontent.com/pyrogram/logos/master/logos/pyrogram_logo2.png :target: https://pyrogram.ml :alt: Pyrogram .. |description| replace:: **Telegram MTProto API Client Library for Python** -.. |scheme| image:: "https://img.shields.io/badge/SCHEME-LAYER%2081-eda738.svg?longCache=true&style=for-the-badge&colorA=262b30" +.. |scheme| image:: "https://img.shields.io/badge/SCHEME-LAYER%2082-eda738.svg?longCache=true&style=for-the-badge&colorA=262b30" :target: compiler/api/source/main_api.tl :alt: Scheme Layer -.. |tgcrypto| image:: "https://img.shields.io/badge/TGCRYPTO-V1.0.4-eda738.svg?longCache=true&style=for-the-badge&colorA=262b30" +.. |tgcrypto| image:: "https://img.shields.io/badge/TGCRYPTO-V1.1.1-eda738.svg?longCache=true&style=for-the-badge&colorA=262b30" :target: https://github.com/pyrogram/tgcrypto :alt: TgCrypto From cc47897c6889712158dea83718ad4f2c0bded9c3 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 19 Sep 2018 17:47:28 +0200 Subject: [PATCH 229/530] Update to v0.8.0 --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 1de05f2c..a1107ee1 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -23,7 +23,7 @@ __copyright__ = "Copyright (C) 2017-2018 Dan Tès Date: Wed, 19 Sep 2018 18:52:02 +0200 Subject: [PATCH 230/530] Fix Telegram API missing on readthedocs --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 10789e98..78d01fa8 100644 --- a/setup.py +++ b/setup.py @@ -130,6 +130,7 @@ class Generate(Command): if len(argv) > 1 and argv[1] in ["bdist_wheel", "install"]: error_compiler.start() api_compiler.start() + docs_compiler.start() setup( name="Pyrogram", From 61a2ad812ef5b01f4022d868971a5d625711b880 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 20 Sep 2018 16:33:36 +0200 Subject: [PATCH 231/530] Add missing docstrings for edit_message_media --- .../methods/messages/edit_message_media.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index 7bf66d5e..74778865 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -36,6 +36,28 @@ class EditMessageMedia(BaseClient): message_id: int, media, reply_markup=None): + """Use this method to edit audio, document, photo, or video messages. + + If a message is a part of a message album, then it can be edited only to a photo or a video. Otherwise, + message type can be changed arbitrarily. When inline message is edited, new file can't be uploaded. + Use previously uploaded file via its file_id or specify a URL. On success, if the edited message was sent + by the bot, the edited Message is returned, otherwise True is returned. + + Args: + chat_id (``int`` | ``str``): + Unique identifier (int) or username (str) of the target chat. + For your personal cloud (Saved Messages) you can simply use "me" or "self". + For a contact that exists in your Telegram address book you can use his phone number (str). + + message_id (``int``): + Message identifier in the chat specified in chat_id. + + media (:obj:`InputMediaAnimation` | :obj:`InputMediaAudio` | :obj:`InputMediaDocument` | :obj:`InputMediaPhoto` | :obj:`InputMediaVideo`) + One of the InputMedia objects describing an animation, audio, document, photo or video. + + reply_markup (:obj:`InlineKeyboardMarkup`, *optional*): + An InlineKeyboardMarkup object. + """ style = self.html if media.parse_mode.lower() == "html" else self.markdown caption = media.caption From ab560dc292c64ca97c506aa9a2d0d67e0a546448 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 20 Sep 2018 16:35:43 +0200 Subject: [PATCH 232/530] Small documentation fix --- docs/source/start/Usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/start/Usage.rst b/docs/source/start/Usage.rst index 6c560f90..6eac5cd1 100644 --- a/docs/source/start/Usage.rst +++ b/docs/source/start/Usage.rst @@ -33,7 +33,7 @@ Examples (more on `GitHub ` and :mod:`types ` exposed by the ``pyrogram.api`` package and call any Telegram API method you wish using the :meth:`send() ` method provided by the Client class. From 6a89c7ea02001c28df37e00eb0c7fc97cc055082 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 22 Sep 2018 14:21:55 +0200 Subject: [PATCH 233/530] Add missing ipv6 docstrings --- pyrogram/client/client.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 3d8911a7..ade4fc50 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -90,6 +90,10 @@ class Client(Methods, BaseClient): Code of the language used on the client, in ISO 639-1 standard. Defaults to "en". This is an alternative way to set it if you don't want to use the *config.ini* file. + ipv6 (``bool``, *optional*): + Pass True to connect to Telegram using IPv6. + Defaults to False (IPv4). + proxy (``dict``, *optional*): Your SOCKS5 Proxy settings as dict, e.g.: *dict(hostname="11.22.33.44", port=1080, username="user", password="pass")*. From 28abcaac50a760aff1ac2922db784a5632122473 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 22 Sep 2018 14:31:28 +0200 Subject: [PATCH 234/530] Fix ipv6 with ipv4 proxies --- pyrogram/connection/transport/tcp/tcp.py | 29 ++++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/pyrogram/connection/transport/tcp/tcp.py b/pyrogram/connection/transport/tcp/tcp.py index 8560604f..ee29b960 100644 --- a/pyrogram/connection/transport/tcp/tcp.py +++ b/pyrogram/connection/transport/tcp/tcp.py @@ -34,24 +34,33 @@ log = logging.getLogger(__name__) class TCP(socks.socksocket): def __init__(self, ipv6: bool, proxy: dict): - super().__init__(family=socket.AF_INET6 if ipv6 else socket.AF_INET) + if proxy.get("enabled", False): + hostname = proxy.get("hostname", None) + port = proxy.get("port", None) - self.settimeout(10) - self.proxy_enabled = proxy.get("enabled", False) + try: + socket.inet_aton(hostname) + except socket.error: + super().__init__(socket.AF_INET6) + else: + super().__init__(socket.AF_INET) - if proxy and self.proxy_enabled: self.set_proxy( proxy_type=socks.SOCKS5, - addr=proxy.get("hostname", None), - port=proxy.get("port", None), + addr=hostname, + port=port, username=proxy.get("username", None), password=proxy.get("password", None) ) - log.info("Using proxy {}:{}".format( - proxy.get("hostname", None), - proxy.get("port", None) - )) + log.info("Using proxy {}:{}".format(hostname, port)) + else: + super().__init__( + socket.AF_INET6 if ipv6 + else socket.AF_INET + ) + + self.settimeout(10) def close(self): try: From 8ea556b65fbc2440f81408ee52179ce1586e68ac Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 22 Sep 2018 14:44:12 +0200 Subject: [PATCH 235/530] Fix handling proxies with domain names --- pyrogram/connection/transport/tcp/tcp.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pyrogram/connection/transport/tcp/tcp.py b/pyrogram/connection/transport/tcp/tcp.py index ee29b960..2ee08d09 100644 --- a/pyrogram/connection/transport/tcp/tcp.py +++ b/pyrogram/connection/transport/tcp/tcp.py @@ -18,6 +18,7 @@ import logging import socket +import ipaddress try: import socks @@ -39,11 +40,14 @@ class TCP(socks.socksocket): port = proxy.get("port", None) try: - socket.inet_aton(hostname) - except socket.error: - super().__init__(socket.AF_INET6) - else: + ip_address = ipaddress.ip_address(hostname) + except ValueError: super().__init__(socket.AF_INET) + else: + if isinstance(ip_address, ipaddress.IPv6Address): + super().__init__(socket.AF_INET6) + else: + super().__init__(socket.AF_INET) self.set_proxy( proxy_type=socks.SOCKS5, From 9023d999b8a92bf50829d8f1cf82e4ce37348af8 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 29 Sep 2018 11:38:58 +0200 Subject: [PATCH 236/530] Fix unsorted Telegram API entries --- compiler/docs/compiler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/docs/compiler.py b/compiler/docs/compiler.py index 73b5a578..57f4827f 100644 --- a/compiler/docs/compiler.py +++ b/compiler/docs/compiler.py @@ -88,7 +88,7 @@ def generate(source_path, base): inner_path = base + "/" + k + "/index" + ".rst" module = "pyrogram.api.{}.{}".format(base, k) else: - for i in list(all_entities)[::-1]: + for i in sorted(list(all_entities), reverse=True): if i != base: entities.insert(0, "{0}/index".format(i)) From 3cbffd93f25d533f879cd702836654ca083dd7a3 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 1 Oct 2018 09:25:20 +0200 Subject: [PATCH 237/530] Revert "Log unknown constructors" This reverts commit 0b6b598 This fixes #128 --- pyrogram/api/core/object.py | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/pyrogram/api/core/object.py b/pyrogram/api/core/object.py index 3cf12329..a1e20726 100644 --- a/pyrogram/api/core/object.py +++ b/pyrogram/api/core/object.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . -import logging from collections import OrderedDict from datetime import datetime from io import BytesIO @@ -24,23 +23,13 @@ from json import JSONEncoder, dumps from ..all import objects -log = logging.getLogger(__name__) - class Object: all = {} @staticmethod def read(b: BytesIO, *args): - constructor_id = int.from_bytes(b.read(4), "little") - - try: - return Object.all[constructor_id].read(b, *args) - except KeyError: - log.error("Unknown constructor found: {}. Full data: {}".format( - hex(constructor_id), - b.getvalue().hex()) - ) + return Object.all[int.from_bytes(b.read(4), "little")].read(b, *args) def write(self, *args) -> bytes: pass From f608899c25c6f50e587e202f4bdd63de41a46e4e Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 1 Oct 2018 09:38:25 +0200 Subject: [PATCH 238/530] Add CHANNEL_PRIVATE error #129 --- compiler/error/source/400_BAD_REQUEST.tsv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/error/source/400_BAD_REQUEST.tsv b/compiler/error/source/400_BAD_REQUEST.tsv index ed332838..3ef57b83 100644 --- a/compiler/error/source/400_BAD_REQUEST.tsv +++ b/compiler/error/source/400_BAD_REQUEST.tsv @@ -66,4 +66,5 @@ MEDIA_CAPTION_TOO_LONG The media caption is longer than 200 characters USER_NOT_MUTUAL_CONTACT The user is not a mutual contact USER_CHANNELS_TOO_MUCH The user is already in too many channels or supergroups API_ID_PUBLISHED_FLOOD You are using an API key that is limited on the server side -USER_NOT_PARTICIPANT The user is not a member of this chat \ No newline at end of file +USER_NOT_PARTICIPANT The user is not a member of this chat +CHANNEL_PRIVATE The channel/supergroup is not accessible \ No newline at end of file From 12c61fb4312d64017d95b75bbd3d30458b9cbb65 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 1 Oct 2018 09:40:34 +0200 Subject: [PATCH 239/530] Fix unwanted CHANNEL_PRIVATE errors. Fixes #129 --- pyrogram/client/client.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index ade4fc50..8e37cfae 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -43,7 +43,7 @@ from pyrogram.api.errors import ( PhoneNumberUnoccupied, PhoneCodeInvalid, PhoneCodeHashEmpty, PhoneCodeExpired, PhoneCodeEmpty, SessionPasswordNeeded, PasswordHashInvalid, FloodWait, PeerIdInvalid, FirstnameInvalid, PhoneNumberBanned, - VolumeLocNotFound, UserMigrate, FileIdInvalid) + VolumeLocNotFound, UserMigrate, FileIdInvalid, ChannelPrivate) from pyrogram.client.handlers import DisconnectHandler from pyrogram.crypto import AES from pyrogram.session import Auth, Session @@ -803,19 +803,22 @@ class Client(Methods, BaseClient): message = update.message if not isinstance(message, types.MessageEmpty): - diff = self.send( - functions.updates.GetChannelDifference( - channel=self.resolve_peer(int("-100" + str(channel_id))), - filter=types.ChannelMessagesFilter( - ranges=[types.MessageRange( - min_id=update.message.id, - max_id=update.message.id - )] - ), - pts=pts - pts_count, - limit=pts + try: + diff = self.send( + functions.updates.GetChannelDifference( + channel=self.resolve_peer(int("-100" + str(channel_id))), + filter=types.ChannelMessagesFilter( + ranges=[types.MessageRange( + min_id=update.message.id, + max_id=update.message.id + )] + ), + pts=pts - pts_count, + limit=pts + ) ) - ) + except ChannelPrivate: + continue if not isinstance(diff, types.updates.ChannelDifferenceEmpty): updates.users += diff.users From b79bd1ea8346e09225322c60db3ffe5fd25d94b0 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 1 Oct 2018 09:45:32 +0200 Subject: [PATCH 240/530] Don't swallow left_chat_member updates Even though they are only relevant for supergroups with <50 members --- pyrogram/client/client.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 8e37cfae..ee40d2bc 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -818,11 +818,11 @@ class Client(Methods, BaseClient): ) ) except ChannelPrivate: - continue - - if not isinstance(diff, types.updates.ChannelDifferenceEmpty): - updates.users += diff.users - updates.chats += diff.chats + pass + else: + if not isinstance(diff, types.updates.ChannelDifferenceEmpty): + updates.users += diff.users + updates.chats += diff.chats if channel_id and pts: if channel_id not in self.channels_pts: From 0162cf48c10084ffc9e5f0c891fe1418493665c0 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 1 Oct 2018 09:55:09 +0200 Subject: [PATCH 241/530] Don't break groups in case one handler raises an unhandled exception The error is logged instead. Fixes #126 --- pyrogram/client/dispatcher/dispatcher.py | 69 ++++++++++++------------ 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/pyrogram/client/dispatcher/dispatcher.py b/pyrogram/client/dispatcher/dispatcher.py index ffff16bd..ea10a201 100644 --- a/pyrogram/client/dispatcher/dispatcher.py +++ b/pyrogram/client/dispatcher/dispatcher.py @@ -90,43 +90,46 @@ class Dispatcher: def dispatch(self, update, users: dict = None, chats: dict = None, is_raw: bool = False): for group in self.groups.values(): - for handler in group: - if is_raw: - if not isinstance(handler, RawUpdateHandler): - continue - - args = (self.client, update, users, chats) - else: - message = (update.message - or update.channel_post - or update.edited_message - or update.edited_channel_post) - - deleted_messages = (update.deleted_channel_posts - or update.deleted_messages) - - callback_query = update.callback_query - - if message and isinstance(handler, MessageHandler): - if not handler.check(message): + try: + for handler in group: + if is_raw: + if not isinstance(handler, RawUpdateHandler): continue - args = (self.client, message) - elif deleted_messages and isinstance(handler, DeletedMessagesHandler): - if not handler.check(deleted_messages): - continue - - args = (self.client, deleted_messages) - elif callback_query and isinstance(handler, CallbackQueryHandler): - if not handler.check(callback_query): - continue - - args = (self.client, callback_query) + args = (self.client, update, users, chats) else: - continue + message = (update.message + or update.channel_post + or update.edited_message + or update.edited_channel_post) - handler.callback(*args) - break + deleted_messages = (update.deleted_channel_posts + or update.deleted_messages) + + callback_query = update.callback_query + + if message and isinstance(handler, MessageHandler): + if not handler.check(message): + continue + + args = (self.client, message) + elif deleted_messages and isinstance(handler, DeletedMessagesHandler): + if not handler.check(deleted_messages): + continue + + args = (self.client, deleted_messages) + elif callback_query and isinstance(handler, CallbackQueryHandler): + if not handler.check(callback_query): + continue + + args = (self.client, callback_query) + else: + continue + + handler.callback(*args) + break + except Exception as e: + log.error(e, exc_info=True) def update_worker(self): name = threading.current_thread().name From 1bf8b01151e63c194a3b5836676ddfc58033b9c6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 1 Oct 2018 10:47:10 +0200 Subject: [PATCH 242/530] Add RIGHT_FORBIDDEN error --- compiler/error/source/403_FORBIDDEN.tsv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/error/source/403_FORBIDDEN.tsv b/compiler/error/source/403_FORBIDDEN.tsv index 7bacbe7d..b8348d2e 100644 --- a/compiler/error/source/403_FORBIDDEN.tsv +++ b/compiler/error/source/403_FORBIDDEN.tsv @@ -1,2 +1,3 @@ id message -CHAT_WRITE_FORBIDDEN You don't have rights to send messages in this chat \ No newline at end of file +CHAT_WRITE_FORBIDDEN You don't have rights to send messages in this chat +RIGHT_FORBIDDEN One or more admin rights can't be applied to this kind of chat (channel/supergroup) \ No newline at end of file From 0a2892691c81d14f91618d2ec6a8b4e024984390 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 1 Oct 2018 10:48:49 +0200 Subject: [PATCH 243/530] Add CHAT_ADMIN_INVITE_REQUIRED error --- compiler/error/source/403_FORBIDDEN.tsv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/error/source/403_FORBIDDEN.tsv b/compiler/error/source/403_FORBIDDEN.tsv index b8348d2e..a2d06832 100644 --- a/compiler/error/source/403_FORBIDDEN.tsv +++ b/compiler/error/source/403_FORBIDDEN.tsv @@ -1,3 +1,4 @@ id message CHAT_WRITE_FORBIDDEN You don't have rights to send messages in this chat -RIGHT_FORBIDDEN One or more admin rights can't be applied to this kind of chat (channel/supergroup) \ No newline at end of file +RIGHT_FORBIDDEN One or more admin rights can't be applied to this kind of chat (channel/supergroup) +CHAT_ADMIN_INVITE_REQUIRED You don't have rights to invite other users \ No newline at end of file From 89a167b51fcd1d7825dedf160cf75217e59efff5 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 1 Oct 2018 10:52:09 +0200 Subject: [PATCH 244/530] Update default rights to the least common between supergroups & channels Fixes #120 --- pyrogram/client/methods/chats/promote_chat_member.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/methods/chats/promote_chat_member.py b/pyrogram/client/methods/chats/promote_chat_member.py index 134d1ba3..adff4605 100644 --- a/pyrogram/client/methods/chats/promote_chat_member.py +++ b/pyrogram/client/methods/chats/promote_chat_member.py @@ -25,12 +25,12 @@ class PromoteChatMember(BaseClient): chat_id: int or str, user_id: int or str, can_change_info: bool = True, - can_post_messages: bool = True, - can_edit_messages: bool = True, + can_post_messages: bool = False, + can_edit_messages: bool = False, can_delete_messages: bool = True, can_invite_users: bool = True, can_restrict_members: bool = True, - can_pin_messages: bool = True, + can_pin_messages: bool = False, can_promote_members: bool = False): """Use this method to promote or demote a user in a supergroup or a channel. You must be an administrator in the chat for this to work and must have the appropriate admin rights. From 3fa738db9fc676ee5c8883b2bda01a5ef102d8e0 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 2 Oct 2018 12:07:54 +0200 Subject: [PATCH 245/530] Update dev version --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index a1107ee1..6fb6fff4 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -23,7 +23,7 @@ __copyright__ = "Copyright (C) 2017-2018 Dan Tès Date: Tue, 9 Oct 2018 13:50:34 +0200 Subject: [PATCH 246/530] Update echo_bot.py --- examples/echo_bot.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/echo_bot.py b/examples/echo_bot.py index adda52c7..70e26f9d 100644 --- a/examples/echo_bot.py +++ b/examples/echo_bot.py @@ -20,9 +20,8 @@ from pyrogram import Client, Filters """This simple echo bot replies to every private text message. -It uses the @on_message decorator to register a MessageHandler -and applies two filters on it, Filters.text and Filters.private to make -sure it will only reply to private text messages. +It uses the @on_message decorator to register a MessageHandler and applies two filters on it: +Filters.text and Filters.private to make sure it will reply to private text messages only. """ app = Client("my_account") @@ -30,10 +29,7 @@ app = Client("my_account") @app.on_message(Filters.text & Filters.private) def echo(client, message): - client.send_message( - message.chat.id, message.text, - reply_to_message_id=message.message_id - ) + message.reply(message.text, quote=True) app.run() # Automatically start() and idle() From 7b76751e8f1037ee7c71de182ba751673cfd90fc Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 13:51:29 +0200 Subject: [PATCH 247/530] Update get_history.py --- examples/get_history.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/examples/get_history.py b/examples/get_history.py index 433d127c..0466fc96 100644 --- a/examples/get_history.py +++ b/examples/get_history.py @@ -33,8 +33,7 @@ app.start() while True: try: m = app.get_history(target, offset_id=offset_id) - except FloodWait as e: - # For very large chats the method call can raise a FloodWait + except FloodWait as e: # For very large chats the method call can raise a FloodWait print("waiting {}".format(e.x)) time.sleep(e.x) # Sleep X seconds before continuing continue From 1be144288cf8bf498015ebe6e087bb2ab32f29f2 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 14:07:01 +0200 Subject: [PATCH 248/530] Add a proxy to the Client instance inside CallbackQuery objects --- pyrogram/client/dispatcher/dispatcher.py | 2 +- pyrogram/client/ext/utils.py | 8 +++++--- pyrogram/client/types/bots/callback_query.py | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/pyrogram/client/dispatcher/dispatcher.py b/pyrogram/client/dispatcher/dispatcher.py index ea10a201..5506cbdd 100644 --- a/pyrogram/client/dispatcher/dispatcher.py +++ b/pyrogram/client/dispatcher/dispatcher.py @@ -205,7 +205,7 @@ class Dispatcher: self.dispatch( pyrogram.Update( callback_query=utils.parse_inline_callback_query( - update, users + self.client, update, users ) ) ) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index b98a05a8..a497e3c9 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -865,11 +865,12 @@ def parse_callback_query(client, callback_query, users): message=client.get_messages(peer_id, callback_query.msg_id), chat_instance=str(callback_query.chat_instance), data=callback_query.data.decode(), - game_short_name=callback_query.game_short_name + game_short_name=callback_query.game_short_name, + client=client ) -def parse_inline_callback_query(callback_query, users): +def parse_inline_callback_query(client, callback_query, users): return pyrogram_types.CallbackQuery( id=str(callback_query.query_id), from_user=parse_user(users[callback_query.user_id]), @@ -883,7 +884,8 @@ def parse_inline_callback_query(callback_query, users): ), b"-_" ).decode().rstrip("="), - game_short_name=callback_query.game_short_name + game_short_name=callback_query.game_short_name, + client=client ) diff --git a/pyrogram/client/types/bots/callback_query.py b/pyrogram/client/types/bots/callback_query.py index 63228f33..76f463ad 100644 --- a/pyrogram/client/types/bots/callback_query.py +++ b/pyrogram/client/types/bots/callback_query.py @@ -57,11 +57,13 @@ class CallbackQuery(Object): id: str, from_user, chat_instance: str, + client=None, message=None, inline_message_id: str = None, data: str = None, game_short_name: str = None ): + self._client = client self.id = id # string self.from_user = from_user # User self.message = message # flags.0?Message From acd525294fb3f95403c807e3f35500902083b165 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 14:08:01 +0200 Subject: [PATCH 249/530] Add CallbackQuery.answer bound method --- pyrogram/client/types/bots/callback_query.py | 42 ++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/pyrogram/client/types/bots/callback_query.py b/pyrogram/client/types/bots/callback_query.py index 76f463ad..083ab58a 100644 --- a/pyrogram/client/types/bots/callback_query.py +++ b/pyrogram/client/types/bots/callback_query.py @@ -71,3 +71,45 @@ class CallbackQuery(Object): self.chat_instance = chat_instance # string self.data = data # flags.2?string self.game_short_name = game_short_name # flags.3?string + + def answer(self, text: str = None, show_alert: bool = None, url: str = None, cache_time: int = 0): + """Use this method as a shortcut for: + + .. code-block:: python + + client.answer_callback_query( + callback_query.id, + text="Hello", + show_alert=True + ) + + Example: + .. code-block:: python + + callback_query.answer("Hello", show_alert=True) + + Args: + text (``str``): + Text of the notification. If not specified, nothing will be shown to the user, 0-200 characters. + + show_alert (``bool``): + If true, an alert will be shown by the client instead of a notification at the top of the chat screen. + Defaults to False. + + url (``str``): + URL that will be opened by the user's client. + If you have created a Game and accepted the conditions via @Botfather, specify the URL that opens your + game – note that this will only work if the query comes from a callback_game button. + Otherwise, you may use links like t.me/your_bot?start=XXXX that open your bot with a parameter. + + cache_time (``int``): + The maximum amount of time in seconds that the result of the callback query may be cached client-side. + Telegram apps will support caching starting in version 3.14. Defaults to 0. + """ + return self._client.answer_callback_query( + callback_query_id=self.id, + text=text, + show_alert=show_alert, + url=url, + cache_time=cache_time + ) From b28f2ebbcb576efc248b6a68ea229dd5e0e3be27 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 14:08:14 +0200 Subject: [PATCH 250/530] Update callback_query_handler.py --- examples/callback_query_handler.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/examples/callback_query_handler.py b/examples/callback_query_handler.py index 999c2686..38893c02 100644 --- a/examples/callback_query_handler.py +++ b/examples/callback_query_handler.py @@ -27,11 +27,7 @@ app = Client("123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11") @app.on_callback_query() def answer(client, callback_query): - client.answer_callback_query( - callback_query.id, - text='Button contains: "{}"'.format(callback_query.data), - show_alert=True - ) + callback_query.answer('Button contains: "{}"'.format(callback_query.data), show_alert=True) app.run() # Automatically start() and idle() From aad72ed9b2fb29994ed62676a81bcb259486dc32 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 14:34:54 +0200 Subject: [PATCH 251/530] Add get_chat_members.py --- examples/get_chat_members.py | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 examples/get_chat_members.py diff --git a/examples/get_chat_members.py b/examples/get_chat_members.py new file mode 100644 index 00000000..a9876ce4 --- /dev/null +++ b/examples/get_chat_members.py @@ -0,0 +1,45 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +import time + +from pyrogram import Client +from pyrogram.api.errors import FloodWait + +app = Client("my_account") + +target = "pyrogramchat" # Target channel/supergroup +members = [] # List that will contain all the members of the target chat +offset = 0 # Offset starts at 0 +limit = 200 # Amount of users to retrieve for each API call (max 200) + +with app: + while True: + try: + chunk = app.get_chat_members(target, offset) + except FloodWait as e: # Very large chats could trigger FloodWait + time.sleep(e.x) # When it happens, wait X seconds and try again + continue + + if not chunk.chat_members: + break # No more members left + + members.extend(chunk.chat_members) + offset += len(chunk.chat_members) + +# Now the "members" list contains all the members of the target chat From 184fb563aaa42083035f078d0a6d547fee659ab6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 14:45:51 +0200 Subject: [PATCH 252/530] Add short description --- examples/get_chat_members.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/get_chat_members.py b/examples/get_chat_members.py index a9876ce4..3b8837cd 100644 --- a/examples/get_chat_members.py +++ b/examples/get_chat_members.py @@ -21,6 +21,10 @@ import time from pyrogram import Client from pyrogram.api.errors import FloodWait +"""This example shows you how to get the first 10.000 members of a chat. +Refer to get_chat_members2.py for more than 10.000 members. +""" + app = Client("my_account") target = "pyrogramchat" # Target channel/supergroup From 95821f088bbe55aa83d04b61f24a90236f391961 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 14:47:47 +0200 Subject: [PATCH 253/530] Add get_chat_members2.py --- examples/get_chat_members2.py | 68 +++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 examples/get_chat_members2.py diff --git a/examples/get_chat_members2.py b/examples/get_chat_members2.py new file mode 100644 index 00000000..563de5ce --- /dev/null +++ b/examples/get_chat_members2.py @@ -0,0 +1,68 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +import time +from string import ascii_lowercase + +from pyrogram import Client +from pyrogram.api.errors import FloodWait + +"""This is an improved version of get_chat_members.py + +Since Telegram will return at most 10.000 members for a single query, this script +repeats the search using numbers ("0" to "9") and all the available ascii letters ("a" to "z"). + +This can be further improved by also searching for non-ascii characters (e.g.: Japanese script), +as some user names may not contain ascii letters at all. +""" + +app = Client("my_account") + +target = "pyrogramchat" # Target channel/supergroup +members = {} # List that will contain all the members of the target chat +limit = 200 # Amount of users to retrieve for each API call (max 200) + +# "" + "0123456789" + "abcdefghijklmnopqrstuvwxyz" (as list) +queries = [""] + [str(i) for i in range(10)] + list(ascii_lowercase) + +with app: + for q in queries: + print('Searching for "{}"'.format(q)) + offset = 0 # For each query, offset restarts from 0 + + while True: + try: + chunk = app.get_chat_members(target, offset, query=q) + except FloodWait as e: # Very large chats could trigger FloodWait + print("Flood wait: {} seconds".format(e.x)) + time.sleep(e.x) # When it happens, wait X seconds and try again + continue + + if not chunk.chat_members: + print('Done searching for "{}"'.format(q)) + print() + break # No more members left + + members.update({i.user.id: i for i in chunk.chat_members}) + offset += len(chunk.chat_members) + + print("Total members: {}".format(len(members))) + + print("Grand total: {}".format(len(members))) + +# Now the "members" list contains all the members of the target chat From 5e8be0e6efe94c7faae01e08b821f875d6394fae Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 14:48:43 +0200 Subject: [PATCH 254/530] Make use of the "with" context manager --- examples/get_history.py | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/examples/get_history.py b/examples/get_history.py index 0466fc96..7289e0f2 100644 --- a/examples/get_history.py +++ b/examples/get_history.py @@ -28,25 +28,22 @@ target = "me" # "me" refers to your own chat (Saved Messages) messages = [] # List that will contain all the messages of the target chat offset_id = 0 # ID of the last message of the chunk -app.start() +with app: + while True: + try: + m = app.get_history(target, offset_id=offset_id) + except FloodWait as e: # For very large chats the method call can raise a FloodWait + print("waiting {}".format(e.x)) + time.sleep(e.x) # Sleep X seconds before continuing + continue -while True: - try: - m = app.get_history(target, offset_id=offset_id) - except FloodWait as e: # For very large chats the method call can raise a FloodWait - print("waiting {}".format(e.x)) - time.sleep(e.x) # Sleep X seconds before continuing - continue + if not m.messages: + break - if not m.messages: - break + messages += m.messages + offset_id = m.messages[-1].message_id - messages += m.messages - offset_id = m.messages[-1].message_id - - print("Messages: {}".format(len(messages))) - -app.stop() + print("Messages: {}".format(len(messages))) # Now the "messages" list contains all the messages sorted by date in # descending order (from the most recent to the oldest one) From eb276cbbd5f3795c451f4eeaa61af7d7beabea51 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 14:49:12 +0200 Subject: [PATCH 255/530] Remove get_participants.py and get_participants2.py --- examples/get_participants.py | 63 ---------------------------- examples/get_participants2.py | 79 ----------------------------------- 2 files changed, 142 deletions(-) delete mode 100644 examples/get_participants.py delete mode 100644 examples/get_participants2.py diff --git a/examples/get_participants.py b/examples/get_participants.py deleted file mode 100644 index fd5257fb..00000000 --- a/examples/get_participants.py +++ /dev/null @@ -1,63 +0,0 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - -import time - -from pyrogram import Client -from pyrogram.api import functions, types -from pyrogram.api.errors import FloodWait - -"""This simple GetParticipants method usage shows you how to get the first 10.000 users of a chat. - -Refer to get_participants2.py for more than 10.000 users. -""" - -app = Client("my_account") -target = "pyrogramchat" # Target channel/supergroup -users = [] # List that will contain all the users of the target chat -limit = 200 # Amount of users to retrieve for each API call -offset = 0 # Offset starts at 0 - -app.start() - -while True: - try: - participants = app.send( - functions.channels.GetParticipants( - channel=app.resolve_peer(target), - filter=types.ChannelParticipantsSearch(""), # Filter by empty string (search for all) - offset=offset, - limit=limit, - hash=0 - ) - ) - except FloodWait as e: - # Very large channels will trigger FloodWait. - # When happens, wait X seconds before continuing - time.sleep(e.x) - continue - - if not participants.participants: - break # No more participants left - - users.extend(participants.users) - offset += limit - -app.stop() - -# Now the "users" list contains all the members of the target chat diff --git a/examples/get_participants2.py b/examples/get_participants2.py deleted file mode 100644 index a70afb74..00000000 --- a/examples/get_participants2.py +++ /dev/null @@ -1,79 +0,0 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - -import time -from string import ascii_lowercase - -from pyrogram import Client -from pyrogram.api import functions, types -from pyrogram.api.errors import FloodWait - -"""This is an improved version of get_participants.py - -Since Telegram will return at most 10.000 users for a single query, this script -repeats the search using numbers ("0" to "9") and all the available ascii letters ("a" to "z"). - -This can be further improved by also searching for non-ascii characters (e.g.: Japanese script), -as some user names may not contain ascii letters at all. -""" - -app = Client("my_account") -target = "pyrogramchat" # Target channel/supergroup username or id -users = {} # To ensure uniqueness, users will be stored in a dictionary with user_id as key -limit = 200 # Amount of users to retrieve for each API call (200 is the maximum) -# "" + "0123456789" + "abcdefghijklmnopqrstuvwxyz" (as list) -queries = [""] + [str(i) for i in range(10)] + list(ascii_lowercase) - -app.start() - -for q in queries: - print("Searching for '{}'".format(q)) - offset = 0 # For each query, offset restarts from 0 - - while True: - try: - participants = app.send( - functions.channels.GetParticipants( - channel=app.resolve_peer(target), - filter=types.ChannelParticipantsSearch(q), - offset=offset, - limit=limit, - hash=0 - ) - ) - except FloodWait as e: - # Very large chats could trigger FloodWait. - # When happens, wait X seconds before continuing - print("Flood wait: {} seconds".format(e.x)) - time.sleep(e.x) - continue - - if not participants.participants: - print("Done searching for '{}'".format(q)) - print() - break # No more participants left - - # User information are stored in the participants.users list. - # Add those users to the dictionary - users.update({i.id: i for i in participants.users}) - - offset += len(participants.participants) - - print("Total users: {}".format(len(users))) - -app.stop() From 65fb30ce1cd1920abb1bb733749abb844ba96a95 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 14:49:42 +0200 Subject: [PATCH 256/530] Update examples' README.md --- examples/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/README.md b/examples/README.md index 0d8759a0..5d10033a 100644 --- a/examples/README.md +++ b/examples/README.md @@ -11,8 +11,8 @@ Example | Description [**echo_bot**](echo_bot.py) | Echo bot that replies to every private text message [**welcome_bot**](welcome_bot.py) | The Welcome Bot source code in [@PyrogramChat](https://t.me/pyrogramchat) [**get_history**](get_history.py) | How to retrieve the full message history of a chat -[**get_participants**](get_participants.py) | How to get the first 10.000 members of a supergroup/channel -[**get_participants2**](get_participants2.py) | Improved version to get more than 10.000 users +[**get_chat_members**](get_chat_members.py) | How to get the first 10.000 members of a supergroup/channel +[**get_chat_members2**](get_chat_members2.py) | Improved version to get more than 10.000 members [**query_inline_bots**](query_inline_bots.py) | How to query an inline bot and send a result to a chat [**send_bot_keyboards**](send_bot_keyboards.py) | How to send normal and inline keyboards using regular bots [**callback_query_handler**](callback_query_handler.py) | How to handle queries coming from inline button presses From 133682ca48e887ec1d05103fa7e65c47cc61a7f6 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 15:07:12 +0200 Subject: [PATCH 257/530] Add CC0 1.0 Universal License --- examples/LICENSE | 121 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 examples/LICENSE diff --git a/examples/LICENSE b/examples/LICENSE new file mode 100644 index 00000000..1625c179 --- /dev/null +++ b/examples/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. \ No newline at end of file From 9409d9cd8f48ce9f3df928c78ba4c88432d39604 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 15:17:15 +0200 Subject: [PATCH 258/530] Hint about examples' license in README.md --- examples/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/README.md b/examples/README.md index 5d10033a..763db699 100644 --- a/examples/README.md +++ b/examples/README.md @@ -5,6 +5,9 @@ This folder contains example scripts to show you how **Pyrogram** looks like. Every script is working right away (provided you correctly set up your credentials), meaning you can simply copy-paste and run. The only things you have to change are session names and target chats. +All the examples listed in this directory are licensed under the terms of the [CC0 1.0 Universal](LICENSE) license and +can be freely used as basic building blocks for your own applications without worrying about copyrights. + Example | Description ---: | :--- [**hello_world**](hello_world.py) | Demonstration of basic API usages From fd306c383d7b792220d9622ba5831a11b8323e2e Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 15:21:36 +0200 Subject: [PATCH 259/530] Remove LGPLv3 license notices from example files Examples are licensed under the terms of CC0 1.0 Universal License --- examples/callback_query_handler.py | 18 ------------------ examples/echo_bot.py | 18 ------------------ examples/get_chat_members.py | 18 ------------------ examples/get_chat_members2.py | 18 ------------------ examples/get_history.py | 18 ------------------ examples/hello_world.py | 18 ------------------ examples/query_inline_bots.py | 18 ------------------ examples/raw_update_handler.py | 18 ------------------ examples/send_bot_keyboards.py | 18 ------------------ examples/welcome_bot.py | 18 ------------------ 10 files changed, 180 deletions(-) diff --git a/examples/callback_query_handler.py b/examples/callback_query_handler.py index 38893c02..a9672f0e 100644 --- a/examples/callback_query_handler.py +++ b/examples/callback_query_handler.py @@ -1,21 +1,3 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - from pyrogram import Client """This example shows how to handle callback queries, i.e.: queries coming from inline button presses. diff --git a/examples/echo_bot.py b/examples/echo_bot.py index 70e26f9d..a560ed51 100644 --- a/examples/echo_bot.py +++ b/examples/echo_bot.py @@ -1,21 +1,3 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - from pyrogram import Client, Filters """This simple echo bot replies to every private text message. diff --git a/examples/get_chat_members.py b/examples/get_chat_members.py index 3b8837cd..db325f78 100644 --- a/examples/get_chat_members.py +++ b/examples/get_chat_members.py @@ -1,21 +1,3 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - import time from pyrogram import Client diff --git a/examples/get_chat_members2.py b/examples/get_chat_members2.py index 563de5ce..5a92645b 100644 --- a/examples/get_chat_members2.py +++ b/examples/get_chat_members2.py @@ -1,21 +1,3 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - import time from string import ascii_lowercase diff --git a/examples/get_history.py b/examples/get_history.py index 7289e0f2..eb9b2dcd 100644 --- a/examples/get_history.py +++ b/examples/get_history.py @@ -1,21 +1,3 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - import time from pyrogram import Client diff --git a/examples/hello_world.py b/examples/hello_world.py index 8dba8417..c4ff23d0 100644 --- a/examples/hello_world.py +++ b/examples/hello_world.py @@ -1,21 +1,3 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - from pyrogram import Client """This example demonstrates a basic API usage""" diff --git a/examples/query_inline_bots.py b/examples/query_inline_bots.py index 0d5f7560..0d75b9ff 100644 --- a/examples/query_inline_bots.py +++ b/examples/query_inline_bots.py @@ -1,21 +1,3 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - from pyrogram import Client """This example shows how to query an inline bot""" diff --git a/examples/raw_update_handler.py b/examples/raw_update_handler.py index c7195761..0f678cec 100644 --- a/examples/raw_update_handler.py +++ b/examples/raw_update_handler.py @@ -1,21 +1,3 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - from pyrogram import Client """This example shows how to handle raw updates""" diff --git a/examples/send_bot_keyboards.py b/examples/send_bot_keyboards.py index 517b0696..21c1a60e 100644 --- a/examples/send_bot_keyboards.py +++ b/examples/send_bot_keyboards.py @@ -1,21 +1,3 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - from pyrogram import Client, ReplyKeyboardMarkup, InlineKeyboardMarkup, InlineKeyboardButton """This example will show you how to send normal and inline keyboards. diff --git a/examples/welcome_bot.py b/examples/welcome_bot.py index 5fd93293..71a00c1c 100644 --- a/examples/welcome_bot.py +++ b/examples/welcome_bot.py @@ -1,21 +1,3 @@ -# Pyrogram - Telegram MTProto API Client Library for Python -# Copyright (C) 2017-2018 Dan Tès -# -# This file is part of Pyrogram. -# -# Pyrogram is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as published -# by the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Pyrogram is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with Pyrogram. If not, see . - from pyrogram import Client, Emoji, Filters """This is the Welcome Bot in @PyrogramChat. From be7194f89e9219368dd2447706ad61322aef13b3 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 15:23:40 +0200 Subject: [PATCH 260/530] Put example descriptions at the very top of the files --- examples/callback_query_handler.py | 7 ++++--- examples/echo_bot.py | 4 ++-- examples/get_chat_members.py | 8 ++++---- examples/get_chat_members2.py | 12 ++++++------ examples/get_history.py | 4 ++-- examples/hello_world.py | 4 ++-- examples/query_inline_bots.py | 4 ++-- examples/raw_update_handler.py | 4 ++-- examples/send_bot_keyboards.py | 4 ++-- examples/welcome_bot.py | 6 +++--- 10 files changed, 29 insertions(+), 28 deletions(-) diff --git a/examples/callback_query_handler.py b/examples/callback_query_handler.py index a9672f0e..71538eae 100644 --- a/examples/callback_query_handler.py +++ b/examples/callback_query_handler.py @@ -1,8 +1,9 @@ -from pyrogram import Client - """This example shows how to handle callback queries, i.e.: queries coming from inline button presses. -It uses the @on_callback_query decorator to register a CallbackQueryHandler.""" +It uses the @on_callback_query decorator to register a CallbackQueryHandler. +""" + +from pyrogram import Client app = Client("123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11") diff --git a/examples/echo_bot.py b/examples/echo_bot.py index a560ed51..7a2b0aa7 100644 --- a/examples/echo_bot.py +++ b/examples/echo_bot.py @@ -1,11 +1,11 @@ -from pyrogram import Client, Filters - """This simple echo bot replies to every private text message. It uses the @on_message decorator to register a MessageHandler and applies two filters on it: Filters.text and Filters.private to make sure it will reply to private text messages only. """ +from pyrogram import Client, Filters + app = Client("my_account") diff --git a/examples/get_chat_members.py b/examples/get_chat_members.py index db325f78..e0f8c3fa 100644 --- a/examples/get_chat_members.py +++ b/examples/get_chat_members.py @@ -1,12 +1,12 @@ +"""This example shows you how to get the first 10.000 members of a chat. +Refer to get_chat_members2.py for more than 10.000 members. +""" + import time from pyrogram import Client from pyrogram.api.errors import FloodWait -"""This example shows you how to get the first 10.000 members of a chat. -Refer to get_chat_members2.py for more than 10.000 members. -""" - app = Client("my_account") target = "pyrogramchat" # Target channel/supergroup diff --git a/examples/get_chat_members2.py b/examples/get_chat_members2.py index 5a92645b..a4fa9daa 100644 --- a/examples/get_chat_members2.py +++ b/examples/get_chat_members2.py @@ -1,9 +1,3 @@ -import time -from string import ascii_lowercase - -from pyrogram import Client -from pyrogram.api.errors import FloodWait - """This is an improved version of get_chat_members.py Since Telegram will return at most 10.000 members for a single query, this script @@ -13,6 +7,12 @@ This can be further improved by also searching for non-ascii characters (e.g.: J as some user names may not contain ascii letters at all. """ +import time +from string import ascii_lowercase + +from pyrogram import Client +from pyrogram.api.errors import FloodWait + app = Client("my_account") target = "pyrogramchat" # Target channel/supergroup diff --git a/examples/get_history.py b/examples/get_history.py index eb9b2dcd..628b5692 100644 --- a/examples/get_history.py +++ b/examples/get_history.py @@ -1,10 +1,10 @@ +"""This example shows how to retrieve the full message history of a chat""" + import time from pyrogram import Client from pyrogram.api.errors import FloodWait -"""This example shows how to retrieve the full message history of a chat""" - app = Client("my_account") target = "me" # "me" refers to your own chat (Saved Messages) messages = [] # List that will contain all the messages of the target chat diff --git a/examples/hello_world.py b/examples/hello_world.py index c4ff23d0..010725ef 100644 --- a/examples/hello_world.py +++ b/examples/hello_world.py @@ -1,7 +1,7 @@ -from pyrogram import Client - """This example demonstrates a basic API usage""" +from pyrogram import Client + # Create a new Client instance app = Client("my_account") diff --git a/examples/query_inline_bots.py b/examples/query_inline_bots.py index 0d75b9ff..c3b48874 100644 --- a/examples/query_inline_bots.py +++ b/examples/query_inline_bots.py @@ -1,7 +1,7 @@ -from pyrogram import Client - """This example shows how to query an inline bot""" +from pyrogram import Client + # Create a new Client app = Client("my_account") diff --git a/examples/raw_update_handler.py b/examples/raw_update_handler.py index 0f678cec..27d87eb3 100644 --- a/examples/raw_update_handler.py +++ b/examples/raw_update_handler.py @@ -1,7 +1,7 @@ -from pyrogram import Client - """This example shows how to handle raw updates""" +from pyrogram import Client + app = Client("my_account") diff --git a/examples/send_bot_keyboards.py b/examples/send_bot_keyboards.py index 21c1a60e..3a15a23a 100644 --- a/examples/send_bot_keyboards.py +++ b/examples/send_bot_keyboards.py @@ -1,5 +1,3 @@ -from pyrogram import Client, ReplyKeyboardMarkup, InlineKeyboardMarkup, InlineKeyboardButton - """This example will show you how to send normal and inline keyboards. You must log-in as a regular bot in order to send keyboards (use the token from @BotFather). @@ -9,6 +7,8 @@ send_message() is used as example, but a keyboard can be sent with any other sen like send_audio(), send_document(), send_location(), etc... """ +from pyrogram import Client, ReplyKeyboardMarkup, InlineKeyboardMarkup, InlineKeyboardButton + # Create a client using your bot token app = Client("123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11") app.start() diff --git a/examples/welcome_bot.py b/examples/welcome_bot.py index 71a00c1c..396fe870 100644 --- a/examples/welcome_bot.py +++ b/examples/welcome_bot.py @@ -1,11 +1,11 @@ -from pyrogram import Client, Emoji, Filters - """This is the Welcome Bot in @PyrogramChat. It uses the Emoji module to easily add emojis in your text messages and Filters -to make it only work for specific messages in a specific chat +to make it only work for specific messages in a specific chat """ +from pyrogram import Client, Emoji, Filters + app = Client("my_account") From c2da2a61ece6711bd7ed51d68249995843ff5dec Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 9 Oct 2018 16:37:53 +0200 Subject: [PATCH 261/530] Update welcome_bot.py --- examples/welcome_bot.py | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/examples/welcome_bot.py b/examples/welcome_bot.py index 396fe870..5dbb44fb 100644 --- a/examples/welcome_bot.py +++ b/examples/welcome_bot.py @@ -1,34 +1,27 @@ """This is the Welcome Bot in @PyrogramChat. It uses the Emoji module to easily add emojis in your text messages and Filters -to make it only work for specific messages in a specific chat +to make it only work for specific messages in a specific chat. """ from pyrogram import Client, Emoji, Filters +MENTION = "[{}](tg://user?id={})" +MESSAGE = "{} Welcome to [Pyrogram](https://docs.pyrogram.ml/)'s group chat {}!" + app = Client("my_account") @app.on_message(Filters.chat("PyrogramChat") & Filters.new_chat_members) def welcome(client, message): # Build the new members list (with mentions) by using their first_name - new_members = ", ".join([ - "[{}](tg://user?id={})".format(i.first_name, i.id) - for i in message.new_chat_members - ]) + new_members = [MENTION.format(i.first_name, i.id) for i in message.new_chat_members] # Build the welcome message by using an emoji and the list we built above - text = "{} Welcome to [Pyrogram](https://docs.pyrogram.ml/)'s group chat {}!".format( - Emoji.SPARKLES, - new_members - ) + text = MESSAGE.format(Emoji.SPARKLES, ", ".join(new_members)) # Send the welcome message - client.send_message( - message.chat.id, text, - reply_to_message_id=message.message_id, - disable_web_page_preview=True - ) + message.reply(text, disable_web_page_preview=True) app.run() # Automatically start() and idle() From 0025489c865bebdc37beddc2587c2f863f0e381e Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 12 Oct 2018 14:12:29 +0200 Subject: [PATCH 262/530] Allow on_message to behave like a static decorator This enabled usages like @Client.on_message(...). To preserve positional arguments order and thus ease the static decorator usage there's a not-so-elegant hack in place that shifts values. --- pyrogram/client/methods/decorators/on_message.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/methods/decorators/on_message.py b/pyrogram/client/methods/decorators/on_message.py index 0011e083..7a0d54a0 100644 --- a/pyrogram/client/methods/decorators/on_message.py +++ b/pyrogram/client/methods/decorators/on_message.py @@ -17,11 +17,12 @@ # along with Pyrogram. If not, see . import pyrogram +from pyrogram.client.filters.filter import Filter from ...ext import BaseClient class OnMessage(BaseClient): - def on_message(self, filters=None, group: int = 0): + def on_message(self=None, filters=None, group: int = 0): """Use this decorator to automatically register a function for handling messages. This does the same thing as :meth:`add_handler` using the :class:`MessageHandler`. @@ -36,7 +37,14 @@ class OnMessage(BaseClient): """ def decorator(func): - self.add_handler(pyrogram.MessageHandler(func, filters), group) - return func + handler = pyrogram.MessageHandler(func, filters) + + if isinstance(self, Filter): + return pyrogram.MessageHandler(func, self), group if filters is None else filters + + if self is not None: + self.add_handler(handler, group) + + return handler, group return decorator From dfb841baa9dc226d4f28a48ce05de0628db9fd47 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 12 Oct 2018 14:17:03 +0200 Subject: [PATCH 263/530] Automatically scan and load plugins from a customizable directory Defined functions found inside the directory that are also decorated properly will be registered in the Client's dispatcher as handlers. --- pyrogram/client/client.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index ee40d2bc..ebcfb02a 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -33,6 +33,7 @@ import time from configparser import ConfigParser from datetime import datetime from hashlib import sha256, md5 +from importlib import import_module from signal import signal, SIGINT, SIGTERM, SIGABRT from threading import Thread @@ -45,6 +46,7 @@ from pyrogram.api.errors import ( PasswordHashInvalid, FloodWait, PeerIdInvalid, FirstnameInvalid, PhoneNumberBanned, VolumeLocNotFound, UserMigrate, FileIdInvalid, ChannelPrivate) from pyrogram.client.handlers import DisconnectHandler +from pyrogram.client.handlers.handler import Handler from pyrogram.crypto import AES from pyrogram.session import Auth, Session from .dispatcher import Dispatcher @@ -161,7 +163,8 @@ class Client(Methods, BaseClient): last_name: str = None, workers: int = 4, workdir: str = ".", - config_file: str = "./config.ini"): + config_file: str = "./config.ini", + plugins_dir: str = "./plugins"): super().__init__() self.session_name = session_name @@ -184,6 +187,7 @@ class Client(Methods, BaseClient): self.workers = workers self.workdir = workdir self.config_file = config_file + self.plugins_dir = plugins_dir self.dispatcher = Dispatcher(self, workers) @@ -226,6 +230,24 @@ class Client(Methods, BaseClient): self.auth_key ) + if self.plugins_dir is not None: + for i in os.listdir(self.plugins_dir): + module = import_module("{}.{}".format(self.plugins_dir, i.split(".")[0])) + + for j in dir(module): + # noinspection PyBroadException + try: + handler, group = getattr(module, j) + + if isinstance(handler, Handler) and isinstance(group, int): + self.add_handler(handler, group) + + log.info('{}("{}") from "{}/{}" registered in group {}'.format( + type(handler).__name__, j, self.plugins_dir, i, group) + ) + except Exception: + pass + self.session.start() self.is_started = True From 0b79f96b4f5de9e2cbd580c9468f0646a7109f40 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 12 Oct 2018 14:19:26 +0200 Subject: [PATCH 264/530] Turn hardcoded plugins dir into a constant --- pyrogram/client/client.py | 2 +- pyrogram/client/ext/base_client.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index ebcfb02a..b59469d2 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -164,7 +164,7 @@ class Client(Methods, BaseClient): workers: int = 4, workdir: str = ".", config_file: str = "./config.ini", - plugins_dir: str = "./plugins"): + plugins_dir: str = BaseClient.PLUGINS_DIR): super().__init__() self.session_name = session_name diff --git a/pyrogram/client/ext/base_client.py b/pyrogram/client/ext/base_client.py index fa96e1db..562da2b2 100644 --- a/pyrogram/client/ext/base_client.py +++ b/pyrogram/client/ext/base_client.py @@ -49,6 +49,7 @@ class BaseClient: UPDATES_WORKERS = 1 DOWNLOAD_WORKERS = 1 OFFLINE_SLEEP = 300 + PLUGINS_DIR = "./plugins" MEDIA_TYPE_ID = { 0: "thumbnail", From 4e516d097f31b65e411e8c21493a114014fe0a80 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 12 Oct 2018 14:32:35 +0200 Subject: [PATCH 265/530] Don't raise exceptions in case of non-existent plugins folder Don't even warn in case the default plugins folder doesn't exist --- pyrogram/client/client.py | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index b59469d2..0274e59f 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -231,22 +231,30 @@ class Client(Methods, BaseClient): ) if self.plugins_dir is not None: - for i in os.listdir(self.plugins_dir): - module = import_module("{}.{}".format(self.plugins_dir, i.split(".")[0])) + try: + dirs = os.listdir(self.plugins_dir) + except FileNotFoundError as e: + if self.plugins_dir == Client.PLUGINS_DIR: + pass + else: + log.warning(e) + else: + for i in dirs: + module = import_module("{}.{}".format(self.plugins_dir, i.split(".")[0])) - for j in dir(module): - # noinspection PyBroadException - try: - handler, group = getattr(module, j) + for j in dir(module): + # noinspection PyBroadException + try: + handler, group = getattr(module, j) - if isinstance(handler, Handler) and isinstance(group, int): - self.add_handler(handler, group) + if isinstance(handler, Handler) and isinstance(group, int): + self.add_handler(handler, group) - log.info('{}("{}") from "{}/{}" registered in group {}'.format( - type(handler).__name__, j, self.plugins_dir, i, group) - ) - except Exception: - pass + log.info('{}("{}") from "{}/{}" registered in group {}'.format( + type(handler).__name__, j, self.plugins_dir, i, group) + ) + except Exception: + pass self.session.start() self.is_started = True From 6c05f9ff428ba8522b061ed00628ecee4b1ebf90 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 12 Oct 2018 15:26:52 +0200 Subject: [PATCH 266/530] Sanitize (a bit) plugins directory --- pyrogram/client/client.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 0274e59f..31e6ef1b 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -239,8 +239,10 @@ class Client(Methods, BaseClient): else: log.warning(e) else: + plugins_dir = self.plugins_dir.lstrip("./").replace("/", ".") + for i in dirs: - module = import_module("{}.{}".format(self.plugins_dir, i.split(".")[0])) + module = import_module("{}.{}".format(plugins_dir, i.split(".")[0])) for j in dir(module): # noinspection PyBroadException From 4bb50ee35fd8c988d9a70cee6974d3cb0429dbaf Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 12 Oct 2018 17:54:52 +0200 Subject: [PATCH 267/530] More logs when loading plugins --- pyrogram/client/client.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 31e6ef1b..48473cc2 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -233,13 +233,14 @@ class Client(Methods, BaseClient): if self.plugins_dir is not None: try: dirs = os.listdir(self.plugins_dir) - except FileNotFoundError as e: + except FileNotFoundError: if self.plugins_dir == Client.PLUGINS_DIR: - pass + log.info("No plugin loaded: default directory is missing") else: - log.warning(e) + log.warning('No plugin loaded: "{}" directory is missing'.format(self.plugins_dir)) else: plugins_dir = self.plugins_dir.lstrip("./").replace("/", ".") + plugins_count = 0 for i in dirs: module = import_module("{}.{}".format(plugins_dir, i.split(".")[0])) @@ -252,12 +253,20 @@ class Client(Methods, BaseClient): if isinstance(handler, Handler) and isinstance(group, int): self.add_handler(handler, group) - log.info('{}("{}") from "{}/{}" registered in group {}'.format( + log.info('{}("{}") from "{}/{}" loaded in group {}'.format( type(handler).__name__, j, self.plugins_dir, i, group) ) + + plugins_count += 1 except Exception: pass + log.warning('Successfully loaded {} plugin{} from "{}"'.format( + plugins_count, + "s" if plugins_count > 1 else "", + self.plugins_dir + )) + self.session.start() self.is_started = True From 6a0066b8b53f9343f882393bc6011b02d55f7797 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 12 Oct 2018 17:57:34 +0200 Subject: [PATCH 268/530] Move loading plugins logic into a separate method --- pyrogram/client/client.py | 76 ++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 48473cc2..fef929fc 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -223,6 +223,7 @@ class Client(Methods, BaseClient): self.load_config() self.load_session() + self.load_plugins() self.session = Session( self, @@ -230,43 +231,6 @@ class Client(Methods, BaseClient): self.auth_key ) - if self.plugins_dir is not None: - try: - dirs = os.listdir(self.plugins_dir) - except FileNotFoundError: - if self.plugins_dir == Client.PLUGINS_DIR: - log.info("No plugin loaded: default directory is missing") - else: - log.warning('No plugin loaded: "{}" directory is missing'.format(self.plugins_dir)) - else: - plugins_dir = self.plugins_dir.lstrip("./").replace("/", ".") - plugins_count = 0 - - for i in dirs: - module = import_module("{}.{}".format(plugins_dir, i.split(".")[0])) - - for j in dir(module): - # noinspection PyBroadException - try: - handler, group = getattr(module, j) - - if isinstance(handler, Handler) and isinstance(group, int): - self.add_handler(handler, group) - - log.info('{}("{}") from "{}/{}" loaded in group {}'.format( - type(handler).__name__, j, self.plugins_dir, i, group) - ) - - plugins_count += 1 - except Exception: - pass - - log.warning('Successfully loaded {} plugin{} from "{}"'.format( - plugins_count, - "s" if plugins_count > 1 else "", - self.plugins_dir - )) - self.session.start() self.is_started = True @@ -1009,6 +973,44 @@ class Client(Methods, BaseClient): if peer: self.peers_by_phone[k] = peer + def load_plugins(self): + if self.plugins_dir is not None: + try: + dirs = os.listdir(self.plugins_dir) + except FileNotFoundError: + if self.plugins_dir == Client.PLUGINS_DIR: + log.info("No plugin loaded: default directory is missing") + else: + log.warning('No plugin loaded: "{}" directory is missing'.format(self.plugins_dir)) + else: + plugins_dir = self.plugins_dir.lstrip("./").replace("/", ".") + plugins_count = 0 + + for i in dirs: + module = import_module("{}.{}".format(plugins_dir, i.split(".")[0])) + + for j in dir(module): + # noinspection PyBroadException + try: + handler, group = getattr(module, j) + + if isinstance(handler, Handler) and isinstance(group, int): + self.add_handler(handler, group) + + log.info('{}("{}") from "{}/{}" loaded in group {}'.format( + type(handler).__name__, j, self.plugins_dir, i, group) + ) + + plugins_count += 1 + except Exception: + pass + + log.warning('Successfully loaded {} plugin{} from "{}"'.format( + plugins_count, + "s" if plugins_count > 1 else "", + self.plugins_dir + )) + def save_session(self): auth_key = base64.b64encode(self.auth_key).decode() auth_key = [auth_key[i: i + 43] for i in range(0, len(auth_key), 43)] From a32009a79d86085bb188a3afc73724096b348c39 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 13 Oct 2018 10:38:44 +0200 Subject: [PATCH 269/530] Don't make use of hardcoded default string values --- pyrogram/client/client.py | 4 ++-- pyrogram/client/ext/base_client.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index ee40d2bc..e3433b3a 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -160,8 +160,8 @@ class Client(Methods, BaseClient): first_name: str = None, last_name: str = None, workers: int = 4, - workdir: str = ".", - config_file: str = "./config.ini"): + workdir: str = BaseClient.WORKDIR, + config_file: str = BaseClient.CONFIG_FILE): super().__init__() self.session_name = session_name diff --git a/pyrogram/client/ext/base_client.py b/pyrogram/client/ext/base_client.py index fa96e1db..e7296236 100644 --- a/pyrogram/client/ext/base_client.py +++ b/pyrogram/client/ext/base_client.py @@ -49,6 +49,8 @@ class BaseClient: UPDATES_WORKERS = 1 DOWNLOAD_WORKERS = 1 OFFLINE_SLEEP = 300 + WORKDIR = "." + CONFIG_FILE = "./config.ini" MEDIA_TYPE_ID = { 0: "thumbnail", From 9649b1457cc3be512a63b70664620c1180098af8 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 13 Oct 2018 10:41:58 +0200 Subject: [PATCH 270/530] Don't make use of hardcoded default int values too --- pyrogram/client/client.py | 2 +- pyrogram/client/ext/base_client.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index e3433b3a..c607207f 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -159,7 +159,7 @@ class Client(Methods, BaseClient): force_sms: bool = False, first_name: str = None, last_name: str = None, - workers: int = 4, + workers: int = BaseClient.WORKERS, workdir: str = BaseClient.WORKDIR, config_file: str = BaseClient.CONFIG_FILE): super().__init__() diff --git a/pyrogram/client/ext/base_client.py b/pyrogram/client/ext/base_client.py index e7296236..c18c4050 100644 --- a/pyrogram/client/ext/base_client.py +++ b/pyrogram/client/ext/base_client.py @@ -49,6 +49,7 @@ class BaseClient: UPDATES_WORKERS = 1 DOWNLOAD_WORKERS = 1 OFFLINE_SLEEP = 300 + WORKERS = 4 WORKDIR = "." CONFIG_FILE = "./config.ini" From 1fdc757f2afd30b1f30ee64dce345e34fca73f87 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 13 Oct 2018 10:45:48 +0200 Subject: [PATCH 271/530] Allow on_raw_update to be used as a static decorator --- pyrogram/client/methods/decorators/on_raw_update.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/methods/decorators/on_raw_update.py b/pyrogram/client/methods/decorators/on_raw_update.py index 902d9854..7675a4f0 100644 --- a/pyrogram/client/methods/decorators/on_raw_update.py +++ b/pyrogram/client/methods/decorators/on_raw_update.py @@ -21,7 +21,7 @@ from ...ext import BaseClient class OnRawUpdate(BaseClient): - def on_raw_update(self, group: int = 0): + def on_raw_update(self=None, group: int = 0): """Use this decorator to automatically register a function for handling raw updates. This does the same thing as :meth:`add_handler` using the :class:`RawUpdateHandler`. @@ -32,7 +32,14 @@ class OnRawUpdate(BaseClient): """ def decorator(func): - self.add_handler(pyrogram.RawUpdateHandler(func), group) - return func + handler = pyrogram.RawUpdateHandler(func) + + if isinstance(self, int): + return handler, group if self is None else group + + if self is not None: + self.add_handler(handler, group) + + return handler, group return decorator From 54296a6fdaa9e28d4d9e06e8d446ee89c32a40b4 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 13 Oct 2018 10:47:39 +0200 Subject: [PATCH 272/530] Allow on_disconnect to be used as a static decorator --- pyrogram/client/methods/decorators/on_disconnect.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/methods/decorators/on_disconnect.py b/pyrogram/client/methods/decorators/on_disconnect.py index 4bc593e3..a639471b 100644 --- a/pyrogram/client/methods/decorators/on_disconnect.py +++ b/pyrogram/client/methods/decorators/on_disconnect.py @@ -28,7 +28,11 @@ class OnDisconnect(BaseClient): """ def decorator(func): - self.add_handler(pyrogram.DisconnectHandler(func)) - return func + handler = pyrogram.DisconnectHandler(func) + + if self is not None: + self.add_handler(handler) + + return handler return decorator From 6fdb90e4a47d2a7187e195b1556edbde18686795 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 13 Oct 2018 10:54:13 +0200 Subject: [PATCH 273/530] Allow on_deleted_messages to be used as a static decorator --- .../client/methods/decorators/on_deleted_messages.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/methods/decorators/on_deleted_messages.py b/pyrogram/client/methods/decorators/on_deleted_messages.py index 3f603c41..e4b2bc97 100644 --- a/pyrogram/client/methods/decorators/on_deleted_messages.py +++ b/pyrogram/client/methods/decorators/on_deleted_messages.py @@ -17,6 +17,7 @@ # along with Pyrogram. If not, see . import pyrogram +from pyrogram.client.filters.filter import Filter from ...ext import BaseClient @@ -36,7 +37,14 @@ class OnDeletedMessages(BaseClient): """ def decorator(func): - self.add_handler(pyrogram.DeletedMessagesHandler(func, filters), group) - return func + handler = pyrogram.DeletedMessagesHandler(func, filters) + + if isinstance(self, Filter): + return pyrogram.DeletedMessagesHandler(func, self), group if filters is None else filters + + if self is not None: + self.add_handler(handler, group) + + return handler, group return decorator From 96b39970d6281e62eb57271e249af9a7dab754a7 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 13 Oct 2018 10:55:41 +0200 Subject: [PATCH 274/530] Allow on_callback_query to be used as a static decorator --- .../client/methods/decorators/on_callback_query.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/methods/decorators/on_callback_query.py b/pyrogram/client/methods/decorators/on_callback_query.py index 5f22fc92..8413515d 100644 --- a/pyrogram/client/methods/decorators/on_callback_query.py +++ b/pyrogram/client/methods/decorators/on_callback_query.py @@ -17,6 +17,7 @@ # along with Pyrogram. If not, see . import pyrogram +from pyrogram.client.filters.filter import Filter from ...ext import BaseClient @@ -36,7 +37,14 @@ class OnCallbackQuery(BaseClient): """ def decorator(func): - self.add_handler(pyrogram.CallbackQueryHandler(func, filters), group) - return func + handler = pyrogram.CallbackQueryHandler(func, filters) + + if isinstance(self, Filter): + return pyrogram.CallbackQueryHandler(func, self), group if filters is None else filters + + if self is not None: + self.add_handler(handler, group) + + return handler, group return decorator From 8e238ccc9adaf44c6443c3b51d5bf5d860474dac Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 13 Oct 2018 11:14:26 +0200 Subject: [PATCH 275/530] Add plugins_dir docstrings in Client class definition --- pyrogram/client/client.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index a34f0967..f211cb16 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -142,6 +142,11 @@ class Client(Methods, BaseClient): config_file (``str``, *optional*): Path of the configuration file. Defaults to ./config.ini + + plugins_dir (``str``, *optional*): + Define a custom directory for your plugins. The plugins directory is the location in your + filesystem where Pyrogram will automatically load your update handlers. + Defaults to "./plugins". Set to None to completely disable plugins. """ def __init__(self, From c5006fcf1e38cb7d9484fb823d2f9c84f11700e2 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 13 Oct 2018 16:53:51 +0200 Subject: [PATCH 276/530] Add Plugins.rst Documentation for Plugins --- docs/source/resources/Plugins.rst | 116 ++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 docs/source/resources/Plugins.rst diff --git a/docs/source/resources/Plugins.rst b/docs/source/resources/Plugins.rst new file mode 100644 index 00000000..d490b37b --- /dev/null +++ b/docs/source/resources/Plugins.rst @@ -0,0 +1,116 @@ +Plugins +======= + +Pyrogram embeds an **automatic** and lightweight plugin system that is meant to greatly simplify the organization of +large projects and to provide a way for creating pluggable components that can be **easily shared** across different +Pyrogram applications with **minimal boilerplate code**. + +Introduction +------------ + +Prior to the plugin system, pluggable handlers were already possible. For instance, if you wanted to modularize your +applications, you had to do something like this... + + .. note:: This is an example application that replies in private chats with two messages: one containing the same + text message you sent and the other containing the reversed text message (e.g.: "pyrogram" -> "pyrogram" and + "margoryp"): + + .. code-block:: text + + myproject/ + config.ini + handlers.py + main.py + + - ``handlers.py`` + + .. code-block:: python + + def echo(client, message): + message.reply(message.text) + + + def echo_reversed(client, message): + message.reply(message.text[::-1]) + + - ``main.py`` + + .. code-block:: python + + from pyrogram import Client, MessageHandler, Filters + + from handlers import echo, echo_reversed + + app = Client("my_account") + + app.add_handler( + MessageHandler( + echo, + Filters.text & Filters.private)) + + app.add_handler( + MessageHandler( + echo_reversed, + Filters.text & Filters.private), + group=1) + + app.run() + +...which is already nice and doesn't add *too much* boilerplate code, but things can get boring still; you have to +manually ``import``, manually :meth:`add_handler ` and manually instantiate each +:obj:`MessageHandler ` object because **you can't use those cool decorators** for your +functions. So... What if you could? + +Creating Plugins +---------------- + +Setting up your Pyrogram project to accommodate plugins is as easy as creating a folder and putting your files full of +handlers inside. + + .. note:: This is the same example application `as shown above <#introduction>`_, written using the plugin system. + + .. code-block:: text + :emphasize-lines: 2, 3 + + myproject/ + plugins/ + handlers.py + config.ini + main.py + + - ``plugins/handlers.py`` + + .. code-block:: python + :emphasize-lines: 4, 9 + + from pyrogram import Client, Filters + + + @Client.on_message(Filters.text & Filters.private) + def echo(client, message): + message.reply(message.text) + + + @Client.on_message(Filters.text & Filters.private, group=1) + def echo_reversed(client, message): + message.reply(message.text[::-1]) + + - ``main.py`` + + .. code-block:: python + + from pyrogram import Client + + Client("my_account").run() + +The first important thing to note is the ``plugins`` folder, whose name is default and can be changed easily by setting +the ``plugins_dir`` parameter when creating a :obj:`Client `; you can put any python file in the +plugins folder and each file can contain any decorated function (handlers). Your Pyrogram Client instance (in the +``main.py`` file) will **automatically** scan the folder upon creation to search for valid handlers and register them +for you. + +Then you'll notice you can now use decorators. That's right, you can apply the usual decorators to your callback +functions in a static way, i.e. **without having the Client instance around**: simply use ``@Client`` (Client class) +instead of the usual ``@app`` (Client instance) namespace and things will work just the same. + +The ``main.py`` script is now at its bare minimum and cleanest state. From 29c314295862e568d7b93ca684164111c923d68e Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 13 Oct 2018 16:54:13 +0200 Subject: [PATCH 277/530] Index Plugin.rst --- docs/source/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/index.rst b/docs/source/index.rst index 6e740dd0..3e0855a5 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -84,6 +84,7 @@ To get started, press the Next button. resources/UpdateHandling resources/UsingFilters + resources/Plugins resources/AutoAuthorization resources/CustomizeSessions resources/TgCrypto From f4146a87798df3d2c0be94cb48c6cf32e6ce48a1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 13 Oct 2018 19:33:43 +0200 Subject: [PATCH 278/530] Accept None as plugins_dir --- pyrogram/client/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index f211cb16..b19bb486 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -169,7 +169,7 @@ class Client(Methods, BaseClient): workers: int = BaseClient.WORKERS, workdir: str = BaseClient.WORKDIR, config_file: str = BaseClient.CONFIG_FILE, - plugins_dir: str = BaseClient.PLUGINS_DIR): + plugins_dir: str or None = BaseClient.PLUGINS_DIR): super().__init__() self.session_name = session_name From d5097f0b3995b7050b0f276d1d72de55afab28a5 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 10:48:17 +0200 Subject: [PATCH 279/530] Change badge style and rename scheme to schema --- docs/source/index.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 6e740dd0..ee00e682 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -23,13 +23,13 @@ Welcome to Pyrogram Community -

+
- Scheme Layer - TgCrypto

From d576cdffb385e4bdf89cc56481ce62e5a2ba3f51 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 10:48:39 +0200 Subject: [PATCH 280/530] Fix reported schema layer --- docs/source/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index ee00e682..b3015201 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -64,7 +64,7 @@ Features - **Easy to use**: You can easily install Pyrogram using pip and start building your app right away. - **High-level**: The low-level details of MTProto are abstracted and automatically handled. - **Fast**: Crypto parts are boosted up by TgCrypto_, a high-performance library written in pure C. -- **Updated** to the latest Telegram API version, currently Layer 81 on top of MTProto 2.0. +- **Updated** to the latest Telegram API version, currently Layer 82 on top of MTProto 2.0. - **Documented**: The Pyrogram API is well documented and resembles the Telegram Bot API. - **Full API**, allowing to execute any advanced action an official client is able to do, and more. From 317f584a2adae713c81c4a389a9ac1270232faf7 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 11:14:10 +0200 Subject: [PATCH 281/530] Yet another badge style change --- docs/source/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index b3015201..d4883ce8 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -25,11 +25,11 @@ Welcome to Pyrogram
- Scheme Layer - TgCrypto

From f063726d93f8ef1bafa015921e5f0baf098d7aa5 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 11:46:44 +0200 Subject: [PATCH 282/530] Update index.rst --- docs/source/index.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index d4883ce8..94a14228 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -49,14 +49,14 @@ Welcome to Pyrogram app.run() Welcome to Pyrogram's Documentation! Here you can find resources for learning how to use the library. -Contents are organized by topic and can be accessed from the sidebar, or by following them one by one using the Next -button at the end of each page. But first, here's a brief overview of what is this all about. +Contents are organized into self-contained topics and can be accessed from the sidebar, or by following them in order +using the Next button at the end of each page. But first, here's a brief overview of what is this all about. About ----- -**Pyrogram** is a brand new Telegram_ Client Library written from the ground up in Python and C. It can be used for building -custom Telegram applications that interact with the MTProto API as both User and Bot. +**Pyrogram** is a brand new Telegram_ Client Library written from the ground up in Python and C. It can be used for +building custom Telegram applications that interact with the MTProto API as both User and Bot. Features -------- From a3272d28d4d97a170783ce944c5a345b64725552 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 11:47:30 +0200 Subject: [PATCH 283/530] Update installation.rst --- docs/source/start/Installation.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/source/start/Installation.rst b/docs/source/start/Installation.rst index d3ddfe7d..41a7ccac 100644 --- a/docs/source/start/Installation.rst +++ b/docs/source/start/Installation.rst @@ -4,11 +4,12 @@ Installation Being a Python library, Pyrogram requires Python to be installed in your system. We recommend using the latest version of Python 3 and pip. -Get Python 3 from https://www.python.org/downloads/ or with your package manager and pip +Get Python 3 from https://www.python.org/downloads/ (or with your package manager) and pip by following the instructions at https://pip.pypa.io/en/latest/installing/. -.. note:: - Pyrogram supports Python 3 only, starting from version 3.4 and PyPy. +.. important:: + + Pyrogram supports **Python 3** only, starting from version 3.4. **PyPy** is supported too. Install Pyrogram ---------------- @@ -29,7 +30,7 @@ Bleeding Edge ------------- If you want the latest development version of Pyrogram, you can install it straight from the develop_ -branch using this command: +branch using this command (you might need to install **git** first): .. code-block:: bash From 3659ea82fb3ca0696f8c77f4f0145a42beec4c13 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 11:58:23 +0200 Subject: [PATCH 284/530] Small fixes to the Setup.rst page --- docs/source/start/Setup.rst | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/source/start/Setup.rst b/docs/source/start/Setup.rst index e0cccc2c..24caa1f4 100644 --- a/docs/source/start/Setup.rst +++ b/docs/source/start/Setup.rst @@ -53,6 +53,7 @@ fits better for you: ) .. note:: + The examples below assume you have created a ``config.ini`` file, thus they won't show the *api_id* and *api_hash* parameters usage. @@ -74,7 +75,7 @@ the :class:`Client ` class by passing to it a ``session_name`` This starts an interactive shell asking you to input your **phone number** (including your `Country Code`_) and the **phone code** you will receive: -.. code:: +.. code-block:: text Enter phone number: +39********** Is "+39**********" correct? (y/n): y @@ -84,7 +85,9 @@ After successfully authorizing yourself, a new file called ``my_account.session` Pyrogram executing API calls with your identity. This file will be loaded again when you restart your app, and as long as you keep the session alive, Pyrogram won't ask you again to enter your phone number. -.. important:: Your ``*.session`` files are personal and must be kept secret. +.. important:: + + Your ``*.session`` files are personal and must be kept secret. Bot Authorization ----------------- From d03f04a560a5427976ca5d8fde5b79ce8de26dfe Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 11:59:33 +0200 Subject: [PATCH 285/530] Add more and clearer examples in the Usage.rst page --- docs/source/start/Usage.rst | 87 +++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/docs/source/start/Usage.rst b/docs/source/start/Usage.rst index 6eac5cd1..4809df0b 100644 --- a/docs/source/start/Usage.rst +++ b/docs/source/start/Usage.rst @@ -10,25 +10,36 @@ High-level API The easiest and recommended way to interact with Telegram is via the high-level Pyrogram methods_ and types_, which are named after the `Telegram Bot API`_. -Examples (more on `GitHub `_): - -- Get information about the authorized user: +Here's a simple example: .. code-block:: python + from pyrogram import Client + + app = Client("my_account") + + app.start() + print(app.get_me()) + app.send_message("me", "Hi there! I'm using **Pyrogram**") + app.send_location("me", 51.500729, -0.124583) -- Send a message to yourself (Saved Messages): + app.stop() + +You can also use the Client instance in a context manager with the ``with`` statement: .. code-block:: python - app.send_message("me", "Hi there! I'm using Pyrogram") + from pyrogram import Client -- Upload a new photo (with caption): + app = Client("my_account") - .. code-block:: python + with app: + print(app.get_me()) + app.send_message("me", "Hi there! I'm using **Pyrogram**") + app.send_location("me", 51.500729, -0.124583) - app.send_photo("me", "/home/dan/perla.jpg", "Cute!") +More examples on `GitHub `_. Raw Functions ------------- @@ -38,7 +49,9 @@ you have to use the raw :mod:`functions ` and :mod:`type ``pyrogram.api`` package and call any Telegram API method you wish using the :meth:`send() ` method provided by the Client class. -.. hint:: Every high-level method mentioned in the section above is built on top of these raw functions. +.. hint:: + + Every high-level method mentioned in the section above is built on top of these raw functions. Nothing stops you from using the raw functions only, but they are rather complex and `plenty of them`_ are already re-implemented by providing a much simpler and cleaner interface which is very similar to the Bot API. @@ -54,17 +67,13 @@ Examples (more on `GitHub Date: Sun, 14 Oct 2018 12:02:48 +0200 Subject: [PATCH 286/530] Add clearer details --- docs/source/start/Usage.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/source/start/Usage.rst b/docs/source/start/Usage.rst index 4809df0b..6c1697b9 100644 --- a/docs/source/start/Usage.rst +++ b/docs/source/start/Usage.rst @@ -26,7 +26,9 @@ Here's a simple example: app.stop() -You can also use the Client instance in a context manager with the ``with`` statement: +You can also use Pyrogram in a context manager with the ``with`` statement. The Client will automatically +:meth:`start ` and :meth:`stop ` gracefully, even in case of unhandled +exceptions in your code: .. code-block:: python From 474388d8a4d391252bfa5a26db3527c2c94fb2fa Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 12:28:00 +0200 Subject: [PATCH 287/530] Small improvements on UpdateHandling.rst --- docs/source/resources/UpdateHandling.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/resources/UpdateHandling.rst b/docs/source/resources/UpdateHandling.rst index 781a48af..12afe324 100644 --- a/docs/source/resources/UpdateHandling.rst +++ b/docs/source/resources/UpdateHandling.rst @@ -2,15 +2,15 @@ Update Handling =============== Updates are events that happen in your Telegram account (incoming messages, new channel posts, new members join, ...) -and can be handled by registering one or more callback functions in your app by using an `Handler <../pyrogram/Handlers.html>`_. +and can be handled by registering one or more callback functions in your app by using `Handlers <../pyrogram/Handlers.html>`_. To put it simply, whenever an update is received from Telegram it will be dispatched and your previously defined callback -function(s) will be called back with the update itself as argument. +function(s) matching it will be called back with the update itself as argument. Registering an Handler ---------------------- -To explain how `Handlers <../pyrogram/Handlers.html>`_ work let's have a look at the most used one, the +To explain how handlers work let's have a look at the most used one, the :obj:`MessageHandler `, which will be in charge for handling :obj:`Message ` updates coming from all around your chats. Every other handler shares the same setup logic; you should not have troubles settings them up once you learn from this section. From b79df81f14dcb1cb1cb08ce609d7f3e634d9408a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 14:24:53 +0200 Subject: [PATCH 288/530] Allow specifying more than one prefix in Filters.command --- pyrogram/client/filters/filters.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index 79ab0f5f..93322e1d 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -168,7 +168,7 @@ class Filters: @staticmethod def command(command: str or list, - prefix: str = "/", + prefix: str or list = "/", separator: str = " ", case_sensitive: bool = False): """Filter commands, i.e.: text messages starting with "/" or any other custom prefix. @@ -180,8 +180,8 @@ class Filters: a command arrives, the command itself and its arguments will be stored in the *command* field of the :class:`Message `. - prefix (``str``, *optional*): - The command prefix. Defaults to "/" (slash). + prefix (``str`` | ``list``, *optional*): + A prefix or a list of prefixes as string. Defaults to "/" (slash). Examples: /start, .help, !settings. separator (``str``, *optional*): @@ -194,11 +194,14 @@ class Filters: """ def f(_, m): - if m.text and m.text.startswith(_.p): - t = m.text.split(_.s) - c, a = t[0][len(_.p):], t[1:] - c = c if _.cs else c.lower() - m.command = ([c] + a) if c in _.c else None + if m.text: + for i in _.p: + if m.text.startswith(i): + t = m.text.split(_.s) + c, a = t[0][len(i):], t[1:] + c = c if _.cs else c.lower() + m.command = ([c] + a) if c in _.c else None + break return bool(m.command) @@ -211,7 +214,7 @@ class Filters: else {c if case_sensitive else c.lower() for c in command}, - p=prefix, + p=set(prefix), s=separator, cs=case_sensitive ) From 465dcac630fd07990225e55761a69862fb1ce28d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 17:08:49 +0200 Subject: [PATCH 289/530] Create LastSeen class --- compiler/api/compiler.py | 1 + pyrogram/__init__.py | 2 +- pyrogram/client/types/__init__.py | 2 +- .../client/types/user_and_chats/__init__.py | 1 + .../client/types/user_and_chats/last_seen.py | 46 +++++++++++++++++++ 5 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 pyrogram/client/types/user_and_chats/last_seen.py diff --git a/compiler/api/compiler.py b/compiler/api/compiler.py index bcb96ea4..4cce310a 100644 --- a/compiler/api/compiler.py +++ b/compiler/api/compiler.py @@ -506,6 +506,7 @@ def start(): f.write("\n 0xb0700028: \"pyrogram.client.types.Dialog\",") f.write("\n 0xb0700029: \"pyrogram.client.types.Dialogs\",") f.write("\n 0xb0700030: \"pyrogram.client.types.ChatMembers\",") + f.write("\n 0xb0700031: \"pyrogram.client.types.LastSeen\"") f.write("\n}\n") diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 6fb6fff4..cc6e9899 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -29,7 +29,7 @@ from .api.errors import Error from .client.types import ( Audio, Chat, ChatMember, ChatMembers, ChatPhoto, Contact, Document, InputMediaPhoto, InputMediaVideo, InputMediaDocument, InputMediaAudio, InputMediaAnimation, InputPhoneContact, - Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, + Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, LastSeen, UserProfilePhotos, Venue, Animation, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply, InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove ) diff --git a/pyrogram/client/types/__init__.py b/pyrogram/client/types/__init__.py index 230d5e5d..a4b33e40 100644 --- a/pyrogram/client/types/__init__.py +++ b/pyrogram/client/types/__init__.py @@ -36,5 +36,5 @@ from .messages_and_media import ( from .update import Update from .user_and_chats import ( Chat, ChatMember, ChatMembers, ChatPhoto, - Dialog, Dialogs, User + Dialog, Dialogs, User, LastSeen ) diff --git a/pyrogram/client/types/user_and_chats/__init__.py b/pyrogram/client/types/user_and_chats/__init__.py index 45915edc..6711ab2c 100644 --- a/pyrogram/client/types/user_and_chats/__init__.py +++ b/pyrogram/client/types/user_and_chats/__init__.py @@ -22,4 +22,5 @@ from .chat_members import ChatMembers from .chat_photo import ChatPhoto from .dialog import Dialog from .dialogs import Dialogs +from .last_seen import LastSeen from .user import User diff --git a/pyrogram/client/types/user_and_chats/last_seen.py b/pyrogram/client/types/user_and_chats/last_seen.py new file mode 100644 index 00000000..7403039b --- /dev/null +++ b/pyrogram/client/types/user_and_chats/last_seen.py @@ -0,0 +1,46 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api.core import Object + + +class LastSeen(Object): + """This object represents a User last seen status + """ + + ID = 0xb0700031 + + def __init__( + self, + online: bool = None, + offline: bool = None, + recently: bool = None, + within_week: bool = None, + within_month: bool = None, + long_time_ago: bool = None, + bot: bool = None, + date: int = None, + ): + self.online = online + self.offline = offline + self.recently = recently + self.within_week = within_week + self.within_month = within_month + self.long_time_ago = long_time_ago + self.bot = bot + self.date = date From d2f47d7e5976da9d10de0447d85219be6984b28a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 17:11:01 +0200 Subject: [PATCH 290/530] Add last_seen field to User parse_last_seen --- pyrogram/client/types/user_and_chats/user.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyrogram/client/types/user_and_chats/user.py b/pyrogram/client/types/user_and_chats/user.py index 9ae5dab2..fd4730c3 100644 --- a/pyrogram/client/types/user_and_chats/user.py +++ b/pyrogram/client/types/user_and_chats/user.py @@ -70,6 +70,7 @@ class User(Object): is_mutual_contact: bool, is_deleted: bool, is_bot: bool, + last_seen, first_name: str, last_name: str = None, username: str = None, @@ -83,6 +84,7 @@ class User(Object): self.is_mutual_contact = is_mutual_contact self.is_deleted = is_deleted self.is_bot = is_bot + self.last_seen = last_seen self.first_name = first_name self.last_name = last_name self.username = username From 7b369a73bbcc80061eae73eabe7bbc3aef721d96 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 17:11:27 +0200 Subject: [PATCH 291/530] Add parse_last_seen util method --- pyrogram/client/ext/utils.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index a497e3c9..82322d07 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -129,6 +129,30 @@ def parse_chat_photo(photo): ) +def parse_last_seen(user: types.User) -> pyrogram_types.LastSeen: + status = user.status + last_seen = pyrogram_types.LastSeen() + + if isinstance(status, types.UserStatusOnline): + last_seen.online = True + last_seen.date = status.expires + elif isinstance(status, types.UserStatusOffline): + last_seen.offline = True + last_seen.date = status.was_online + elif isinstance(status, types.UserStatusRecently): + last_seen.recently = True + elif isinstance(status, types.UserStatusLastWeek): + last_seen.within_week = True + elif isinstance(status, types.UserStatusLastMonth): + last_seen.within_month = True + elif user.bot: + last_seen.bot = True + else: + last_seen.long_time_ago = True + + return last_seen + + def parse_user(user: types.User) -> pyrogram_types.User or None: return pyrogram_types.User( id=user.id, @@ -142,7 +166,8 @@ def parse_user(user: types.User) -> pyrogram_types.User or None: username=user.username, language_code=user.lang_code, phone_number=user.phone, - photo=parse_chat_photo(user.photo) + photo=parse_chat_photo(user.photo), + last_seen=parse_last_seen(user), ) if user else None From 69c1532eaebfedcd369e1d7271621b4f5e350e8f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 17:17:50 +0200 Subject: [PATCH 292/530] Rename LastSeen to UserStatus It will make more sense later on when I add UserStatus updates handler. --- compiler/api/compiler.py | 2 +- pyrogram/__init__.py | 2 +- pyrogram/client/ext/utils.py | 4 ++-- pyrogram/client/types/__init__.py | 2 +- pyrogram/client/types/user_and_chats/__init__.py | 2 +- .../types/user_and_chats/{last_seen.py => user_status.py} | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) rename pyrogram/client/types/user_and_chats/{last_seen.py => user_status.py} (98%) diff --git a/compiler/api/compiler.py b/compiler/api/compiler.py index 4cce310a..cacd9342 100644 --- a/compiler/api/compiler.py +++ b/compiler/api/compiler.py @@ -506,7 +506,7 @@ def start(): f.write("\n 0xb0700028: \"pyrogram.client.types.Dialog\",") f.write("\n 0xb0700029: \"pyrogram.client.types.Dialogs\",") f.write("\n 0xb0700030: \"pyrogram.client.types.ChatMembers\",") - f.write("\n 0xb0700031: \"pyrogram.client.types.LastSeen\"") + f.write("\n 0xb0700031: \"pyrogram.client.types.UserStatus\"") f.write("\n}\n") diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index cc6e9899..1f717a84 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -29,7 +29,7 @@ from .api.errors import Error from .client.types import ( Audio, Chat, ChatMember, ChatMembers, ChatPhoto, Contact, Document, InputMediaPhoto, InputMediaVideo, InputMediaDocument, InputMediaAudio, InputMediaAnimation, InputPhoneContact, - Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, LastSeen, + Location, Message, MessageEntity, Dialog, Dialogs, Photo, PhotoSize, Sticker, Update, User, UserStatus, UserProfilePhotos, Venue, Animation, Video, VideoNote, Voice, CallbackQuery, Messages, ForceReply, InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove ) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 82322d07..5c80264b 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -129,9 +129,9 @@ def parse_chat_photo(photo): ) -def parse_last_seen(user: types.User) -> pyrogram_types.LastSeen: +def parse_last_seen(user: types.User) -> pyrogram_types.UserStatus: status = user.status - last_seen = pyrogram_types.LastSeen() + last_seen = pyrogram_types.UserStatus() if isinstance(status, types.UserStatusOnline): last_seen.online = True diff --git a/pyrogram/client/types/__init__.py b/pyrogram/client/types/__init__.py index a4b33e40..74c97ca1 100644 --- a/pyrogram/client/types/__init__.py +++ b/pyrogram/client/types/__init__.py @@ -36,5 +36,5 @@ from .messages_and_media import ( from .update import Update from .user_and_chats import ( Chat, ChatMember, ChatMembers, ChatPhoto, - Dialog, Dialogs, User, LastSeen + Dialog, Dialogs, User, UserStatus ) diff --git a/pyrogram/client/types/user_and_chats/__init__.py b/pyrogram/client/types/user_and_chats/__init__.py index 6711ab2c..f4742d83 100644 --- a/pyrogram/client/types/user_and_chats/__init__.py +++ b/pyrogram/client/types/user_and_chats/__init__.py @@ -22,5 +22,5 @@ from .chat_members import ChatMembers from .chat_photo import ChatPhoto from .dialog import Dialog from .dialogs import Dialogs -from .last_seen import LastSeen +from .user_status import UserStatus from .user import User diff --git a/pyrogram/client/types/user_and_chats/last_seen.py b/pyrogram/client/types/user_and_chats/user_status.py similarity index 98% rename from pyrogram/client/types/user_and_chats/last_seen.py rename to pyrogram/client/types/user_and_chats/user_status.py index 7403039b..bb42dc45 100644 --- a/pyrogram/client/types/user_and_chats/last_seen.py +++ b/pyrogram/client/types/user_and_chats/user_status.py @@ -19,7 +19,7 @@ from pyrogram.api.core import Object -class LastSeen(Object): +class UserStatus(Object): """This object represents a User last seen status """ From c9ce188bbe9c898dc1988f9c21b0fdb9ff7a7f6d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 17:56:10 +0200 Subject: [PATCH 293/530] Remove "bot" property from UserStatus --- pyrogram/client/ext/utils.py | 5 +++-- pyrogram/client/types/user_and_chats/user_status.py | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 5c80264b..15db2e73 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -130,6 +130,9 @@ def parse_chat_photo(photo): def parse_last_seen(user: types.User) -> pyrogram_types.UserStatus: + if user.bot: + return None + status = user.status last_seen = pyrogram_types.UserStatus() @@ -145,8 +148,6 @@ def parse_last_seen(user: types.User) -> pyrogram_types.UserStatus: last_seen.within_week = True elif isinstance(status, types.UserStatusLastMonth): last_seen.within_month = True - elif user.bot: - last_seen.bot = True else: last_seen.long_time_ago = True diff --git a/pyrogram/client/types/user_and_chats/user_status.py b/pyrogram/client/types/user_and_chats/user_status.py index bb42dc45..90399f43 100644 --- a/pyrogram/client/types/user_and_chats/user_status.py +++ b/pyrogram/client/types/user_and_chats/user_status.py @@ -33,7 +33,6 @@ class UserStatus(Object): within_week: bool = None, within_month: bool = None, long_time_ago: bool = None, - bot: bool = None, date: int = None, ): self.online = online @@ -42,5 +41,4 @@ class UserStatus(Object): self.within_week = within_week self.within_month = within_month self.long_time_ago = long_time_ago - self.bot = bot self.date = date From 2d65eb3dc7e3e12904f1c7c0f79807ebb0b99ba1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 17:56:51 +0200 Subject: [PATCH 294/530] Add UserStatus docstrings --- .../types/user_and_chats/user_status.py | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/types/user_and_chats/user_status.py b/pyrogram/client/types/user_and_chats/user_status.py index 90399f43..8792a4df 100644 --- a/pyrogram/client/types/user_and_chats/user_status.py +++ b/pyrogram/client/types/user_and_chats/user_status.py @@ -20,7 +20,42 @@ from pyrogram.api.core import Object class UserStatus(Object): - """This object represents a User last seen status + """This object represents a User status (Last Seen privacy) + + .. note:: + + You won't see exact last seen timestamps for people with whom you don't share your own. Instead, you get + "recently", "within_week", "within_month" or "long_time_ago" fields set. + + Args: + online (``bool``): + True if the user is online in this moment, None otherwise. + If True, the "date" field will be also set containing the online expiration date (i.e.: the date when a + user will automatically go offline in case of no action by his client). + + offline (``bool``): + True if the user is offline and has the Last Seen privacy setting visible for everybody, None otherwise. + If True, the "date" field will be also set containing the last seen date (i.e.: the date when a user + was online the last time). + + recently (``bool``): + True for users with hidden Last Seen privacy that have been online between 1 second and 2-3 days ago, + None otherwise. + + within_week (``bool``): + True for users with hidden Last Seen privacy that have been online between 2-3 and seven days ago, + None otherwise. + + within_month (``bool``): + True for users with hidden Last Seen privacy that have been online between 6-7 days and a month ago, + None otherwise. + + long_time_ago (``bool``): + True for users with hidden Last Seen privacy that have been online more than a month ago (this is also + always shown to blocked users), None otherwise. + + date (``int``): + Exact date in unix time. Available only in case "online" or "offline" equals to True. """ ID = 0xb0700031 From b00604dbc93ab5c5f17d6b4dc63db70fbf899d25 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 18:00:31 +0200 Subject: [PATCH 295/530] Move date field --- pyrogram/client/types/user_and_chats/user_status.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyrogram/client/types/user_and_chats/user_status.py b/pyrogram/client/types/user_and_chats/user_status.py index 8792a4df..24b30d68 100644 --- a/pyrogram/client/types/user_and_chats/user_status.py +++ b/pyrogram/client/types/user_and_chats/user_status.py @@ -38,6 +38,9 @@ class UserStatus(Object): If True, the "date" field will be also set containing the last seen date (i.e.: the date when a user was online the last time). + date (``int``): + Exact date in unix time. Available only in case "online" or "offline" equals to True. + recently (``bool``): True for users with hidden Last Seen privacy that have been online between 1 second and 2-3 days ago, None otherwise. @@ -53,9 +56,6 @@ class UserStatus(Object): long_time_ago (``bool``): True for users with hidden Last Seen privacy that have been online more than a month ago (this is also always shown to blocked users), None otherwise. - - date (``int``): - Exact date in unix time. Available only in case "online" or "offline" equals to True. """ ID = 0xb0700031 @@ -64,16 +64,16 @@ class UserStatus(Object): self, online: bool = None, offline: bool = None, + date: int = None, recently: bool = None, within_week: bool = None, within_month: bool = None, - long_time_ago: bool = None, - date: int = None, + long_time_ago: bool = None ): self.online = online self.offline = offline + self.date = date self.recently = recently self.within_week = within_week self.within_month = within_month self.long_time_ago = long_time_ago - self.date = date From 7ff4c340f767c06662c0abd080345cb86e7119c0 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 14 Oct 2018 18:00:41 +0200 Subject: [PATCH 296/530] Add UserStatus to docs --- docs/source/pyrogram/Types.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/source/pyrogram/Types.rst b/docs/source/pyrogram/Types.rst index e8dc709c..8763c0e1 100644 --- a/docs/source/pyrogram/Types.rst +++ b/docs/source/pyrogram/Types.rst @@ -10,6 +10,7 @@ Users & Chats :nosignatures: User + UserStatus Chat ChatPhoto ChatMember @@ -73,6 +74,9 @@ Input Media .. autoclass:: User :members: +.. autoclass:: UserStatus + :members: + .. autoclass:: Chat :members: From 86e4fc4e62786cbd0632f196be7eeb22dec05e4b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 15 Oct 2018 09:20:13 +0200 Subject: [PATCH 297/530] Rename last_seen field to status in User class Also add docstrings for status --- pyrogram/client/types/user_and_chats/user.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/types/user_and_chats/user.py b/pyrogram/client/types/user_and_chats/user.py index fd4730c3..9c7eec1f 100644 --- a/pyrogram/client/types/user_and_chats/user.py +++ b/pyrogram/client/types/user_and_chats/user.py @@ -41,6 +41,9 @@ class User(Object): is_bot (``bool``): True, if this user is a bot. + status (:obj:`UserStatus `): + User's Last Seen status. Empty for bots. + first_name (``str``): User's or bot's first name. @@ -70,7 +73,7 @@ class User(Object): is_mutual_contact: bool, is_deleted: bool, is_bot: bool, - last_seen, + status, first_name: str, last_name: str = None, username: str = None, @@ -84,7 +87,7 @@ class User(Object): self.is_mutual_contact = is_mutual_contact self.is_deleted = is_deleted self.is_bot = is_bot - self.last_seen = last_seen + self.status = status self.first_name = first_name self.last_name = last_name self.username = username From b2b599e211cade878e4d4dc8267bf9f636ecd9ba Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 15 Oct 2018 09:47:47 +0200 Subject: [PATCH 298/530] Rework user status parsing to also accommodate user_status updates --- pyrogram/client/ext/utils.py | 41 +++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 15db2e73..c169f54f 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -129,29 +129,32 @@ def parse_chat_photo(photo): ) -def parse_last_seen(user: types.User) -> pyrogram_types.UserStatus: - if user.bot: +def parse_update_user_status(update: types.UpdateUserStatus) -> pyrogram_types.User: + return pyrogram_types.User(id=update.user_id, status=parse_user_status(update.status)) + + +def parse_user_status(user_status, is_bot: bool = False) -> pyrogram_types.UserStatus or None: + if is_bot: return None - status = user.status - last_seen = pyrogram_types.UserStatus() + status = pyrogram_types.UserStatus() - if isinstance(status, types.UserStatusOnline): - last_seen.online = True - last_seen.date = status.expires - elif isinstance(status, types.UserStatusOffline): - last_seen.offline = True - last_seen.date = status.was_online - elif isinstance(status, types.UserStatusRecently): - last_seen.recently = True - elif isinstance(status, types.UserStatusLastWeek): - last_seen.within_week = True - elif isinstance(status, types.UserStatusLastMonth): - last_seen.within_month = True + if isinstance(user_status, types.UserStatusOnline): + status.online = True + status.date = user_status.expires + elif isinstance(user_status, types.UserStatusOffline): + status.offline = True + status.date = user_status.was_online + elif isinstance(user_status, types.UserStatusRecently): + status.recently = True + elif isinstance(user_status, types.UserStatusLastWeek): + status.within_week = True + elif isinstance(user_status, types.UserStatusLastMonth): + status.within_month = True else: - last_seen.long_time_ago = True + status.long_time_ago = True - return last_seen + return status def parse_user(user: types.User) -> pyrogram_types.User or None: @@ -168,7 +171,7 @@ def parse_user(user: types.User) -> pyrogram_types.User or None: language_code=user.lang_code, phone_number=user.phone, photo=parse_chat_photo(user.photo), - last_seen=parse_last_seen(user), + status=parse_user_status(user.status, user.bot), ) if user else None From 79a9ddfab5d67e5927a237cf2e2bcd3094ad4719 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 15 Oct 2018 10:07:46 +0200 Subject: [PATCH 299/530] Some more changed in order to enhance UserStatus API design --- pyrogram/client/ext/utils.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index c169f54f..c7a10db9 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -129,15 +129,11 @@ def parse_chat_photo(photo): ) -def parse_update_user_status(update: types.UpdateUserStatus) -> pyrogram_types.User: - return pyrogram_types.User(id=update.user_id, status=parse_user_status(update.status)) - - -def parse_user_status(user_status, is_bot: bool = False) -> pyrogram_types.UserStatus or None: +def parse_user_status(user_status, user_id: int = None, is_bot: bool = False) -> pyrogram_types.UserStatus or None: if is_bot: return None - status = pyrogram_types.UserStatus() + status = pyrogram_types.UserStatus(user_id) if isinstance(user_status, types.UserStatusOnline): status.online = True @@ -171,7 +167,7 @@ def parse_user(user: types.User) -> pyrogram_types.User or None: language_code=user.lang_code, phone_number=user.phone, photo=parse_chat_photo(user.photo), - status=parse_user_status(user.status, user.bot), + status=parse_user_status(user.status, is_bot=user.bot), ) if user else None From 4b04910197a320a4b6f81f441bf553e917d1731b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 15 Oct 2018 10:08:56 +0200 Subject: [PATCH 300/530] Add user_id field to UserStatus --- pyrogram/client/types/user_and_chats/user_status.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyrogram/client/types/user_and_chats/user_status.py b/pyrogram/client/types/user_and_chats/user_status.py index 24b30d68..17b73ea1 100644 --- a/pyrogram/client/types/user_and_chats/user_status.py +++ b/pyrogram/client/types/user_and_chats/user_status.py @@ -28,6 +28,9 @@ class UserStatus(Object): "recently", "within_week", "within_month" or "long_time_ago" fields set. Args: + user_id (``int``): + User's id. Only available for UserStatus updates. + online (``bool``): True if the user is online in this moment, None otherwise. If True, the "date" field will be also set containing the online expiration date (i.e.: the date when a @@ -62,6 +65,7 @@ class UserStatus(Object): def __init__( self, + user_id: int = None, online: bool = None, offline: bool = None, date: int = None, @@ -70,6 +74,7 @@ class UserStatus(Object): within_month: bool = None, long_time_ago: bool = None ): + self.user_id = user_id self.online = online self.offline = offline self.date = date From 471b5c33340604348ebc67a8ba23f68a0987ce94 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 15 Oct 2018 10:10:49 +0200 Subject: [PATCH 301/530] Add user_status field to Update class --- pyrogram/client/types/update.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/types/update.py b/pyrogram/client/types/update.py index c8959708..748108de 100644 --- a/pyrogram/client/types/update.py +++ b/pyrogram/client/types/update.py @@ -58,6 +58,9 @@ class Update(Object): pre_checkout_query (:obj:`PreCheckoutQuery `, *optional*): New incoming pre-checkout query. Contains full information about checkout. + + user_status (:obj:`UserStatus `, *optional*): + User status (last seen date) update. """ ID = 0xb0700000 @@ -74,7 +77,8 @@ class Update(Object): chosen_inline_result=None, callback_query=None, shipping_query=None, - pre_checkout_query=None + pre_checkout_query=None, + user_status=None ): self.message = message self.edited_message = edited_message @@ -87,3 +91,4 @@ class Update(Object): self.callback_query = callback_query self.shipping_query = shipping_query self.pre_checkout_query = pre_checkout_query + self.user_status = user_status From ff9be53a95def291b363ba877a73830b48656437 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 15 Oct 2018 10:14:40 +0200 Subject: [PATCH 302/530] Add UserStatusHandler class --- .../client/handlers/user_status_handler.py | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 pyrogram/client/handlers/user_status_handler.py diff --git a/pyrogram/client/handlers/user_status_handler.py b/pyrogram/client/handlers/user_status_handler.py new file mode 100644 index 00000000..2442d7eb --- /dev/null +++ b/pyrogram/client/handlers/user_status_handler.py @@ -0,0 +1,54 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from .handler import Handler + + +class UserStatusHandler(Handler): + """The UserStatus handler class. Used to handle user status updates (user going online or offline). + It is intended to be used with :meth:`add_handler() ` + + For a nicer way to register this handler, have a look at the + :meth:`on_user_status() ` decorator. + + Args: + callback (``callable``): + Pass a function that will be called when a new UserStatus update arrives. It takes *(client, user_status)* + as positional arguments (look at the section below for a detailed description). + + filters (:obj:`Filters `): + Pass one or more filters to allow only a subset of messages to be passed + in your callback function. + + Other parameters: + client (:obj:`Client `): + The Client itself, useful when you want to call other API methods inside the user status handler. + + user_status (:obj:`UserStatus `): + The received UserStatus update. + """ + + def __init__(self, callback: callable, filters=None): + super().__init__(callback, filters) + + def check(self, user_status): + return ( + self.filters(user_status) + if callable(self.filters) + else True + ) From 2eae08aaa642d742cfc888b543501316188f2bad Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 15 Oct 2018 10:16:19 +0200 Subject: [PATCH 303/530] Add on_user_status decorator --- .../methods/decorators/on_user_status.py | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pyrogram/client/methods/decorators/on_user_status.py diff --git a/pyrogram/client/methods/decorators/on_user_status.py b/pyrogram/client/methods/decorators/on_user_status.py new file mode 100644 index 00000000..81367c3e --- /dev/null +++ b/pyrogram/client/methods/decorators/on_user_status.py @@ -0,0 +1,41 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +import pyrogram +from ...ext import BaseClient + + +class OnUserStatus(BaseClient): + def on_user_status(self, filters=None, group: int = 0): + """Use this decorator to automatically register a function for handling + user status updates. This does the same thing as :meth:`add_handler` using the + :class:`UserStatusHandler`. + + Args: + filters (:obj:`Filters `): + Pass one or more filters to allow only a subset of UserStatus updated to be passed in your function. + + group (``int``, *optional*): + The group identifier, defaults to 0. + """ + + def decorator(func): + self.add_handler(pyrogram.UserStatusHandler(func, filters), group) + return func + + return decorator From d567b878b1b70528c9cb22718c1faccfefd78148 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 15 Oct 2018 10:17:00 +0200 Subject: [PATCH 304/530] Expose UserStatusHandler and on_user_status --- pyrogram/__init__.py | 2 +- pyrogram/client/__init__.py | 2 +- pyrogram/client/handlers/__init__.py | 3 ++- pyrogram/client/methods/decorators/__init__.py | 12 ++++++++++-- 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 1f717a84..12f181c3 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -36,5 +36,5 @@ from .client.types import ( from .client import ( Client, ChatAction, ParseMode, Emoji, MessageHandler, DeletedMessagesHandler, CallbackQueryHandler, - RawUpdateHandler, DisconnectHandler, Filters + RawUpdateHandler, DisconnectHandler, UserStatusHandler, Filters ) diff --git a/pyrogram/client/__init__.py b/pyrogram/client/__init__.py index b345de94..00b9905a 100644 --- a/pyrogram/client/__init__.py +++ b/pyrogram/client/__init__.py @@ -22,5 +22,5 @@ from .filters import Filters from .handlers import ( MessageHandler, DeletedMessagesHandler, CallbackQueryHandler, RawUpdateHandler, - DisconnectHandler + DisconnectHandler, UserStatusHandler ) diff --git a/pyrogram/client/handlers/__init__.py b/pyrogram/client/handlers/__init__.py index d06b2a76..ff1ead7a 100644 --- a/pyrogram/client/handlers/__init__.py +++ b/pyrogram/client/handlers/__init__.py @@ -17,7 +17,8 @@ # along with Pyrogram. If not, see . from .callback_query_handler import CallbackQueryHandler +from .deleted_messages_handler import DeletedMessagesHandler from .disconnect_handler import DisconnectHandler from .message_handler import MessageHandler -from .deleted_messages_handler import DeletedMessagesHandler from .raw_update_handler import RawUpdateHandler +from .user_status_handler import UserStatusHandler diff --git a/pyrogram/client/methods/decorators/__init__.py b/pyrogram/client/methods/decorators/__init__.py index f84a922c..6cf9940a 100644 --- a/pyrogram/client/methods/decorators/__init__.py +++ b/pyrogram/client/methods/decorators/__init__.py @@ -17,11 +17,19 @@ # along with Pyrogram. If not, see . from .on_callback_query import OnCallbackQuery +from .on_deleted_messages import OnDeletedMessages from .on_disconnect import OnDisconnect from .on_message import OnMessage -from .on_deleted_messages import OnDeletedMessages from .on_raw_update import OnRawUpdate +from .on_user_status import OnUserStatus -class Decorators(OnMessage, OnDeletedMessages, OnCallbackQuery, OnRawUpdate, OnDisconnect): +class Decorators( + OnMessage, + OnDeletedMessages, + OnCallbackQuery, + OnRawUpdate, + OnDisconnect, + OnUserStatus +): pass From 5b173768013a5ee7d50fa3cfd955bdad913eec16 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 15 Oct 2018 10:18:22 +0200 Subject: [PATCH 305/530] Enable dispatching of user status updates --- pyrogram/client/dispatcher/dispatcher.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/dispatcher/dispatcher.py b/pyrogram/client/dispatcher/dispatcher.py index 5506cbdd..a0c5e365 100644 --- a/pyrogram/client/dispatcher/dispatcher.py +++ b/pyrogram/client/dispatcher/dispatcher.py @@ -25,7 +25,7 @@ from threading import Thread import pyrogram from pyrogram.api import types from ..ext import utils -from ..handlers import RawUpdateHandler, CallbackQueryHandler, MessageHandler, DeletedMessagesHandler +from ..handlers import RawUpdateHandler, CallbackQueryHandler, MessageHandler, DeletedMessagesHandler, UserStatusHandler log = logging.getLogger(__name__) @@ -108,6 +108,8 @@ class Dispatcher: callback_query = update.callback_query + user_status = update.user_status + if message and isinstance(handler, MessageHandler): if not handler.check(message): continue @@ -123,6 +125,11 @@ class Dispatcher: continue args = (self.client, callback_query) + elif user_status and isinstance(handler, UserStatusHandler): + if not handler.check(user_status): + continue + + args = (self.client, user_status) else: continue @@ -209,6 +216,14 @@ class Dispatcher: ) ) ) + elif isinstance(update, types.UpdateUserStatus): + self.dispatch( + pyrogram.Update( + user_status=utils.parse_user_status( + update.status, update.user_id + ) + ) + ) else: continue except Exception as e: From 93018a7f6cea7ef099cb0d1ee3957b5cf3c1c458 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 15 Oct 2018 11:03:07 +0200 Subject: [PATCH 306/530] Add set_profile_photo method --- pyrogram/client/methods/users/__init__.py | 2 + .../client/methods/users/set_profile_photo.py | 47 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 pyrogram/client/methods/users/set_profile_photo.py diff --git a/pyrogram/client/methods/users/__init__.py b/pyrogram/client/methods/users/__init__.py index f7c32b3b..9813b744 100644 --- a/pyrogram/client/methods/users/__init__.py +++ b/pyrogram/client/methods/users/__init__.py @@ -20,10 +20,12 @@ from .delete_profile_photos import DeleteProfilePhotos from .get_me import GetMe from .get_user_profile_photos import GetUserProfilePhotos from .get_users import GetUsers +from .set_profile_photo import SetProfilePhoto class Users( GetUserProfilePhotos, + SetProfilePhoto, DeleteProfilePhotos, GetUsers, GetMe diff --git a/pyrogram/client/methods/users/set_profile_photo.py b/pyrogram/client/methods/users/set_profile_photo.py new file mode 100644 index 00000000..8ed9dc7b --- /dev/null +++ b/pyrogram/client/methods/users/set_profile_photo.py @@ -0,0 +1,47 @@ +# Pyrogram - Telegram MTProto API Client Library for Python +# Copyright (C) 2017-2018 Dan Tès +# +# This file is part of Pyrogram. +# +# Pyrogram is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pyrogram is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with Pyrogram. If not, see . + +from pyrogram.api import functions +from ...ext import BaseClient + + +class SetProfilePhoto(BaseClient): + def set_profile_photo(self, photo: str): + """Use this method to set a new profile photo. + + This method only works for Users. Bots profile photos must be set using BotFather. + + Args: + photo (``str``): + Profile photo to set. + Pass a file path as string to upload a new photo that exists on your local machine. + + Returns: + True on success. + + Raises: + :class:`Error ` + """ + + return bool( + self.send( + functions.photos.UploadProfilePhoto( + self.save_file(photo) + ) + ) + ) From 8fc5b8a545df80cf1097f676282e51bbee4d15ee Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 11:43:54 +0200 Subject: [PATCH 307/530] Rename set_profile_photo to set_user_profile_photo --- pyrogram/client/methods/users/__init__.py | 4 ++-- .../{set_profile_photo.py => set_user_profile_photo.py} | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) rename pyrogram/client/methods/users/{set_profile_photo.py => set_user_profile_photo.py} (84%) diff --git a/pyrogram/client/methods/users/__init__.py b/pyrogram/client/methods/users/__init__.py index 9813b744..ed6f1a83 100644 --- a/pyrogram/client/methods/users/__init__.py +++ b/pyrogram/client/methods/users/__init__.py @@ -20,12 +20,12 @@ from .delete_profile_photos import DeleteProfilePhotos from .get_me import GetMe from .get_user_profile_photos import GetUserProfilePhotos from .get_users import GetUsers -from .set_profile_photo import SetProfilePhoto +from .set_user_profile_photo import SetUserProfilePhoto class Users( GetUserProfilePhotos, - SetProfilePhoto, + SetUserProfilePhoto, DeleteProfilePhotos, GetUsers, GetMe diff --git a/pyrogram/client/methods/users/set_profile_photo.py b/pyrogram/client/methods/users/set_user_profile_photo.py similarity index 84% rename from pyrogram/client/methods/users/set_profile_photo.py rename to pyrogram/client/methods/users/set_user_profile_photo.py index 8ed9dc7b..5167348f 100644 --- a/pyrogram/client/methods/users/set_profile_photo.py +++ b/pyrogram/client/methods/users/set_user_profile_photo.py @@ -20,11 +20,12 @@ from pyrogram.api import functions from ...ext import BaseClient -class SetProfilePhoto(BaseClient): - def set_profile_photo(self, photo: str): - """Use this method to set a new profile photo. +class SetUserProfilePhoto(BaseClient): + def set_user_profile_photo(self, photo: str): + """Use this method to set a new user profile photo. - This method only works for Users. Bots profile photos must be set using BotFather. + This method only works for Users. + Bots profile photos must be set using BotFather. Args: photo (``str``): From 29201674ef03cc3c2bdab28d1e34171e5d5cca4f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 11:45:20 +0200 Subject: [PATCH 308/530] Rename delete_profile_photos to delete_user_profile_photos For consistency with other method names --- pyrogram/client/methods/users/__init__.py | 4 ++-- ...delete_profile_photos.py => delete_user_profile_photos.py} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename pyrogram/client/methods/users/{delete_profile_photos.py => delete_user_profile_photos.py} (94%) diff --git a/pyrogram/client/methods/users/__init__.py b/pyrogram/client/methods/users/__init__.py index ed6f1a83..11f51d19 100644 --- a/pyrogram/client/methods/users/__init__.py +++ b/pyrogram/client/methods/users/__init__.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . -from .delete_profile_photos import DeleteProfilePhotos +from .delete_user_profile_photos import DeleteUserProfilePhotos from .get_me import GetMe from .get_user_profile_photos import GetUserProfilePhotos from .get_users import GetUsers @@ -26,7 +26,7 @@ from .set_user_profile_photo import SetUserProfilePhoto class Users( GetUserProfilePhotos, SetUserProfilePhoto, - DeleteProfilePhotos, + DeleteUserProfilePhotos, GetUsers, GetMe ): diff --git a/pyrogram/client/methods/users/delete_profile_photos.py b/pyrogram/client/methods/users/delete_user_profile_photos.py similarity index 94% rename from pyrogram/client/methods/users/delete_profile_photos.py rename to pyrogram/client/methods/users/delete_user_profile_photos.py index 47a6682a..58c2deb4 100644 --- a/pyrogram/client/methods/users/delete_profile_photos.py +++ b/pyrogram/client/methods/users/delete_user_profile_photos.py @@ -23,8 +23,8 @@ from pyrogram.api import functions, types from ...ext import BaseClient -class DeleteProfilePhotos(BaseClient): - def delete_profile_photos(self, id: str or list): +class DeleteUserProfilePhotos(BaseClient): + def delete_user_profile_photos(self, id: str or list): """Use this method to delete your own profile photos Args: From 22998af784a7d2cb6db0b0a423d492488e529da1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 11:45:39 +0200 Subject: [PATCH 309/530] Fix docstrings --- pyrogram/client/methods/users/set_user_profile_photo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/methods/users/set_user_profile_photo.py b/pyrogram/client/methods/users/set_user_profile_photo.py index 5167348f..b107a968 100644 --- a/pyrogram/client/methods/users/set_user_profile_photo.py +++ b/pyrogram/client/methods/users/set_user_profile_photo.py @@ -22,7 +22,7 @@ from ...ext import BaseClient class SetUserProfilePhoto(BaseClient): def set_user_profile_photo(self, photo: str): - """Use this method to set a new user profile photo. + """Use this method to set a new profile photo. This method only works for Users. Bots profile photos must be set using BotFather. From 1f5f339f6f9e04f75309a3fcd99f8f0b08380598 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 11:49:12 +0200 Subject: [PATCH 310/530] Reflect changes to docs --- docs/source/pyrogram/Client.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/pyrogram/Client.rst b/docs/source/pyrogram/Client.rst index 1cd1a072..72844987 100644 --- a/docs/source/pyrogram/Client.rst +++ b/docs/source/pyrogram/Client.rst @@ -96,7 +96,8 @@ Users get_me get_users get_user_profile_photos - delete_profile_photos + set_user_profile_photos + delete_userprofile_photos Contacts -------- From 841141077f663c393186e6f18a21a96ff0e34e44 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 11:53:05 +0200 Subject: [PATCH 311/530] Add better examples to Filters.command --- pyrogram/client/filters/filters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index 93322e1d..e80e230e 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -181,8 +181,8 @@ class Filters: field of the :class:`Message `. prefix (``str`` | ``list``, *optional*): - A prefix or a list of prefixes as string. Defaults to "/" (slash). - Examples: /start, .help, !settings. + A prefix or a list of prefixes as string the filter should look for. + Defaults to "/" (slash). Examples: ".", "!", ["/", "!", "."]. separator (``str``, *optional*): The command arguments separator. Defaults to " " (white space). From b34aca0c6f568212d91588306b630cb512eb2317 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 12:15:31 +0200 Subject: [PATCH 312/530] Fix wrong method names in docs --- docs/source/pyrogram/Client.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/pyrogram/Client.rst b/docs/source/pyrogram/Client.rst index 72844987..29bee7ea 100644 --- a/docs/source/pyrogram/Client.rst +++ b/docs/source/pyrogram/Client.rst @@ -96,8 +96,8 @@ Users get_me get_users get_user_profile_photos - set_user_profile_photos - delete_userprofile_photos + set_user_profile_photo + delete_user_profile_photos Contacts -------- From a163c2b4e969eb2ac5075d726f57474ec7a29390 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 12:16:40 +0200 Subject: [PATCH 313/530] Add UserStatusHandler in docs --- docs/source/pyrogram/Handlers.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/source/pyrogram/Handlers.rst b/docs/source/pyrogram/Handlers.rst index 9f69c2c9..3b748e9d 100644 --- a/docs/source/pyrogram/Handlers.rst +++ b/docs/source/pyrogram/Handlers.rst @@ -9,6 +9,7 @@ Handlers MessageHandler DeletedMessagesHandler CallbackQueryHandler + UserStatusHandler DisconnectHandler RawUpdateHandler @@ -21,6 +22,9 @@ Handlers .. autoclass:: CallbackQueryHandler :members: +.. autoclass:: UserStatusHandler + :members: + .. autoclass:: DisconnectHandler :members: From 2ae1d522f39317add11ac18d15d83adfa82e362a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 12:17:39 +0200 Subject: [PATCH 314/530] Add on_user_status decorator to docs --- docs/source/pyrogram/Client.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/source/pyrogram/Client.rst b/docs/source/pyrogram/Client.rst index 29bee7ea..50e213ea 100644 --- a/docs/source/pyrogram/Client.rst +++ b/docs/source/pyrogram/Client.rst @@ -30,6 +30,7 @@ Decorators on_message on_callback_query on_deleted_messages + on_user_status on_disconnect on_raw_update From c8604e8e2c59f542625edcf645563297f4096d5b Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 12:58:11 +0200 Subject: [PATCH 315/530] Update on_user_status decorator --- .../client/methods/decorators/on_user_status.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/methods/decorators/on_user_status.py b/pyrogram/client/methods/decorators/on_user_status.py index 81367c3e..b49e63a8 100644 --- a/pyrogram/client/methods/decorators/on_user_status.py +++ b/pyrogram/client/methods/decorators/on_user_status.py @@ -17,11 +17,12 @@ # along with Pyrogram. If not, see . import pyrogram +from pyrogram.client.filters.filter import Filter from ...ext import BaseClient class OnUserStatus(BaseClient): - def on_user_status(self, filters=None, group: int = 0): + def on_user_status(self=None, filters=None, group: int = 0): """Use this decorator to automatically register a function for handling user status updates. This does the same thing as :meth:`add_handler` using the :class:`UserStatusHandler`. @@ -35,7 +36,14 @@ class OnUserStatus(BaseClient): """ def decorator(func): - self.add_handler(pyrogram.UserStatusHandler(func, filters), group) - return func + handler = pyrogram.UserStatusHandler(func, filters) + + if isinstance(self, Filter): + return pyrogram.UserStatusHandler(func, self), group if filters is None else filters + + if self is not None: + self.add_handler(handler, group) + + return handler, group return decorator From 9a473702602466a9cb52789c21a7d7904a316bbb Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 15:13:30 +0200 Subject: [PATCH 316/530] Update README.rst --- README.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index db2957c3..17df05c5 100644 --- a/README.rst +++ b/README.rst @@ -97,13 +97,13 @@ Copyright & License Community -

+
- Scheme Layer + Schema Layer - TgCrypto

From 41180fd22ac3cc10abd198a858e516dadd21f6a1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 16 Oct 2018 15:24:54 +0200 Subject: [PATCH 317/530] Update max caption length --- pyrogram/client/methods/messages/send_animation.py | 2 +- pyrogram/client/methods/messages/send_audio.py | 2 +- pyrogram/client/methods/messages/send_document.py | 2 +- pyrogram/client/methods/messages/send_photo.py | 2 +- pyrogram/client/methods/messages/send_video.py | 2 +- pyrogram/client/methods/messages/send_voice.py | 2 +- pyrogram/client/types/input_media/input_media_animation.py | 2 +- pyrogram/client/types/input_media/input_media_audio.py | 2 +- pyrogram/client/types/input_media/input_media_document.py | 2 +- pyrogram/client/types/input_media/input_media_photo.py | 2 +- pyrogram/client/types/input_media/input_media_video.py | 2 +- pyrogram/client/types/messages_and_media/message.py | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/pyrogram/client/methods/messages/send_animation.py b/pyrogram/client/methods/messages/send_animation.py index 30f28b30..39bfb27f 100644 --- a/pyrogram/client/methods/messages/send_animation.py +++ b/pyrogram/client/methods/messages/send_animation.py @@ -56,7 +56,7 @@ class SendAnimation(BaseClient): pass a file path as string to upload a new animation that exists on your local machine. caption (``str``, *optional*): - Animation caption, 0-200 characters. + Animation caption, 0-1024 characters. parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/methods/messages/send_audio.py b/pyrogram/client/methods/messages/send_audio.py index 3bb23afb..124f3bb3 100644 --- a/pyrogram/client/methods/messages/send_audio.py +++ b/pyrogram/client/methods/messages/send_audio.py @@ -58,7 +58,7 @@ class SendAudio(BaseClient): pass a file path as string to upload a new audio file that exists on your local machine. caption (``str``, *optional*): - Audio caption, 0-200 characters. + Audio caption, 0-1024 characters. parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/methods/messages/send_document.py b/pyrogram/client/methods/messages/send_document.py index 28d93f07..7cab15a5 100644 --- a/pyrogram/client/methods/messages/send_document.py +++ b/pyrogram/client/methods/messages/send_document.py @@ -59,7 +59,7 @@ class SendDocument(BaseClient): Thumbnails can't be reused and can be only uploaded as a new file. caption (``str``, *optional*): - Document caption, 0-200 characters. + Document caption, 0-1024 characters. parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/methods/messages/send_photo.py b/pyrogram/client/methods/messages/send_photo.py index 2d0036f2..c8a74598 100644 --- a/pyrogram/client/methods/messages/send_photo.py +++ b/pyrogram/client/methods/messages/send_photo.py @@ -52,7 +52,7 @@ class SendPhoto(BaseClient): pass a file path as string to upload a new photo that exists on your local machine. caption (``bool``, *optional*): - Photo caption, 0-200 characters. + Photo caption, 0-1024 characters. parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/methods/messages/send_video.py b/pyrogram/client/methods/messages/send_video.py index 4317d88b..d58d1851 100644 --- a/pyrogram/client/methods/messages/send_video.py +++ b/pyrogram/client/methods/messages/send_video.py @@ -57,7 +57,7 @@ class SendVideo(BaseClient): pass a file path as string to upload a new video that exists on your local machine. caption (``str``, *optional*): - Video caption, 0-200 characters. + Video caption, 0-1024 characters. parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/methods/messages/send_voice.py b/pyrogram/client/methods/messages/send_voice.py index 5b577672..a3a35b8f 100644 --- a/pyrogram/client/methods/messages/send_voice.py +++ b/pyrogram/client/methods/messages/send_voice.py @@ -53,7 +53,7 @@ class SendVoice(BaseClient): pass a file path as string to upload a new audio that exists on your local machine. caption (``str``, *optional*): - Voice message caption, 0-200 characters. + Voice message caption, 0-1024 characters. parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/types/input_media/input_media_animation.py b/pyrogram/client/types/input_media/input_media_animation.py index 14f8c2de..0e7b2433 100644 --- a/pyrogram/client/types/input_media/input_media_animation.py +++ b/pyrogram/client/types/input_media/input_media_animation.py @@ -35,7 +35,7 @@ class InputMediaAnimation(InputMedia): Thumbnails can't be reused and can be only uploaded as a new file. caption (``str``, *optional*): - Caption of the animation to be sent, 0-200 characters + Caption of the animation to be sent, 0-1024 characters parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/types/input_media/input_media_audio.py b/pyrogram/client/types/input_media/input_media_audio.py index 83979b4a..455c2292 100644 --- a/pyrogram/client/types/input_media/input_media_audio.py +++ b/pyrogram/client/types/input_media/input_media_audio.py @@ -36,7 +36,7 @@ class InputMediaAudio(InputMedia): Thumbnails can't be reused and can be only uploaded as a new file. caption (``str``, *optional*): - Caption of the audio to be sent, 0-200 characters + Caption of the audio to be sent, 0-1024 characters parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/types/input_media/input_media_document.py b/pyrogram/client/types/input_media/input_media_document.py index 07965534..08fcae5b 100644 --- a/pyrogram/client/types/input_media/input_media_document.py +++ b/pyrogram/client/types/input_media/input_media_document.py @@ -35,7 +35,7 @@ class InputMediaDocument(InputMedia): Thumbnails can't be reused and can be only uploaded as a new file. caption (``str``, *optional*): - Caption of the document to be sent, 0-200 characters + Caption of the document to be sent, 0-1024 characters parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/types/input_media/input_media_photo.py b/pyrogram/client/types/input_media/input_media_photo.py index d58f75a6..c8cdccb8 100644 --- a/pyrogram/client/types/input_media/input_media_photo.py +++ b/pyrogram/client/types/input_media/input_media_photo.py @@ -31,7 +31,7 @@ class InputMediaPhoto(InputMedia): Sending photo by a URL is currently unsupported. caption (``str``, *optional*): - Caption of the photo to be sent, 0-200 characters + Caption of the photo to be sent, 0-1024 characters parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/types/input_media/input_media_video.py b/pyrogram/client/types/input_media/input_media_video.py index 54ce5e5e..955cf633 100644 --- a/pyrogram/client/types/input_media/input_media_video.py +++ b/pyrogram/client/types/input_media/input_media_video.py @@ -37,7 +37,7 @@ class InputMediaVideo(InputMedia): Thumbnails can't be reused and can be only uploaded as a new file. caption (``str``, *optional*): - Caption of the video to be sent, 0-200 characters + Caption of the video to be sent, 0-1024 characters parse_mode (``str``, *optional*): Use :obj:`MARKDOWN ` or :obj:`HTML ` diff --git a/pyrogram/client/types/messages_and_media/message.py b/pyrogram/client/types/messages_and_media/message.py index 3065cf9f..ac8721e8 100644 --- a/pyrogram/client/types/messages_and_media/message.py +++ b/pyrogram/client/types/messages_and_media/message.py @@ -105,7 +105,7 @@ class Message(Object): Message is a video note, information about the video message. caption (``str``, *optional*): - Caption for the audio, document, photo, video or voice, 0-200 characters. + Caption for the audio, document, photo, video or voice, 0-1024 characters. If the message contains caption entities (bold, italic, ...) you can access *caption.markdown* or *caption.html* to get the marked up caption text. In case there is no caption entity, the fields will contain the same text as *caption*. From 5d4e4a484212fbae6680af45c3c6efd4e4d269b5 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 17 Oct 2018 01:02:33 +0200 Subject: [PATCH 318/530] Add "fast" keyword as extra requirement To be used instead of "tgcrypto" --- setup.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 78d01fa8..8d1af092 100644 --- a/setup.py +++ b/setup.py @@ -173,7 +173,10 @@ setup( packages=find_packages(exclude=["compiler*"]), zip_safe=False, install_requires=read("requirements.txt"), - extras_require={"tgcrypto": ["tgcrypto==1.1.1"]}, + extras_require={ + "tgcrypto": ["tgcrypto==1.1.1"], # TODO: Remove soon + "fast": ["tgcrypto==1.1.1"], + }, cmdclass={ "clean": Clean, "generate": Generate From d580a78787a1ef06233d9f1f0b4c63dd1ad411cc Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 17 Oct 2018 01:07:33 +0200 Subject: [PATCH 319/530] Update Installation page Hint about asyncio --- docs/source/start/Installation.rst | 48 +++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/docs/source/start/Installation.rst b/docs/source/start/Installation.rst index 41a7ccac..2a738b57 100644 --- a/docs/source/start/Installation.rst +++ b/docs/source/start/Installation.rst @@ -14,17 +14,17 @@ by following the instructions at https://pip.pypa.io/en/latest/installing/. Install Pyrogram ---------------- -- The easiest way to install and upgrade Pyrogram is by using **pip**: +- The easiest way to install and upgrade Pyrogram to its latest stable version is by using **pip**: - .. code-block:: bash + .. code-block:: text $ pip3 install --upgrade pyrogram -- or, with TgCrypto_ (recommended): +- or, with TgCrypto_ as extra requirement (recommended): - .. code-block:: bash + .. code-block:: text - $ pip3 install --upgrade pyrogram[tgcrypto] + $ pip3 install --upgrade pyrogram[fast] Bleeding Edge ------------- @@ -32,21 +32,53 @@ Bleeding Edge If you want the latest development version of Pyrogram, you can install it straight from the develop_ branch using this command (you might need to install **git** first): -.. code-block:: bash +.. code-block:: text $ pip3 install --upgrade git+https://github.com/pyrogram/pyrogram.git +Asynchronous +------------ + +Pyrogram heavily depends on IO-bound network code (it's a cloud-based messaging client library after all), and here's +where asyncio shines the most by providing extra performance while running on a single OS-level thread only. + +**A fully asynchronous variant of Pyrogram is therefore available** (Python 3.5+ required). +Use this command to install: + +.. code-block:: text + + $ pip3 install --upgrade git+https://github.com/pyrogram/pyrogram.git@asyncio + + +Pyrogram API remains the same and features are kept up to date from the non-async, default develop branch. + + +.. note:: + + The idea to turn Pyrogram fully asynchronous is still under consideration, but is wise to expect that in future this + would be the one and only way to work with Pyrogram. + +.. raw:: html + + + +.. centered:: Subscribe to `@Pyrogram `_ for news and announcements + Verifying --------- To verify that Pyrogram is correctly installed, open a Python shell and import it. If no error shows up you are good to go. -.. code-block:: bash +.. code-block:: python >>> import pyrogram >>> pyrogram.__version__ '0.8.0' .. _TgCrypto: https://docs.pyrogram.ml/resources/TgCrypto -.. _develop: http://github.com/pyrogram/pyrogram \ No newline at end of file +.. _develop: http://github.com/pyrogram/pyrogram From a315c30336814c2cb9b3bcc2a2e8342f48410391 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 17 Oct 2018 20:37:53 +0200 Subject: [PATCH 320/530] Optimize dispatcher.py code --- pyrogram/client/dispatcher/dispatcher.py | 159 +++++++++-------------- 1 file changed, 61 insertions(+), 98 deletions(-) diff --git a/pyrogram/client/dispatcher/dispatcher.py b/pyrogram/client/dispatcher/dispatcher.py index a0c5e365..4366b56d 100644 --- a/pyrogram/client/dispatcher/dispatcher.py +++ b/pyrogram/client/dispatcher/dispatcher.py @@ -25,7 +25,7 @@ from threading import Thread import pyrogram from pyrogram.api import types from ..ext import utils -from ..handlers import RawUpdateHandler, CallbackQueryHandler, MessageHandler, DeletedMessagesHandler, UserStatusHandler +from ..handlers import CallbackQueryHandler, MessageHandler, DeletedMessagesHandler, UserStatusHandler, RawUpdateHandler log = logging.getLogger(__name__) @@ -88,56 +88,6 @@ class Dispatcher: "Handler was not removed.".format(group)) self.groups[group].remove(handler) - def dispatch(self, update, users: dict = None, chats: dict = None, is_raw: bool = False): - for group in self.groups.values(): - try: - for handler in group: - if is_raw: - if not isinstance(handler, RawUpdateHandler): - continue - - args = (self.client, update, users, chats) - else: - message = (update.message - or update.channel_post - or update.edited_message - or update.edited_channel_post) - - deleted_messages = (update.deleted_channel_posts - or update.deleted_messages) - - callback_query = update.callback_query - - user_status = update.user_status - - if message and isinstance(handler, MessageHandler): - if not handler.check(message): - continue - - args = (self.client, message) - elif deleted_messages and isinstance(handler, DeletedMessagesHandler): - if not handler.check(deleted_messages): - continue - - args = (self.client, deleted_messages) - elif callback_query and isinstance(handler, CallbackQueryHandler): - if not handler.check(callback_query): - continue - - args = (self.client, callback_query) - elif user_status and isinstance(handler, UserStatusHandler): - if not handler.check(user_status): - continue - - args = (self.client, user_status) - else: - continue - - handler.callback(*args) - break - except Exception as e: - log.error(e, exc_info=True) - def update_worker(self): name = threading.current_thread().name log.debug("{} started".format(name)) @@ -153,80 +103,93 @@ class Dispatcher: chats = {i.id: i for i in update[2]} update = update[0] - self.dispatch(update, users=users, chats=chats, is_raw=True) + self.dispatch_raw(update, users=users, chats=chats, handler_class=RawUpdateHandler) if isinstance(update, Dispatcher.MESSAGE_UPDATES): if isinstance(update.message, types.MessageEmpty): continue - message = utils.parse_messages( - self.client, - update.message, - users, - chats - ) + message = utils.parse_messages(self.client, update.message, users, chats) + is_edited = isinstance(update, Dispatcher.EDIT_MESSAGE_UPDATES) + is_channel = message.chat.type == "channel" - is_edited_message = isinstance(update, Dispatcher.EDIT_MESSAGE_UPDATES) - - self.dispatch( - pyrogram.Update( - message=((message if message.chat.type != "channel" - else None) if not is_edited_message - else None), - edited_message=((message if message.chat.type != "channel" - else None) if is_edited_message - else None), - channel_post=((message if message.chat.type == "channel" - else None) if not is_edited_message - else None), - edited_channel_post=((message if message.chat.type == "channel" - else None) if is_edited_message - else None) - ) + update = pyrogram.Update( + message=message if not is_channel and not is_edited else None, + edited_message=message if not is_channel and is_edited else None, + channel_post=message if is_channel and not is_edited else None, + edited_channel_post=message if is_channel and is_edited else None ) elif isinstance(update, Dispatcher.DELETE_MESSAGE_UPDATES): - is_channel = hasattr(update, 'channel_id') - + is_channel = hasattr(update, "channel_id") messages = utils.parse_deleted_messages( update.messages, - (update.channel_id if is_channel else None) + update.channel_id if is_channel else None ) - self.dispatch( - pyrogram.Update( - deleted_messages=(messages if not is_channel else None), - deleted_channel_posts=(messages if is_channel else None) - ) + update = pyrogram.Update( + deleted_messages=messages if not is_channel else None, + deleted_channel_posts=messages if is_channel else None ) elif isinstance(update, types.UpdateBotCallbackQuery): - self.dispatch( - pyrogram.Update( - callback_query=utils.parse_callback_query( - self.client, update, users - ) + update = pyrogram.Update( + callback_query=utils.parse_callback_query( + self.client, update, users ) ) elif isinstance(update, types.UpdateInlineBotCallbackQuery): - self.dispatch( - pyrogram.Update( - callback_query=utils.parse_inline_callback_query( - self.client, update, users - ) + update = pyrogram.Update( + callback_query=utils.parse_inline_callback_query( + self.client, update, users ) ) elif isinstance(update, types.UpdateUserStatus): - self.dispatch( - pyrogram.Update( - user_status=utils.parse_user_status( - update.status, update.user_id - ) + update = pyrogram.Update( + user_status=utils.parse_user_status( + update.status, update.user_id ) ) else: continue + + self.dispatch(update) except Exception as e: log.error(e, exc_info=True) log.debug("{} stopped".format(name)) + + def dispatch_raw(self, update, users: dict, chats: dict, handler_class): + for group in self.groups.values(): + for handler in group: + if isinstance(handler, handler_class): + try: + handler.callback(self.client, update, users, chats) + except Exception as e: + log.error(e, exc_info=True) + + # noinspection PyShadowingBuiltins + def dispatch(self, update): + message = update.message or update.channel_post or update.edited_message or update.edited_channel_post + deleted_messages = update.deleted_channel_posts or update.deleted_messages + callback_query = update.callback_query + user_status = update.user_status + + update = message or deleted_messages or callback_query or user_status + + type = ( + MessageHandler if message + else DeletedMessagesHandler if deleted_messages + else CallbackQueryHandler if callback_query + else UserStatusHandler if user_status + else None + ) + + for group in self.groups.values(): + for handler in group: + if isinstance(handler, type): + if handler.check(update): + try: + handler.callback(self.client, update) + except Exception as e: + log.error(e, exc_info=True) From 426cdbbcb86f983e2ed74f60fea73cf91821b325 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 17 Oct 2018 20:59:33 +0200 Subject: [PATCH 321/530] Don't make use of Update objects when dispatching updates The Update type is used nowhere, adds costly abstraction and makes the code uglier. If I ever need it again (unlikely) I can just revert this. --- pyrogram/client/dispatcher/dispatcher.py | 60 ++++-------------------- 1 file changed, 10 insertions(+), 50 deletions(-) diff --git a/pyrogram/client/dispatcher/dispatcher.py b/pyrogram/client/dispatcher/dispatcher.py index 4366b56d..53448252 100644 --- a/pyrogram/client/dispatcher/dispatcher.py +++ b/pyrogram/client/dispatcher/dispatcher.py @@ -22,7 +22,6 @@ from collections import OrderedDict from queue import Queue from threading import Thread -import pyrogram from pyrogram.api import types from ..ext import utils from ..handlers import CallbackQueryHandler, MessageHandler, DeletedMessagesHandler, UserStatusHandler, RawUpdateHandler @@ -110,50 +109,26 @@ class Dispatcher: continue message = utils.parse_messages(self.client, update.message, users, chats) - is_edited = isinstance(update, Dispatcher.EDIT_MESSAGE_UPDATES) - is_channel = message.chat.type == "channel" - - update = pyrogram.Update( - message=message if not is_channel and not is_edited else None, - edited_message=message if not is_channel and is_edited else None, - channel_post=message if is_channel and not is_edited else None, - edited_channel_post=message if is_channel and is_edited else None - ) + update = message, MessageHandler elif isinstance(update, Dispatcher.DELETE_MESSAGE_UPDATES): - is_channel = hasattr(update, "channel_id") - messages = utils.parse_deleted_messages( + deleted_messages = utils.parse_deleted_messages( update.messages, - update.channel_id if is_channel else None + update.channel_id if hasattr(update, "channel_id") else None ) - update = pyrogram.Update( - deleted_messages=messages if not is_channel else None, - deleted_channel_posts=messages if is_channel else None - ) + update = deleted_messages, DeletedMessagesHandler elif isinstance(update, types.UpdateBotCallbackQuery): - update = pyrogram.Update( - callback_query=utils.parse_callback_query( - self.client, update, users - ) - ) + update = utils.parse_callback_query(self.client, update, users), CallbackQueryHandler elif isinstance(update, types.UpdateInlineBotCallbackQuery): - update = pyrogram.Update( - callback_query=utils.parse_inline_callback_query( - self.client, update, users - ) - ) + update = utils.parse_inline_callback_query(self.client, update, users), CallbackQueryHandler elif isinstance(update, types.UpdateUserStatus): - update = pyrogram.Update( - user_status=utils.parse_user_status( - update.status, update.user_id - ) - ) + update = utils.parse_user_status(update.status, update.user_id), UserStatusHandler else: continue - self.dispatch(update) + self.dispatch(*update) except Exception as e: log.error(e, exc_info=True) @@ -169,25 +144,10 @@ class Dispatcher: log.error(e, exc_info=True) # noinspection PyShadowingBuiltins - def dispatch(self, update): - message = update.message or update.channel_post or update.edited_message or update.edited_channel_post - deleted_messages = update.deleted_channel_posts or update.deleted_messages - callback_query = update.callback_query - user_status = update.user_status - - update = message or deleted_messages or callback_query or user_status - - type = ( - MessageHandler if message - else DeletedMessagesHandler if deleted_messages - else CallbackQueryHandler if callback_query - else UserStatusHandler if user_status - else None - ) - + def dispatch(self, update, handler_class): for group in self.groups.values(): for handler in group: - if isinstance(handler, type): + if isinstance(handler, handler_class): if handler.check(update): try: handler.callback(self.client, update) From 38ff950d0160e93f710e9c0886f0feb706eb9a00 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 17 Oct 2018 21:00:14 +0200 Subject: [PATCH 322/530] Remove useless #noinspection --- pyrogram/client/dispatcher/dispatcher.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyrogram/client/dispatcher/dispatcher.py b/pyrogram/client/dispatcher/dispatcher.py index 53448252..2989d9fa 100644 --- a/pyrogram/client/dispatcher/dispatcher.py +++ b/pyrogram/client/dispatcher/dispatcher.py @@ -143,7 +143,6 @@ class Dispatcher: except Exception as e: log.error(e, exc_info=True) - # noinspection PyShadowingBuiltins def dispatch(self, update, handler_class): for group in self.groups.values(): for handler in group: From e88972a8f6df38d1277652e3c8a01bdcf35ba97a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 18 Oct 2018 11:10:37 +0200 Subject: [PATCH 323/530] Add restriction_reason to User and Chat types. Closes #144 --- pyrogram/client/ext/utils.py | 7 +++++-- pyrogram/client/types/user_and_chats/chat.py | 7 ++++++- pyrogram/client/types/user_and_chats/user.py | 7 ++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index c7a10db9..3f689f41 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -168,6 +168,7 @@ def parse_user(user: types.User) -> pyrogram_types.User or None: phone_number=user.phone, photo=parse_chat_photo(user.photo), status=parse_user_status(user.status, is_bot=user.bot), + restriction_reason=user.restriction_reason ) if user else None @@ -187,7 +188,8 @@ def parse_user_chat(user: types.User) -> pyrogram_types.Chat: username=user.username, first_name=user.first_name, last_name=user.last_name, - photo=parse_chat_photo(user.photo) + photo=parse_chat_photo(user.photo), + restriction_reason=user.restriction_reason ) @@ -212,7 +214,8 @@ def parse_channel_chat(channel: types.Channel) -> pyrogram_types.Chat: type="supergroup" if channel.megagroup else "channel", title=channel.title, username=getattr(channel, "username", None), - photo=parse_chat_photo(getattr(channel, "photo", None)) + photo=parse_chat_photo(getattr(channel, "photo", None)), + restriction_reason=channel.restriction_reason ) diff --git a/pyrogram/client/types/user_and_chats/chat.py b/pyrogram/client/types/user_and_chats/chat.py index afed1ca4..68eaa775 100644 --- a/pyrogram/client/types/user_and_chats/chat.py +++ b/pyrogram/client/types/user_and_chats/chat.py @@ -69,6 +69,9 @@ class Chat(Object): members_count (``int``, *optional*): Chat members count, for groups and channels only. + + restriction_reason (``str``, *optional*): + The reason why this chat might be unavailable to some users. """ ID = 0xb0700002 @@ -88,7 +91,8 @@ class Chat(Object): pinned_message=None, sticker_set_name: str = None, can_set_sticker_set: bool = None, - members_count: int = None + members_count: int = None, + restriction_reason: str = None ): self.id = id self.type = type @@ -104,3 +108,4 @@ class Chat(Object): self.sticker_set_name = sticker_set_name self.can_set_sticker_set = can_set_sticker_set self.members_count = members_count + self.restriction_reason = restriction_reason diff --git a/pyrogram/client/types/user_and_chats/user.py b/pyrogram/client/types/user_and_chats/user.py index 9c7eec1f..e0eb25cc 100644 --- a/pyrogram/client/types/user_and_chats/user.py +++ b/pyrogram/client/types/user_and_chats/user.py @@ -61,6 +61,9 @@ class User(Object): photo (:obj:`ChatPhoto `, *optional*): User's or bot's current profile photo. Suitable for downloads only. + + restriction_reason (``str``, *optional*): + The reason why this bot might be unavailable for some users. """ ID = 0xb0700001 @@ -79,7 +82,8 @@ class User(Object): username: str = None, language_code: str = None, phone_number: str = None, - photo=None + photo=None, + restriction_reason: str = None ): self.id = id self.is_self = is_self @@ -94,3 +98,4 @@ class User(Object): self.language_code = language_code self.phone_number = phone_number self.photo = photo + self.restriction_reason = restriction_reason From ae06635d887c7d3afdb8efd62e7efdb243fc8d51 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 18 Oct 2018 11:47:04 +0200 Subject: [PATCH 324/530] Update Plugins.rst --- docs/source/resources/Plugins.rst | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/source/resources/Plugins.rst b/docs/source/resources/Plugins.rst index d490b37b..ec0b322e 100644 --- a/docs/source/resources/Plugins.rst +++ b/docs/source/resources/Plugins.rst @@ -1,7 +1,7 @@ Plugins ======= -Pyrogram embeds an **automatic** and lightweight plugin system that is meant to greatly simplify the organization of +Pyrogram embeds an **automatic** and lightweight plugin system that is meant to further simplify the organization of large projects and to provide a way for creating pluggable components that can be **easily shared** across different Pyrogram applications with **minimal boilerplate code**. @@ -104,13 +104,14 @@ handlers inside. Client("my_account").run() The first important thing to note is the ``plugins`` folder, whose name is default and can be changed easily by setting -the ``plugins_dir`` parameter when creating a :obj:`Client `; you can put any python file in the -plugins folder and each file can contain any decorated function (handlers). Your Pyrogram Client instance (in the +the ``plugins_dir`` parameter when creating a :obj:`Client `; you can put *any python file* in the +plugins folder and each file can contain *any decorated function (handlers)*. Your Pyrogram Client instance (in the ``main.py`` file) will **automatically** scan the folder upon creation to search for valid handlers and register them for you. -Then you'll notice you can now use decorators. That's right, you can apply the usual decorators to your callback -functions in a static way, i.e. **without having the Client instance around**: simply use ``@Client`` (Client class) -instead of the usual ``@app`` (Client instance) namespace and things will work just the same. +Then you'll notice you can now use decorators, with only one limitation: within a single plugin file you must use +different names for each decorated function. That's right, you can apply the usual decorators to your callback functions +in a static way, i.e. **without having the Client instance around**: simply use ``@Client`` (Client class) instead of +the usual ``@app`` (Client instance) namespace and things will work just the same. The ``main.py`` script is now at its bare minimum and cleanest state. From 89362ef684bfc5f4673c652ba14ddaf31f3b2edf Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 18 Oct 2018 11:48:55 +0200 Subject: [PATCH 325/530] Tiny fix to reflect other docstrings --- pyrogram/client/types/user_and_chats/user.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/types/user_and_chats/user.py b/pyrogram/client/types/user_and_chats/user.py index e0eb25cc..fc267b07 100644 --- a/pyrogram/client/types/user_and_chats/user.py +++ b/pyrogram/client/types/user_and_chats/user.py @@ -63,7 +63,7 @@ class User(Object): User's or bot's current profile photo. Suitable for downloads only. restriction_reason (``str``, *optional*): - The reason why this bot might be unavailable for some users. + The reason why this bot might be unavailable to some users. """ ID = 0xb0700001 From 077e7c00d560caea0c0bdbbdbd5c5b529bcbed13 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 18 Oct 2018 13:04:57 +0200 Subject: [PATCH 326/530] Rename Plugins.rst to SmartPlugins.rst --- docs/source/index.rst | 2 +- .../{Plugins.rst => SmartPlugins.rst} | 39 ++++++++++--------- 2 files changed, 21 insertions(+), 20 deletions(-) rename docs/source/resources/{Plugins.rst => SmartPlugins.rst} (64%) diff --git a/docs/source/index.rst b/docs/source/index.rst index 6210ff05..c6ff71b8 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -84,7 +84,7 @@ To get started, press the Next button. resources/UpdateHandling resources/UsingFilters - resources/Plugins + resources/SmartPlugins resources/AutoAuthorization resources/CustomizeSessions resources/TgCrypto diff --git a/docs/source/resources/Plugins.rst b/docs/source/resources/SmartPlugins.rst similarity index 64% rename from docs/source/resources/Plugins.rst rename to docs/source/resources/SmartPlugins.rst index ec0b322e..3922a102 100644 --- a/docs/source/resources/Plugins.rst +++ b/docs/source/resources/SmartPlugins.rst @@ -1,15 +1,15 @@ -Plugins -======= +Smart Plugins +============= -Pyrogram embeds an **automatic** and lightweight plugin system that is meant to further simplify the organization of -large projects and to provide a way for creating pluggable components that can be **easily shared** across different +Pyrogram embeds a **smart** (automatic) and lightweight plugin system that is meant to further simplify the organization +of large projects and to provide a way for creating pluggable components that can be **easily shared** across different Pyrogram applications with **minimal boilerplate code**. Introduction ------------ -Prior to the plugin system, pluggable handlers were already possible. For instance, if you wanted to modularize your -applications, you had to do something like this... +Prior to the Smart Plugin system, pluggable handlers were already possible. For example, if you wanted to modularize +your applications, you had to do something like this... .. note:: This is an example application that replies in private chats with two messages: one containing the same text message you sent and the other containing the reversed text message (e.g.: "pyrogram" -> "pyrogram" and @@ -61,13 +61,15 @@ manually ``import``, manually :meth:`add_handler ` :obj:`MessageHandler ` object because **you can't use those cool decorators** for your functions. So... What if you could? -Creating Plugins ----------------- +Using Smart Plugins +------------------- -Setting up your Pyrogram project to accommodate plugins is as easy as creating a folder and putting your files full of -handlers inside. +Setting up your Pyrogram project to accommodate Smart Plugins is as easy as creating a folder and putting your files +full of handlers inside. - .. note:: This is the same example application `as shown above <#introduction>`_, written using the plugin system. + .. note:: + + This is the same example application `as shown above <#introduction>`_, written using the Smart Plugin system. .. code-block:: text :emphasize-lines: 2, 3 @@ -104,14 +106,13 @@ handlers inside. Client("my_account").run() The first important thing to note is the ``plugins`` folder, whose name is default and can be changed easily by setting -the ``plugins_dir`` parameter when creating a :obj:`Client `; you can put *any python file* in the -plugins folder and each file can contain *any decorated function (handlers)*. Your Pyrogram Client instance (in the -``main.py`` file) will **automatically** scan the folder upon creation to search for valid handlers and register them -for you. +the ``plugins_dir`` parameter when creating a :obj:`Client `; you can put *any python file* in there +and each file can contain *any decorated function* (handlers) with only one limitation: within a single plugin file you +must use different names for each decorated function. Your Pyrogram Client instance (in the ``main.py`` file) will +**automatically** scan the folder upon creation to search for valid handlers and register them for you. -Then you'll notice you can now use decorators, with only one limitation: within a single plugin file you must use -different names for each decorated function. That's right, you can apply the usual decorators to your callback functions -in a static way, i.e. **without having the Client instance around**: simply use ``@Client`` (Client class) instead of -the usual ``@app`` (Client instance) namespace and things will work just the same. +Then you'll notice you can now use decorators. That's right, you can apply the usual decorators to your callback +functions in a static way, i.e. **without having the Client instance around**: simply use ``@Client`` (Client class) +instead of the usual ``@app`` (Client instance) namespace and things will work just the same. The ``main.py`` script is now at its bare minimum and cleanest state. From 09e0345868d3d28a46df6a0e79463199c260e8f9 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 18 Oct 2018 21:18:22 +0200 Subject: [PATCH 327/530] Small dispatcher clean ups --- pyrogram/client/dispatcher/dispatcher.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pyrogram/client/dispatcher/dispatcher.py b/pyrogram/client/dispatcher/dispatcher.py index 2989d9fa..cbfb59e4 100644 --- a/pyrogram/client/dispatcher/dispatcher.py +++ b/pyrogram/client/dispatcher/dispatcher.py @@ -50,6 +50,7 @@ class Dispatcher: def __init__(self, client, workers): self.client = client self.workers = workers + self.workers_list = [] self.updates = Queue() self.groups = OrderedDict() @@ -69,8 +70,8 @@ class Dispatcher: for _ in range(self.workers): self.updates.put(None) - for i in self.workers_list: - i.join() + for worker in self.workers_list: + worker.join() self.workers_list.clear() @@ -83,8 +84,8 @@ class Dispatcher: def remove_handler(self, handler, group: int): if group not in self.groups: - raise ValueError("Group {} does not exist. " - "Handler was not removed.".format(group)) + raise ValueError("Group {} does not exist. Handler was not removed.".format(group)) + self.groups[group].remove(handler) def update_worker(self): @@ -108,8 +109,7 @@ class Dispatcher: if isinstance(update.message, types.MessageEmpty): continue - message = utils.parse_messages(self.client, update.message, users, chats) - update = message, MessageHandler + update = utils.parse_messages(self.client, update.message, users, chats), MessageHandler elif isinstance(update, Dispatcher.DELETE_MESSAGE_UPDATES): deleted_messages = utils.parse_deleted_messages( From 3f0a355f7eff8eaf623759b9bcb5d25f074ae744 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 19 Oct 2018 11:54:27 +0200 Subject: [PATCH 328/530] Further optimize and simplify the Dispatcher --- pyrogram/client/dispatcher/dispatcher.py | 88 ++++++++++++------------ pyrogram/client/ext/utils.py | 64 +++++++++-------- 2 files changed, 76 insertions(+), 76 deletions(-) diff --git a/pyrogram/client/dispatcher/dispatcher.py b/pyrogram/client/dispatcher/dispatcher.py index cbfb59e4..f1c14fbe 100644 --- a/pyrogram/client/dispatcher/dispatcher.py +++ b/pyrogram/client/dispatcher/dispatcher.py @@ -45,9 +45,16 @@ class Dispatcher: types.UpdateDeleteChannelMessages ) + CALLBACK_QUERY_UPDATES = ( + types.UpdateBotCallbackQuery, + types.UpdateInlineBotCallbackQuery + ) + MESSAGE_UPDATES = NEW_MESSAGE_UPDATES + EDIT_MESSAGE_UPDATES - def __init__(self, client, workers): + UPDATES = None + + def __init__(self, client, workers: int): self.client = client self.workers = workers @@ -55,6 +62,22 @@ class Dispatcher: self.updates = Queue() self.groups = OrderedDict() + Dispatcher.UPDATES = { + Dispatcher.MESSAGE_UPDATES: + lambda upd, usr, cht: (utils.parse_messages(self.client, upd.message, usr, cht), MessageHandler), + + Dispatcher.DELETE_MESSAGE_UPDATES: + lambda upd, usr, cht: (utils.parse_deleted_messages(upd), DeletedMessagesHandler), + + Dispatcher.CALLBACK_QUERY_UPDATES: + lambda upd, usr, cht: (utils.parse_callback_query(self.client, upd, usr), CallbackQueryHandler), + + (types.UpdateUserStatus,): + lambda upd, usr, cht: (utils.parse_user_status(upd.status, upd.user_id), UserStatusHandler) + } + + Dispatcher.UPDATES = {key: value for key_tuple, value in Dispatcher.UPDATES.items() for key in key_tuple} + def start(self): for i in range(self.workers): self.workers_list.append( @@ -103,52 +126,31 @@ class Dispatcher: chats = {i.id: i for i in update[2]} update = update[0] - self.dispatch_raw(update, users=users, chats=chats, handler_class=RawUpdateHandler) + parser = Dispatcher.UPDATES.get(type(update), None) - if isinstance(update, Dispatcher.MESSAGE_UPDATES): - if isinstance(update.message, types.MessageEmpty): - continue - - update = utils.parse_messages(self.client, update.message, users, chats), MessageHandler - - elif isinstance(update, Dispatcher.DELETE_MESSAGE_UPDATES): - deleted_messages = utils.parse_deleted_messages( - update.messages, - update.channel_id if hasattr(update, "channel_id") else None - ) - - update = deleted_messages, DeletedMessagesHandler - - elif isinstance(update, types.UpdateBotCallbackQuery): - update = utils.parse_callback_query(self.client, update, users), CallbackQueryHandler - elif isinstance(update, types.UpdateInlineBotCallbackQuery): - update = utils.parse_inline_callback_query(self.client, update, users), CallbackQueryHandler - elif isinstance(update, types.UpdateUserStatus): - update = utils.parse_user_status(update.status, update.user_id), UserStatusHandler - else: + if parser is None: continue - self.dispatch(*update) + update, handler_type = parser(update, users, chats) + + for group in self.groups.values(): + for handler in group: + args = None + + if isinstance(handler, RawUpdateHandler): + args = (update, users, chats) + elif isinstance(handler, handler_type): + if handler.check(update): + args = (update,) + + if args is not None: + try: + handler.callback(self.client, *args) + except Exception as e: + log.error(e, exc_info=True) + finally: + break except Exception as e: log.error(e, exc_info=True) log.debug("{} stopped".format(name)) - - def dispatch_raw(self, update, users: dict, chats: dict, handler_class): - for group in self.groups.values(): - for handler in group: - if isinstance(handler, handler_class): - try: - handler.callback(self.client, update, users, chats) - except Exception as e: - log.error(e, exc_info=True) - - def dispatch(self, update, handler_class): - for group in self.groups.values(): - for handler in group: - if isinstance(handler, handler_class): - if handler.check(update): - try: - handler.callback(self.client, update) - except Exception as e: - log.error(e, exc_info=True) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index c7a10db9..fdf7693c 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -764,10 +764,10 @@ def parse_messages( return parsed_messages if is_list else parsed_messages[0] -def parse_deleted_messages( - messages: list, - channel_id: int -) -> pyrogram_types.Messages: +def parse_deleted_messages(update) -> pyrogram_types.Messages: + messages = update.messages + channel_id = getattr(update, "channel_id", None) + parsed_messages = [] for message in messages: @@ -874,42 +874,40 @@ def parse_profile_photos(photos): ) -def parse_callback_query(client, callback_query, users): - peer = callback_query.peer +def parse_callback_query(client, update, users): + message = None + inline_message_id = None - if isinstance(peer, types.PeerUser): - peer_id = peer.user_id - elif isinstance(peer, types.PeerChat): - peer_id = -peer.chat_id - else: - peer_id = int("-100" + str(peer.channel_id)) + if isinstance(update, types.UpdateBotCallbackQuery): + peer = update.peer - return pyrogram_types.CallbackQuery( - id=str(callback_query.query_id), - from_user=parse_user(users[callback_query.user_id]), - message=client.get_messages(peer_id, callback_query.msg_id), - chat_instance=str(callback_query.chat_instance), - data=callback_query.data.decode(), - game_short_name=callback_query.game_short_name, - client=client - ) + if isinstance(peer, types.PeerUser): + peer_id = peer.user_id + elif isinstance(peer, types.PeerChat): + peer_id = -peer.chat_id + else: + peer_id = int("-100" + str(peer.channel_id)) - -def parse_inline_callback_query(client, callback_query, users): - return pyrogram_types.CallbackQuery( - id=str(callback_query.query_id), - from_user=parse_user(users[callback_query.user_id]), - chat_instance=str(callback_query.chat_instance), - inline_message_id=b64encode( + message = client.get_messages(peer_id, update.msg_id) + elif isinstance(update, types.UpdateInlineBotCallbackQuery): + inline_message_id = b64encode( pack( " Date: Fri, 19 Oct 2018 23:39:29 +0700 Subject: [PATCH 329/530] Add file size limit error --- pyrogram/client/client.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index b19bb486..d4afd9be 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -1123,6 +1123,7 @@ class Client(Methods, BaseClient): progress_args: tuple = ()): part_size = 512 * 1024 file_size = os.path.getsize(path) + assert file_size < 1500 * 1024 * 1024, "Couldn't upload file bigger 1500MiB" file_total_parts = int(math.ceil(file_size / part_size)) is_big = True if file_size > 10 * 1024 * 1024 else False is_missing_part = True if file_id is not None else False From b12c87f50a51e6c090cf40d823b45badf574c174 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 21 Oct 2018 09:40:49 +0200 Subject: [PATCH 330/530] Make kick_chat_member return the "user kicked" message --- pyrogram/client/methods/chats/kick_chat_member.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pyrogram/client/methods/chats/kick_chat_member.py b/pyrogram/client/methods/chats/kick_chat_member.py index 1c849285..e0efa722 100644 --- a/pyrogram/client/methods/chats/kick_chat_member.py +++ b/pyrogram/client/methods/chats/kick_chat_member.py @@ -17,6 +17,7 @@ # along with Pyrogram. If not, see . from pyrogram.api import functions, types +from pyrogram.client.ext import utils from ...ext import BaseClient @@ -58,7 +59,7 @@ class KickChatMember(BaseClient): user_peer = self.resolve_peer(user_id) if isinstance(chat_peer, types.InputPeerChannel): - self.send( + r = self.send( functions.channels.EditBanned( channel=chat_peer, user_id=user_peer, @@ -76,11 +77,17 @@ class KickChatMember(BaseClient): ) ) else: - self.send( + r = self.send( functions.messages.DeleteChatUser( chat_id=abs(chat_id), user_id=user_peer ) ) - return True + for i in r.updates: + if isinstance(i, (types.UpdateNewMessage, types.UpdateNewChannelMessage)): + return utils.parse_messages( + self, i.message, + {i.id: i for i in r.users}, + {i.id: i for i in r.chats} + ) From fa5759b07b0cb54fe912ff7d5195ef3efa675c56 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 21 Oct 2018 14:41:30 +0700 Subject: [PATCH 331/530] Thanks, that really looks better Co-Authored-By: TolichP --- pyrogram/client/client.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index d4afd9be..9deecd3d 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -1123,7 +1123,8 @@ class Client(Methods, BaseClient): progress_args: tuple = ()): part_size = 512 * 1024 file_size = os.path.getsize(path) - assert file_size < 1500 * 1024 * 1024, "Couldn't upload file bigger 1500MiB" + if file_size > 1500 * 1024 * 1024: + raise ValueError("Telegram doesn't support uploading files bigger than 1500 MiB") file_total_parts = int(math.ceil(file_size / part_size)) is_big = True if file_size > 10 * 1024 * 1024 else False is_missing_part = True if file_id is not None else False From 1fe46610cde80fe6305dd2cfebb72c352c93c6c5 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 21 Oct 2018 09:42:22 +0200 Subject: [PATCH 332/530] Make plugins disabled by default Users need to explicitly set plugins_dir parameter --- pyrogram/client/client.py | 20 ++++++++++---------- pyrogram/client/ext/base_client.py | 1 - 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index b19bb486..2d1e211e 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -169,7 +169,7 @@ class Client(Methods, BaseClient): workers: int = BaseClient.WORKERS, workdir: str = BaseClient.WORKDIR, config_file: str = BaseClient.CONFIG_FILE, - plugins_dir: str or None = BaseClient.PLUGINS_DIR): + plugins_dir: str = None): super().__init__() self.session_name = session_name @@ -983,10 +983,7 @@ class Client(Methods, BaseClient): try: dirs = os.listdir(self.plugins_dir) except FileNotFoundError: - if self.plugins_dir == Client.PLUGINS_DIR: - log.info("No plugin loaded: default directory is missing") - else: - log.warning('No plugin loaded: "{}" directory is missing'.format(self.plugins_dir)) + log.warning('No plugin loaded: "{}" directory is missing'.format(self.plugins_dir)) else: plugins_dir = self.plugins_dir.lstrip("./").replace("/", ".") plugins_count = 0 @@ -1010,11 +1007,14 @@ class Client(Methods, BaseClient): except Exception: pass - log.warning('Successfully loaded {} plugin{} from "{}"'.format( - plugins_count, - "s" if plugins_count > 1 else "", - self.plugins_dir - )) + if plugins_count > 0: + log.warning('Successfully loaded {} plugin{} from "{}"'.format( + plugins_count, + "s" if plugins_count > 1 else "", + self.plugins_dir + )) + else: + log.warning('No plugin loaded: "{}" doesn\'t contain any valid plugin'.format(self.plugins_dir)) def save_session(self): auth_key = base64.b64encode(self.auth_key).decode() diff --git a/pyrogram/client/ext/base_client.py b/pyrogram/client/ext/base_client.py index 5801b4e8..c18c4050 100644 --- a/pyrogram/client/ext/base_client.py +++ b/pyrogram/client/ext/base_client.py @@ -52,7 +52,6 @@ class BaseClient: WORKERS = 4 WORKDIR = "." CONFIG_FILE = "./config.ini" - PLUGINS_DIR = "./plugins" MEDIA_TYPE_ID = { 0: "thumbnail", From 35e347196137b0c2fafe3fb858335cb942c802f0 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 21 Oct 2018 09:43:22 +0200 Subject: [PATCH 333/530] The restriction_reason field is not always available --- pyrogram/client/ext/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 3f689f41..94be83f5 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -215,7 +215,7 @@ def parse_channel_chat(channel: types.Channel) -> pyrogram_types.Chat: title=channel.title, username=getattr(channel, "username", None), photo=parse_chat_photo(getattr(channel, "photo", None)), - restriction_reason=channel.restriction_reason + restriction_reason=getattr(channel, "restriction_reason") ) From 2febb53d72c383682a4250c99a2fadcbacbd4e0a Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 21 Oct 2018 09:43:35 +0200 Subject: [PATCH 334/530] Update SmartPlugins.rst page --- docs/source/resources/SmartPlugins.rst | 123 +++++++++++++------------ 1 file changed, 62 insertions(+), 61 deletions(-) diff --git a/docs/source/resources/SmartPlugins.rst b/docs/source/resources/SmartPlugins.rst index 3922a102..ecb5dfdc 100644 --- a/docs/source/resources/SmartPlugins.rst +++ b/docs/source/resources/SmartPlugins.rst @@ -11,50 +11,50 @@ Introduction Prior to the Smart Plugin system, pluggable handlers were already possible. For example, if you wanted to modularize your applications, you had to do something like this... - .. note:: This is an example application that replies in private chats with two messages: one containing the same - text message you sent and the other containing the reversed text message (e.g.: "pyrogram" -> "pyrogram" and - "margoryp"): +.. note:: This is an example application that replies in private chats with two messages: one containing the same + text message you sent and the other containing the reversed text message (e.g.: "pyrogram" -> "pyrogram" and + "margoryp"): - .. code-block:: text +.. code-block:: text - myproject/ - config.ini - handlers.py - main.py + myproject/ + config.ini + handlers.py + main.py - - ``handlers.py`` +- ``handlers.py`` - .. code-block:: python + .. code-block:: python - def echo(client, message): - message.reply(message.text) + def echo(client, message): + message.reply(message.text) - def echo_reversed(client, message): - message.reply(message.text[::-1]) + def echo_reversed(client, message): + message.reply(message.text[::-1]) - - ``main.py`` +- ``main.py`` - .. code-block:: python + .. code-block:: python - from pyrogram import Client, MessageHandler, Filters + from pyrogram import Client, MessageHandler, Filters - from handlers import echo, echo_reversed + from handlers import echo, echo_reversed - app = Client("my_account") + app = Client("my_account") - app.add_handler( - MessageHandler( - echo, - Filters.text & Filters.private)) + app.add_handler( + MessageHandler( + echo, + Filters.text & Filters.private)) - app.add_handler( - MessageHandler( - echo_reversed, - Filters.text & Filters.private), - group=1) + app.add_handler( + MessageHandler( + echo_reversed, + Filters.text & Filters.private), + group=1) - app.run() + app.run() ...which is already nice and doesn't add *too much* boilerplate code, but things can get boring still; you have to manually ``import``, manually :meth:`add_handler ` and manually instantiate each @@ -64,55 +64,56 @@ functions. So... What if you could? Using Smart Plugins ------------------- -Setting up your Pyrogram project to accommodate Smart Plugins is as easy as creating a folder and putting your files -full of handlers inside. +Setting up your Pyrogram project to accommodate Smart Plugins is pretty straightforward: - .. note:: +#. Create a new folder to store all the plugins (e.g.: "plugins"). +#. Put your files full of plugins inside. +#. Enable plugins in your Client. - This is the same example application `as shown above <#introduction>`_, written using the Smart Plugin system. +.. note:: - .. code-block:: text - :emphasize-lines: 2, 3 + This is the same example application `as shown above <#introduction>`_, written using the Smart Plugin system. - myproject/ - plugins/ - handlers.py - config.ini - main.py +.. code-block:: text + :emphasize-lines: 2, 3 - - ``plugins/handlers.py`` + myproject/ + plugins/ + handlers.py + config.ini + main.py - .. code-block:: python - :emphasize-lines: 4, 9 +- ``plugins/handlers.py`` - from pyrogram import Client, Filters + .. code-block:: python + :emphasize-lines: 4, 9 + + from pyrogram import Client, Filters - @Client.on_message(Filters.text & Filters.private) - def echo(client, message): - message.reply(message.text) + @Client.on_message(Filters.text & Filters.private) + def echo(client, message): + message.reply(message.text) - @Client.on_message(Filters.text & Filters.private, group=1) - def echo_reversed(client, message): - message.reply(message.text[::-1]) + @Client.on_message(Filters.text & Filters.private, group=1) + def echo_reversed(client, message): + message.reply(message.text[::-1]) - - ``main.py`` +- ``main.py`` - .. code-block:: python + .. code-block:: python - from pyrogram import Client + from pyrogram import Client - Client("my_account").run() + Client("my_account", plugins_dir="plugins").run() -The first important thing to note is the ``plugins`` folder, whose name is default and can be changed easily by setting -the ``plugins_dir`` parameter when creating a :obj:`Client `; you can put *any python file* in there -and each file can contain *any decorated function* (handlers) with only one limitation: within a single plugin file you -must use different names for each decorated function. Your Pyrogram Client instance (in the ``main.py`` file) will -**automatically** scan the folder upon creation to search for valid handlers and register them for you. +The first important thing to note is the new ``plugins`` folder, whose name is passed to the the ``plugins_dir`` +parameter when creating a :obj:`Client ` in the ``main.py`` file — you can put *any python file* in +there and each file can contain *any decorated function* (handlers) with only one limitation: within a single plugin +file you must use different names for each decorated function. Your Pyrogram Client instance will **automatically** +scan the folder upon creation to search for valid handlers and register them for you. Then you'll notice you can now use decorators. That's right, you can apply the usual decorators to your callback functions in a static way, i.e. **without having the Client instance around**: simply use ``@Client`` (Client class) instead of the usual ``@app`` (Client instance) namespace and things will work just the same. - -The ``main.py`` script is now at its bare minimum and cleanest state. From bc08ba86d9a5794924963b98319357fbf2d461c1 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 21 Oct 2018 09:43:57 +0200 Subject: [PATCH 335/530] Update emojis --- pyrogram/client/ext/emoji.py | 8703 +++++++++++++++++----------------- 1 file changed, 4365 insertions(+), 4338 deletions(-) diff --git a/pyrogram/client/ext/emoji.py b/pyrogram/client/ext/emoji.py index 853f810d..bcd98854 100644 --- a/pyrogram/client/ext/emoji.py +++ b/pyrogram/client/ext/emoji.py @@ -180,7 +180,7 @@ class Emoji: GIRL_MEDIUM_SKIN_TONE = "\U0001f467\U0001f3fd" GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f467\U0001f3fe" GIRL_DARK_SKIN_TONE = "\U0001f467\U0001f3ff" - ADULT = "\U0001f9d1" + PERSON = "\U0001f9d1" ADULT_LIGHT_SKIN_TONE = "\U0001f9d1\U0001f3fb" ADULT_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9d1\U0001f3fc" ADULT_MEDIUM_SKIN_TONE = "\U0001f9d1\U0001f3fd" @@ -198,7 +198,7 @@ class Emoji: WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd" WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe" WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3ff" - OLDER_ADULT = "\U0001f9d3" + OLDER_PERSON = "\U0001f9d3" OLDER_ADULT_LIGHT_SKIN_TONE = "\U0001f9d3\U0001f3fb" OLDER_ADULT_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9d3\U0001f3fc" OLDER_ADULT_MEDIUM_SKIN_TONE = "\U0001f9d3\U0001f3fd" @@ -522,25 +522,25 @@ class Emoji: PERSON_WITH_HEADSCARF_MEDIUM_SKIN_TONE = "\U0001f9d5\U0001f3fd" PERSON_WITH_HEADSCARF_MEDIUM_DARK_SKIN_TONE = "\U0001f9d5\U0001f3fe" PERSON_WITH_HEADSCARF_DARK_SKIN_TONE = "\U0001f9d5\U0001f3ff" - BEARDED_PERSON = "\U0001f9d4" + MAN_BEARD = "\U0001f9d4" BEARDED_PERSON_LIGHT_SKIN_TONE = "\U0001f9d4\U0001f3fb" BEARDED_PERSON_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9d4\U0001f3fc" BEARDED_PERSON_MEDIUM_SKIN_TONE = "\U0001f9d4\U0001f3fd" BEARDED_PERSON_MEDIUM_DARK_SKIN_TONE = "\U0001f9d4\U0001f3fe" BEARDED_PERSON_DARK_SKIN_TONE = "\U0001f9d4\U0001f3ff" - BLOND_HAIRED_PERSON = "\U0001f471" + PERSON_BLOND_HAIR = "\U0001f471" BLOND_HAIRED_PERSON_LIGHT_SKIN_TONE = "\U0001f471\U0001f3fb" BLOND_HAIRED_PERSON_MEDIUM_LIGHT_SKIN_TONE = "\U0001f471\U0001f3fc" BLOND_HAIRED_PERSON_MEDIUM_SKIN_TONE = "\U0001f471\U0001f3fd" BLOND_HAIRED_PERSON_MEDIUM_DARK_SKIN_TONE = "\U0001f471\U0001f3fe" BLOND_HAIRED_PERSON_DARK_SKIN_TONE = "\U0001f471\U0001f3ff" - BLOND_HAIRED_MAN = "\U0001f471\u200d\u2642\ufe0f" + MAN_BLOND_HAIR = "\U0001f471\u200d\u2642\ufe0f" BLOND_HAIRED_MAN_LIGHT_SKIN_TONE = "\U0001f471\U0001f3fb\u200d\u2642\ufe0f" BLOND_HAIRED_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f471\U0001f3fc\u200d\u2642\ufe0f" BLOND_HAIRED_MAN_MEDIUM_SKIN_TONE = "\U0001f471\U0001f3fd\u200d\u2642\ufe0f" BLOND_HAIRED_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f471\U0001f3fe\u200d\u2642\ufe0f" BLOND_HAIRED_MAN_DARK_SKIN_TONE = "\U0001f471\U0001f3ff\u200d\u2642\ufe0f" - BLOND_HAIRED_WOMAN = "\U0001f471\u200d\u2640\ufe0f" + WOMAN_BLOND_HAIR = "\U0001f471\u200d\u2640\ufe0f" BLOND_HAIRED_WOMAN_LIGHT_SKIN_TONE = "\U0001f471\U0001f3fb\u200d\u2640\ufe0f" BLOND_HAIRED_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f471\U0001f3fc\u200d\u2640\ufe0f" BLOND_HAIRED_WOMAN_MEDIUM_SKIN_TONE = "\U0001f471\U0001f3fd\u200d\u2640\ufe0f" @@ -676,8 +676,8 @@ class Emoji: WOMAN_SUPERVILLAIN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9b9\U0001f3fc\u200d\u2640\ufe0f" WOMEN_WITH_BUNNY_EARS_PARTYING_TYPE_3 = "\U0001f46f\U0001f3fc\u200d\u2640\ufe0f" WOMEN_WITH_BUNNY_EARS_PARTYING_TYPE_4 = "\U0001f46f\U0001f3fd\u200d\u2640\ufe0f" - WOMAN_SUPERVILLAIN_MEDIUM_SKIN_TONE = "\U0001f9b9\U0001f3fd\u200d\u2640\ufe0f" WOMEN_WITH_BUNNY_EARS_PARTYING_TYPE_5 = "\U0001f46f\U0001f3fe\u200d\u2640\ufe0f" + WOMAN_SUPERVILLAIN_MEDIUM_SKIN_TONE = "\U0001f9b9\U0001f3fd\u200d\u2640\ufe0f" WOMEN_WITH_BUNNY_EARS_PARTYING_TYPE_6 = "\U0001f46f\U0001f3ff\u200d\u2640\ufe0f" WOMAN_SUPERVILLAIN_MEDIUM_DARK_SKIN_TONE = "\U0001f9b9\U0001f3fe\u200d\u2640\ufe0f" WOMAN_SUPERVILLAIN_DARK_SKIN_TONE = "\U0001f9b9\U0001f3ff\u200d\u2640\ufe0f" @@ -801,6 +801,11 @@ class Emoji: WOMAN_GENIE = "\U0001f9de\u200d\u2640\ufe0f" MAN_GENIE = "\U0001f9de\u200d\u2642\ufe0f" ZOMBIE = "\U0001f9df" + ZOMBIE_LIGHT_SKIN_TONE = "\U0001f9df\U0001f3fb" + ZOMBIE_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9df\U0001f3fc" + ZOMBIE_MEDIUM_SKIN_TONE = "\U0001f9df\U0001f3fd" + ZOMBIE_MEDIUM_DARK_SKIN_TONE = "\U0001f9df\U0001f3fe" + ZOMBIE_DARK_SKIN_TONE = "\U0001f9df\U0001f3ff" WOMAN_ZOMBIE = "\U0001f9df\u200d\u2640\ufe0f" MAN_ZOMBIE = "\U0001f9df\u200d\u2642\ufe0f" PERSON_FROWNING = "\U0001f64d" @@ -1305,22 +1310,22 @@ class Emoji: WRESTLERS_TYPE_5 = "\U0001f93c\U0001f3fe" MAN_CARTWHEELING_LIGHT_SKIN_TONE = "\U0001f938\U0001f3fb\u200d\u2642\ufe0f" WRESTLERS_TYPE_6 = "\U0001f93c\U0001f3ff" - MEN_WRESTLING_TYPE_1_2 = "\U0001f93c\U0001f3fb\u200d\u2642\ufe0f" MAN_CARTWHEELING_MEDIUM_LIGHT_SKIN_TONE = "\U0001f938\U0001f3fc\u200d\u2642\ufe0f" + MEN_WRESTLING_TYPE_1_2 = "\U0001f93c\U0001f3fb\u200d\u2642\ufe0f" MEN_WRESTLING_TYPE_3 = "\U0001f93c\U0001f3fc\u200d\u2642\ufe0f" - MAN_CARTWHEELING_MEDIUM_SKIN_TONE = "\U0001f938\U0001f3fd\u200d\u2642\ufe0f" MEN_WRESTLING_TYPE_4 = "\U0001f93c\U0001f3fd\u200d\u2642\ufe0f" + MAN_CARTWHEELING_MEDIUM_SKIN_TONE = "\U0001f938\U0001f3fd\u200d\u2642\ufe0f" MEN_WRESTLING_TYPE_5 = "\U0001f93c\U0001f3fe\u200d\u2642\ufe0f" MEN_WRESTLING_TYPE_6 = "\U0001f93c\U0001f3ff\u200d\u2642\ufe0f" MAN_CARTWHEELING_MEDIUM_DARK_SKIN_TONE = "\U0001f938\U0001f3fe\u200d\u2642\ufe0f" WOMEN_WRESTLING_TYPE_1_2 = "\U0001f93c\U0001f3fb\u200d\u2640\ufe0f" MAN_CARTWHEELING_DARK_SKIN_TONE = "\U0001f938\U0001f3ff\u200d\u2642\ufe0f" WOMEN_WRESTLING_TYPE_3 = "\U0001f93c\U0001f3fc\u200d\u2640\ufe0f" - WOMAN_CARTWHEELING = "\U0001f938\u200d\u2640\ufe0f" WOMEN_WRESTLING_TYPE_4 = "\U0001f93c\U0001f3fd\u200d\u2640\ufe0f" + WOMAN_CARTWHEELING = "\U0001f938\u200d\u2640\ufe0f" WOMEN_WRESTLING_TYPE_5 = "\U0001f93c\U0001f3fe\u200d\u2640\ufe0f" - WOMAN_CARTWHEELING_LIGHT_SKIN_TONE = "\U0001f938\U0001f3fb\u200d\u2640\ufe0f" WOMEN_WRESTLING_TYPE_6 = "\U0001f93c\U0001f3ff\u200d\u2640\ufe0f" + WOMAN_CARTWHEELING_LIGHT_SKIN_TONE = "\U0001f938\U0001f3fb\u200d\u2640\ufe0f" WOMAN_CARTWHEELING_MEDIUM_LIGHT_SKIN_TONE = "\U0001f938\U0001f3fc\u200d\u2640\ufe0f" WOMAN_CARTWHEELING_MEDIUM_SKIN_TONE = "\U0001f938\U0001f3fd\u200d\u2640\ufe0f" WOMAN_CARTWHEELING_MEDIUM_DARK_SKIN_TONE = "\U0001f938\U0001f3fe\u200d\u2640\ufe0f" @@ -1636,14 +1641,14 @@ class Emoji: NOSE_MEDIUM_SKIN_TONE = "\U0001f443\U0001f3fd" NOSE_MEDIUM_DARK_SKIN_TONE = "\U0001f443\U0001f3fe" NOSE_DARK_SKIN_TONE = "\U0001f443\U0001f3ff" - EMOJI_COMPONENT_RED_HAIR = "\U0001f9b0" - EMOJI_COMPONENT_CURLY_HAIR = "\U0001f9b1" - EMOJI_COMPONENT_BALD = "\U0001f9b2" - EMOJI_COMPONENT_WHITE_HAIR = "\U0001f9b3" + RED_HAIR = "\U0001f9b0" + CURLY_HAIR = "\U0001f9b1" + BALD = "\U0001f9b2" + WHITE_HAIR = "\U0001f9b3" FOOTPRINTS = "\U0001f463" EYES = "\U0001f440" EYE = "\U0001f441\ufe0f" - EYE_IN_SPEECH_BUBBLE = "\U0001f441\ufe0f\u200d\U0001f5e8\ufe0f" + EYE_IN_SPEECH_BUBBLE = "\U0001f441\u200d\U0001f5e8" BRAIN = "\U0001f9e0" BONE = "\U0001f9b4" TOOTH = "\U0001f9b7" @@ -1699,11 +1704,11 @@ class Emoji: HANDBAG = "\U0001f45c" CLUTCH_BAG = "\U0001f45d" SHOPPING_BAGS = "\U0001f6cd\ufe0f" - SCHOOL_BACKPACK = "\U0001f392" + BACKPACK = "\U0001f392" MAN_S_SHOE = "\U0001f45e" RUNNING_SHOE = "\U0001f45f" HIKING_BOOT = "\U0001f97e" - WOMAN_S_FLAT_SHOE = "\U0001f97f" + FLAT_SHOE = "\U0001f97f" HIGH_HEELED_SHOE = "\U0001f460" WOMAN_S_SANDAL = "\U0001f461" WOMAN_S_BOOT = "\U0001f462" @@ -1770,7 +1775,7 @@ class Emoji: KANGAROO = "\U0001f998" BADGER = "\U0001f9a1" PAW_PRINTS = "\U0001f43e" - TURKEY_BIRD = "\U0001f983" + TURKEY_2 = "\U0001f983" CHICKEN = "\U0001f414" ROOSTER = "\U0001f413" HATCHING_CHICK = "\U0001f423" @@ -1972,7 +1977,7 @@ class Emoji: DERELICT_HOUSE = "\U0001f3da\ufe0f" HOUSE = "\U0001f3e0" HOUSE_WITH_GARDEN = "\U0001f3e1" - BRICKS = "\U0001f9f1" + BRICK = "\U0001f9f1" OFFICE_BUILDING = "\U0001f3e2" JAPANESE_POST_OFFICE = "\U0001f3e3" POST_OFFICE = "\U0001f3e4" @@ -2122,7 +2127,7 @@ class Emoji: SUN = "\u2600\ufe0f" FULL_MOON_FACE = "\U0001f31d" SUN_WITH_FACE = "\U0001f31e" - WHITE_MEDIUM_STAR = "\u2b50" + STAR = "\u2b50" GLOWING_STAR = "\U0001f31f" SHOOTING_STAR = "\U0001f320" CLOUD = "\u2601\ufe0f" @@ -2166,7 +2171,7 @@ class Emoji: CARP_STREAMER = "\U0001f38f" WIND_CHIME = "\U0001f390" MOON_VIEWING_CEREMONY = "\U0001f391" - RED_GIFT_ENVELOPE = "\U0001f9e7" + RED_ENVELOPE = "\U0001f9e7" RIBBON = "\U0001f380" WRAPPED_GIFT = "\U0001f381" REMINDER_RIBBON = "\U0001f397\ufe0f" @@ -2400,7 +2405,7 @@ class Emoji: SAFETY_PIN = "\U0001f9f7" BROOM = "\U0001f9f9" BASKET = "\U0001f9fa" - ROLL_OF_TOILET_PAPER = "\U0001f9fb" + ROLL_OF_PAPER = "\U0001f9fb" SOAP = "\U0001f9fc" SPONGE = "\U0001f9fd" SHOPPING_CART = "\U0001f6d2" @@ -2882,8 +2887,8 @@ class Emoji: ENGLAND = "\U0001f3f4\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f" SCOTLAND = "\U0001f3f4\U000e0067\U000e0062\U000e0073\U000e0063\U000e0074\U000e007f" WALES = "\U0001f3f4\U000e0067\U000e0062\U000e0077\U000e006c\U000e0073\U000e007f" - RIFLE = "\U0001f946" MODERN_PENTATHLON = "\U0001f93b" + RIFLE = "\U0001f946" REGIONAL_INDICATOR_SYMBOL_LETTER_A = "\U0001f1e6" REGIONAL_INDICATOR_SYMBOL_LETTER_B = "\U0001f1e7" REGIONAL_INDICATOR_SYMBOL_LETTER_C = "\U0001f1e8" @@ -2910,4920 +2915,4942 @@ class Emoji: REGIONAL_INDICATOR_SYMBOL_LETTER_X = "\U0001f1fd" REGIONAL_INDICATOR_SYMBOL_LETTER_Y = "\U0001f1fe" REGIONAL_INDICATOR_SYMBOL_LETTER_Z = "\U0001f1ff" - HIPSTER_CAT = "\U0001f431\u200d\U0001f453" + DINO_CAT = "\U0001f431\u200d\U0001f409" + NINJA_CAT = "\U0001f431\u200d\U0001f464" STUNT_CAT = "\U0001f431\u200d\U0001f3cd" ASTRO_CAT = "\U0001f431\u200d\U0001f680" HACKER_CAT = "\U0001f431\u200d\U0001f4bb" - DINO_CAT = "\U0001f431\u200d\U0001f409" - NINJA_CAT = "\U0001f431\u200d\U0001f464" + HIPSTER_CAT = "\U0001f431\u200d\U0001f453" OLYMPIC_RINGS = "\u25ef\u200d\u25ef\u200d\u25ef\u200d\u25ef\u200d\u25ef" - FLAG_FOR_G_AJNSIELEM_MT_13 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0033\U000e007f" - FLAG_FOR_NAXXAR_MT_38 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0038\U000e007f" - FLAG_FOR_FLORIANA_MT_09 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0039\U000e007f" - FLAG_FOR_BIRZEBBUGA_MT_05 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0035\U000e007f" - FLAG_FOR_KALKARA_MT_21 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0031\U000e007f" - FLAG_FOR_GZIRA_MT_12 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0032\U000e007f" - FLAG_FOR_GUDJA_MT_11 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0031\U000e007f" - FLAG_FOR_KIRKOP_MT_23 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0033\U000e007f" - FLAG_FOR_DINGLI_MT_07 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0037\U000e007f" - FLAG_FOR_MARSASKALA_MT_27 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0037\U000e007f" - FLAG_FOR_PAOLA_MT_39 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0039\U000e007f" - FLAG_FOR_FONTANA_MT_10 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0030\U000e007f" - FLAG_FOR_MSIDA_MT_34 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0034\U000e007f" - FLAG_FOR_MOSTA_MT_32 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0032\U000e007f" - FLAG_FOR_MON_MM_15 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0035\U000e007f" - FLAG_FOR_BIRGU_MT_03 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0033\U000e007f" - FLAG_FOR_NOUAKCHOTT_NORD_MR_14 = "\U0001f3f4\U000e006d\U000e0072\U000e0031\U000e0034\U000e007f" - FLAG_FOR_MELLIE_A_MT_30 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0030\U000e007f" - FLAG_FOR_G_AXAQ_MT_17 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0037\U000e007f" + FLAG_FOR_SUKHBAATAR_MN_051 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0035\U000e0031\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + FLAG_FOR_ORKHON_MN_035 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0033\U000e0035\U000e007f" + FLAG_FOR_TIRIS_ZEMMOUR_MR_11 = "\U0001f3f4\U000e006d\U000e0072\U000e0031\U000e0031\U000e007f" + FLAG_FOR_KHOVD_MN_043 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0034\U000e0033\U000e007f" + FLAG_FOR_ASSABA_MR_03 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0033\U000e007f" + FLAG_FOR_BRAKNA_MR_05 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0035\U000e007f" + FLAG_FOR_GORGOL_MR_04 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0034\U000e007f" + FLAG_FOR_ARKHANGAI_MN_073 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0037\U000e0033\U000e007f" FLAG_FOR_AKMOLA_KZ_AKM = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e006b\U000e006d\U000e007f" + FLAG_FOR_BIRKIRKARA_MT_04 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0034\U000e007f" + FLAG_FOR_IKLIN_MT_19 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0039\U000e007f" + FLAG_FOR_NAXXAR_MT_38 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0038\U000e007f" + FLAG_FOR_KALKARA_MT_21 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0031\U000e007f" + FLAG_FOR_FONTANA_MT_10 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0030\U000e007f" + FLAG_FOR_LIJA_MT_24 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0034\U000e007f" FLAG_FOR_FGURA_MT_08 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0038\U000e007f" - FLAG_FOR_MARSA_MT_26 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0036\U000e007f" - FLAG_FOR_ATTARD_MT_01 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0031\U000e007f" - FLAG_FOR_G_ARG_UR_MT_15 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0035\U000e007f" - FLAG_FOR_COSPICUA_MT_06 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0036\U000e007f" + FLAG_FOR_GUDJA_MT_11 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0031\U000e007f" FLAG_FOR_NOUAKCHOTT_SUD_MR_15 = "\U0001f3f4\U000e006d\U000e0072\U000e0031\U000e0035\U000e007f" - FLAG_FOR_NADUR_MT_37 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0037\U000e007f" + FLAG_FOR_MUNXAR_MT_36 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0036\U000e007f" + FLAG_FOR_G_AJNSIELEM_MT_13 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0033\U000e007f" + FLAG_FOR_BIRGU_MT_03 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0033\U000e007f" + FLAG_FOR_ATTARD_MT_01 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0031\U000e007f" FLAG_FOR_AMRUN_MT_18 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0038\U000e007f" + FLAG_FOR_G_ARB_MT_14 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0034\U000e007f" FLAG_FOR_MARSAXLOKK_MT_28 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0038\U000e007f" + FLAG_FOR_G_AXAQ_MT_17 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0037\U000e007f" FLAG_FOR_MQABBA_MT_33 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0033\U000e007f" + FLAG_FOR_GZIRA_MT_12 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0032\U000e007f" + FLAG_FOR_NADUR_MT_37 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0037\U000e007f" + FLAG_FOR_MOSTA_MT_32 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0032\U000e007f" + FLAG_FOR_MELLIE_A_MT_30 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0030\U000e007f" + FLAG_FOR_PAOLA_MT_39 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0039\U000e007f" + FLAG_FOR_KERCEM_MT_22 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0032\U000e007f" + FLAG_FOR_KIRKOP_MT_23 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0033\U000e007f" + FLAG_FOR_MSIDA_MT_34 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0034\U000e007f" + FLAG_FOR_DINGLI_MT_07 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0037\U000e007f" + FLAG_FOR_FLORIANA_MT_09 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0039\U000e007f" + FLAG_FOR_COSPICUA_MT_06 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0036\U000e007f" + FLAG_FOR_NOUAKCHOTT_NORD_MR_14 = "\U0001f3f4\U000e006d\U000e0072\U000e0031\U000e0034\U000e007f" + FLAG_FOR_G_ARG_UR_MT_15 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0035\U000e007f" + COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469" + FLAG_FOR_IMTARFA_MT_35 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0035\U000e007f" + FLAG_FOR_BIRZEBBUGA_MT_05 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0035\U000e007f" + FLAG_FOR_BALZAN_MT_02 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0032\U000e007f" + FLAG_FOR_REDANGE_LU_RD = "\U0001f3f4\U000e006c\U000e0075\U000e0072\U000e0064\U000e007f" + FLAG_FOR_VALLETTA_MT_60 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0030\U000e007f" + FLAG_FOR_QRENDI_MT_44 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0034\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_FLACQ_MU_FL = "\U0001f3f4\U000e006d\U000e0075\U000e0066\U000e006c\U000e007f" FLAG_FOR_SANTA_LUCIJA_MT_53 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0033\U000e007f" - FLAG_FOR_SANTA_VENERA_MT_54 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0034\U000e007f" - FLAG_FOR_QALA_MT_42 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0032\U000e007f" - FLAG_FOR_GRAND_PORT_MU_GP = "\U0001f3f4\U000e006d\U000e0075\U000e0067\U000e0070\U000e007f" - FLAG_FOR_TA_XBIEX_MT_58 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0038\U000e007f" - FLAG_FOR_XAG_RA_MT_61 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0031\U000e007f" + FLAG_FOR_ZEJTUN_MT_67 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0037\U000e007f" + FLAG_FOR_FUNAFUTI_TV_FUN = "\U0001f3f4\U000e0074\U000e0076\U000e0066\U000e0075\U000e006e\U000e007f" + FLAG_FOR_PEMBROKE_MT_40 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0030\U000e007f" + FLAG_FOR_CUREPIPE_MU_CU = "\U0001f3f4\U000e006d\U000e0075\U000e0063\U000e0075\U000e007f" + FLAG_FOR_ZURRIEQ_MT_68 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0038\U000e007f" + FLAG_FOR_QORMI_MT_43 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0033\U000e007f" + FLAG_FOR_SAINT_LAWRENCE_MT_50 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0030\U000e007f" FLAG_FOR_ZABBAR_MT_64 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0034\U000e007f" FLAG_FOR_PAMPLEMOUSSES_MU_PA = "\U0001f3f4\U000e006d\U000e0075\U000e0070\U000e0061\U000e007f" - FLAG_FOR_PORT_LOUIS_DISTRICT_MU_PL = "\U0001f3f4\U000e006d\U000e0075\U000e0070\U000e006c\U000e007f" - FLAG_FOR_AGALEGA_MU_AG = "\U0001f3f4\U000e006d\U000e0075\U000e0061\U000e0067\U000e007f" - FLAG_FOR_QRENDI_MT_44 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0034\U000e007f" - FLAG_FOR_FLACQ_MU_FL = "\U0001f3f4\U000e006d\U000e0075\U000e0066\U000e006c\U000e007f" - FLAG_FOR_PEMBROKE_MT_40 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0030\U000e007f" - FLAG_FOR_SWIEQI_MT_57 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0037\U000e007f" - FLAG_FOR_SAN_MIGUEL_SV_SM = "\U0001f3f4\U000e0073\U000e0076\U000e0073\U000e006d\U000e007f" - FLAG_FOR_VALLETTA_MT_60 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0030\U000e007f" - FLAG_FOR_ZURRIEQ_MT_68 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0038\U000e007f" - FLAG_FOR_SAN_GWANN_MT_49 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0039\U000e007f" - FLAG_FOR_MOKA_MU_MO = "\U0001f3f4\U000e006d\U000e0075\U000e006d\U000e006f\U000e007f" - FLAG_FOR_XG_AJRA_MT_63 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0033\U000e007f" - FLAG_FOR_VICTORIA_MT_45 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0035\U000e007f" - FLAG_FOR_SOUTH_CM_SU = "\U0001f3f4\U000e0063\U000e006d\U000e0073\U000e0075\U000e007f" - FLAG_FOR_QORMI_MT_43 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0033\U000e007f" + FLAG_FOR_QALA_MT_42 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0032\U000e007f" + FLAG_FOR_SLIEMA_MT_56 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0036\U000e007f" FLAG_FOR_TARXIEN_MT_59 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0039\U000e007f" - FLAG_FOR_SAFI_MT_47 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0037\U000e007f" - FLAG_FOR_CUREPIPE_MU_CU = "\U0001f3f4\U000e006d\U000e0075\U000e0063\U000e0075\U000e007f" - FLAG_FOR_ZEJTUN_MT_67 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0037\U000e007f" - FLAG_FOR_ST_PAUL_S_BAY_MT_51 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0031\U000e007f" - FLAG_FOR_PIETA_MT_41 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0031\U000e007f" + FLAG_FOR_TA_XBIEX_MT_58 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0038\U000e007f" + KISS_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" + FLAG_FOR_XAG_RA_MT_61 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0031\U000e007f" + FLAG_FOR_SWIEQI_MT_57 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0037\U000e007f" + FLAG_FOR_SAN_GWANN_MT_49 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0039\U000e007f" FLAG_FOR_ZEBBUG_MT_66 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0036\U000e007f" - FLAG_FOR_SAINT_LAWRENCE_MT_50 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0030\U000e007f" - FLAG_FOR_RIVIERE_NOIRE_MU_BL = "\U0001f3f4\U000e006d\U000e0075\U000e0062\U000e006c\U000e007f" FLAG_FOR_SIGGIEWI_MT_55 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0035\U000e007f" FLAG_FOR_PORT_LOUIS_MU_PU = "\U0001f3f4\U000e006d\U000e0075\U000e0070\U000e0075\U000e007f" - FLAG_FOR_SLIEMA_MT_56 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0036\U000e007f" - FLAG_FOR_MORELOS_MX_MOR = "\U0001f3f4\U000e006d\U000e0078\U000e006d\U000e006f\U000e0072\U000e007f" - FLAG_FOR_SAVANNE_MU_SA = "\U0001f3f4\U000e006d\U000e0075\U000e0073\U000e0061\U000e007f" - FLAG_FOR_QUATRE_BORNES_MU_QB = "\U0001f3f4\U000e006d\U000e0075\U000e0071\U000e0062\U000e007f" - FLAG_FOR_MICHOACAN_MX_MIC = "\U0001f3f4\U000e006d\U000e0078\U000e006d\U000e0069\U000e0063\U000e007f" - FLAG_FOR_SOUTHERN_MW_S = "\U0001f3f4\U000e006d\U000e0077\U000e0073\U000e007f" - TAG_FULL_STOP = "\U000e002e" - FLAG_FOR_VACOAS_PHOENIX_MU_VP = "\U0001f3f4\U000e006d\U000e0075\U000e0076\U000e0070\U000e007f" - FLAG_FOR_NORTHERN_MW_N = "\U0001f3f4\U000e006d\U000e0077\U000e006e\U000e007f" - FLAG_FOR_OAXACA_MX_OAX = "\U0001f3f4\U000e006d\U000e0078\U000e006f\U000e0061\U000e0078\U000e007f" - FLAG_FOR_ANENII_NOI_MD_AN = "\U0001f3f4\U000e006d\U000e0064\U000e0061\U000e006e\U000e007f" + FLAG_FOR_SANTA_VENERA_MT_54 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0034\U000e007f" + FLAG_FOR_XG_AJRA_MT_63 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0033\U000e007f" FLAG_FOR_CENTRAL_MW_C = "\U0001f3f4\U000e006d\U000e0077\U000e0063\U000e007f" - FLAG_FOR_HIDALGO_MX_HID = "\U0001f3f4\U000e006d\U000e0078\U000e0068\U000e0069\U000e0064\U000e007f" - FLAG_FOR_KOHGILUYEH_AND_BOYER_AHMAD_IR_18 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0038\U000e007f" - FLAG_FOR_PLAINES_WILHEMS_MU_PW = "\U0001f3f4\U000e006d\U000e0075\U000e0070\U000e0077\U000e007f" - FLAG_FOR_CAMPECHE_MX_CAM = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e0061\U000e006d\U000e007f" - FLAG_FOR_NUEVO_LEON_MX_NLE = "\U0001f3f4\U000e006d\U000e0078\U000e006e\U000e006c\U000e0065\U000e007f" - FLAG_FOR_COLIMA_MX_COL = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e006f\U000e006c\U000e007f" - FLAG_FOR_COAHUILA_MX_COA = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e006f\U000e0061\U000e007f" - FLAG_FOR_GUANAJUATO_MX_GUA = "\U0001f3f4\U000e006d\U000e0078\U000e0067\U000e0075\U000e0061\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_CENTRAL_PROVINCE_MV_CE = "\U0001f3f4\U000e006d\U000e0076\U000e0063\U000e0065\U000e007f" - FLAG_FOR_MALE_MV_MLE = "\U0001f3f4\U000e006d\U000e0076\U000e006d\U000e006c\U000e0065\U000e007f" FLAG_FOR_SOUTH_PROVINCE_MV_SU = "\U0001f3f4\U000e006d\U000e0076\U000e0073\U000e0075\U000e007f" + FLAG_FOR_TRIESENBERG_LI_10 = "\U0001f3f4\U000e006c\U000e0069\U000e0031\U000e0030\U000e007f" + FLAG_FOR_VACOAS_PHOENIX_MU_VP = "\U0001f3f4\U000e006d\U000e0075\U000e0076\U000e0070\U000e007f" + FLAG_FOR_ANENII_NOI_MD_AN = "\U0001f3f4\U000e006d\U000e0064\U000e0061\U000e006e\U000e007f" + FLAG_FOR_GUANAJUATO_MX_GUA = "\U0001f3f4\U000e006d\U000e0078\U000e0067\U000e0075\U000e0061\U000e007f" + FLAG_FOR_MALE_MV_MLE = "\U0001f3f4\U000e006d\U000e0076\U000e006d\U000e006c\U000e0065\U000e007f" + FLAG_FOR_OAXACA_MX_OAX = "\U0001f3f4\U000e006d\U000e0078\U000e006f\U000e0061\U000e0078\U000e007f" + FLAG_FOR_CENTRAL_PROVINCE_MV_CE = "\U0001f3f4\U000e006d\U000e0076\U000e0063\U000e0065\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" FLAG_FOR_MUNSTER_IE_M = "\U0001f3f4\U000e0069\U000e0065\U000e006d\U000e007f" - TAG_HYPHEN_MINUS = "\U000e002d" - FLAG_FOR_RODRIGUES_MU_RO = "\U0001f3f4\U000e006d\U000e0075\U000e0072\U000e006f\U000e007f" - FLAG_FOR_UPPER_NORTH_PROVINCE_MV_UN = "\U0001f3f4\U000e006d\U000e0076\U000e0075\U000e006e\U000e007f" - FLAG_FOR_HARDAP_NA_HA = "\U0001f3f4\U000e006e\U000e0061\U000e0068\U000e0061\U000e007f" - FLAG_FOR_SINALOA_MX_SIN = "\U0001f3f4\U000e006d\U000e0078\U000e0073\U000e0069\U000e006e\U000e007f" - FLAG_FOR_ZACATECAS_MX_ZAC = "\U0001f3f4\U000e006d\U000e0078\U000e007a\U000e0061\U000e0063\U000e007f" + FLAG_FOR_MANGYSTAU_KZ_MAN = "\U0001f3f4\U000e006b\U000e007a\U000e006d\U000e0061\U000e006e\U000e007f" + FLAG_FOR_BAJA_CALIFORNIA_SUR_MX_BCS = "\U0001f3f4\U000e006d\U000e0078\U000e0062\U000e0063\U000e0073\U000e007f" + FLAG_FOR_CAMPECHE_MX_CAM = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e0061\U000e006d\U000e007f" + FLAG_FOR_KYOTO_JP_26 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0036\U000e007f" + FLAG_FOR_KOHGILUYEH_AND_BOYER_AHMAD_IR_18 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0038\U000e007f" + FLAG_FOR_HIDALGO_MX_HID = "\U0001f3f4\U000e006d\U000e0078\U000e0068\U000e0069\U000e0064\U000e007f" + FLAG_FOR_CHLEF_DZ_02 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0032\U000e007f" + FLAG_FOR_QUATRE_BORNES_MU_QB = "\U0001f3f4\U000e006d\U000e0075\U000e0071\U000e0062\U000e007f" + FLAG_FOR_PLAINES_WILHEMS_MU_PW = "\U0001f3f4\U000e006d\U000e0075\U000e0070\U000e0077\U000e007f" + FLAG_FOR_SAVANNE_MU_SA = "\U0001f3f4\U000e006d\U000e0075\U000e0073\U000e0061\U000e007f" + FLAG_FOR_SOUTHERN_MW_S = "\U0001f3f4\U000e006d\U000e0077\U000e0073\U000e007f" + FLAG_FOR_COAHUILA_MX_COA = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e006f\U000e0061\U000e007f" FLAG_FOR_NEGERI_SEMBILAN_MY_05 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0035\U000e007f" - FLAG_FOR_PUTRAJAYA_MY_16 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0036\U000e007f" - FLAG_FOR_MANICA_MZ_B = "\U0001f3f4\U000e006d\U000e007a\U000e0062\U000e007f" - FLAG_FOR_MAPUTO_MZ_MPM = "\U0001f3f4\U000e006d\U000e007a\U000e006d\U000e0070\U000e006d\U000e007f" - FLAG_FOR_PERLIS_MY_09 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0039\U000e007f" - FLAG_FOR_QUERETARO_MX_QUE = "\U0001f3f4\U000e006d\U000e0078\U000e0071\U000e0075\U000e0065\U000e007f" - FLAG_FOR_GAZA_MZ_G = "\U0001f3f4\U000e006d\U000e007a\U000e0067\U000e007f" - FLAG_FOR_ZAMBEZIA_MZ_Q = "\U0001f3f4\U000e006d\U000e007a\U000e0071\U000e007f" - FLAG_FOR_INHAMBANE_MZ_I = "\U0001f3f4\U000e006d\U000e007a\U000e0069\U000e007f" - FLAG_FOR_YUCATAN_MX_YUC = "\U0001f3f4\U000e006d\U000e0078\U000e0079\U000e0075\U000e0063\U000e007f" - FLAG_FOR_CABO_DELGADO_MZ_P = "\U0001f3f4\U000e006d\U000e007a\U000e0070\U000e007f" - FLAG_FOR_VERACRUZ_MX_VER = "\U0001f3f4\U000e006d\U000e0078\U000e0076\U000e0065\U000e0072\U000e007f" - FLAG_FOR_TLAXCALA_MX_TLA = "\U0001f3f4\U000e006d\U000e0078\U000e0074\U000e006c\U000e0061\U000e007f" - FLAG_FOR_MONTE_CARLO_MC_MC = "\U0001f3f4\U000e006d\U000e0063\U000e006d\U000e0063\U000e007f" - TAG_COMMERCIAL_AT = "\U000e0040" - FLAG_FOR_TETE_MZ_T = "\U0001f3f4\U000e006d\U000e007a\U000e0074\U000e007f" - FLAG_FOR_ZAMBEZI_NA_CA = "\U0001f3f4\U000e006e\U000e0061\U000e0063\U000e0061\U000e007f" FLAG_FOR_SOFALA_MZ_S = "\U0001f3f4\U000e006d\U000e007a\U000e0073\U000e007f" - FLAG_FOR_NIASSA_MZ_A = "\U0001f3f4\U000e006d\U000e007a\U000e0061\U000e007f" - FLAG_FOR_NAMPULA_MZ_N = "\U0001f3f4\U000e006d\U000e007a\U000e006e\U000e007f" + FLAG_FOR_LABUAN_MY_15 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0035\U000e007f" + FLAG_FOR_NUEVO_LEON_MX_NLE = "\U0001f3f4\U000e006d\U000e0078\U000e006e\U000e006c\U000e0065\U000e007f" + FLAG_FOR_LA_SOURCE_MC_SO = "\U0001f3f4\U000e006d\U000e0063\U000e0073\U000e006f\U000e007f" + FLAG_FOR_SOUTH_GYEONGSANG_KR_48 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0038\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_GAZA_MZ_G = "\U0001f3f4\U000e006d\U000e007a\U000e0067\U000e007f" TAG_GRAVE_ACCENT = "\U000e0060" FLAG_FOR_MALACCA_MY_04 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0034\U000e007f" + FLAG_FOR_CABO_DELGADO_MZ_P = "\U0001f3f4\U000e006d\U000e007a\U000e0070\U000e007f" + FLAG_FOR_TLAXCALA_MX_TLA = "\U0001f3f4\U000e006d\U000e0078\U000e0074\U000e006c\U000e0061\U000e007f" + FLAG_FOR_APULIA_IT_75 = "\U0001f3f4\U000e0069\U000e0074\U000e0037\U000e0035\U000e007f" + FLAG_FOR_NAMPULA_MZ_N = "\U0001f3f4\U000e006d\U000e007a\U000e006e\U000e007f" + FLAG_FOR_OGOOUE_LOLO_GA_7 = "\U0001f3f4\U000e0067\U000e0061\U000e0037\U000e007f" FLAG_FOR_ERONGO_NA_ER = "\U0001f3f4\U000e006e\U000e0061\U000e0065\U000e0072\U000e007f" - FLAG_FOR_TAMAULIPAS_MX_TAM = "\U0001f3f4\U000e006d\U000e0078\U000e0074\U000e0061\U000e006d\U000e007f" - FLAG_FOR_LABUAN_MY_15 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0035\U000e007f" - FLAG_FOR_LA_SOURCE_MC_SO = "\U0001f3f4\U000e006d\U000e0063\U000e0073\U000e006f\U000e007f" - FLAG_FOR_OTJOZONDJUPA_NA_OD = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e0064\U000e007f" - FLAG_FOR_MARADI_NE_4 = "\U0001f3f4\U000e006e\U000e0065\U000e0034\U000e007f" - FLAG_FOR_TAHOUA_NE_5 = "\U0001f3f4\U000e006e\U000e0065\U000e0035\U000e007f" - FLAG_FOR_EBONYI_NG_EB = "\U0001f3f4\U000e006e\U000e0067\U000e0065\U000e0062\U000e007f" - FLAG_FOR_GOMBE_NG_GO = "\U0001f3f4\U000e006e\U000e0067\U000e0067\U000e006f\U000e007f" - FLAG_FOR_EDO_NG_ED = "\U0001f3f4\U000e006e\U000e0067\U000e0065\U000e0064\U000e007f" - FLAG_FOR_KATSINA_NG_KT = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e0074\U000e007f" - FLAG_FOR_IMO_NG_IM = "\U0001f3f4\U000e006e\U000e0067\U000e0069\U000e006d\U000e007f" - FLAG_FOR_DOSSO_NE_3 = "\U0001f3f4\U000e006e\U000e0065\U000e0033\U000e007f" - FLAG_FOR_TILLABERI_NE_6 = "\U0001f3f4\U000e006e\U000e0065\U000e0036\U000e007f" - FLAG_FOR_RIVIERE_DU_REMPART_MU_RR = "\U0001f3f4\U000e006d\U000e0075\U000e0072\U000e0072\U000e007f" - FLAG_FOR_OSHIKOTO_NA_OT = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e0074\U000e007f" - FLAG_FOR_SIDI_BEL_ABBES_DZ_22 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0032\U000e007f" - FLAG_FOR_KARAS_NA_KA = "\U0001f3f4\U000e006e\U000e0061\U000e006b\U000e0061\U000e007f" - FLAG_FOR_BAYELSA_NG_BY = "\U0001f3f4\U000e006e\U000e0067\U000e0062\U000e0079\U000e007f" - FLAG_FOR_JIGAWA_NG_JI = "\U0001f3f4\U000e006e\U000e0067\U000e006a\U000e0069\U000e007f" - FLAG_FOR_BENUE_NG_BE = "\U0001f3f4\U000e006e\U000e0067\U000e0062\U000e0065\U000e007f" - FLAG_FOR_ZINDER_NE_7 = "\U0001f3f4\U000e006e\U000e0065\U000e0037\U000e007f" - FLAG_FOR_OHANGWENA_NA_OW = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e0077\U000e007f" - FLAG_FOR_BAUCHI_NG_BA = "\U0001f3f4\U000e006e\U000e0067\U000e0062\U000e0061\U000e007f" - FLAG_FOR_OMUSATI_NA_OS = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e0073\U000e007f" - FLAG_FOR_KOGI_NG_KO = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e006f\U000e007f" - FLAG_FOR_KADUNA_NG_KD = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e0064\U000e007f" - FLAG_FOR_AGADEZ_NE_1 = "\U0001f3f4\U000e006e\U000e0065\U000e0031\U000e007f" - FLAG_FOR_OSHANA_NA_ON = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e006e\U000e007f" - FLAG_FOR_EKITI_NG_EK = "\U0001f3f4\U000e006e\U000e0067\U000e0065\U000e006b\U000e007f" - FLAG_FOR_AKWA_IBOM_NG_AK = "\U0001f3f4\U000e006e\U000e0067\U000e0061\U000e006b\U000e007f" - FLAG_FOR_NIAMEY_NE_8 = "\U0001f3f4\U000e006e\U000e0065\U000e0038\U000e007f" - FLAG_FOR_ANAMBRA_NG_AN = "\U0001f3f4\U000e006e\U000e0067\U000e0061\U000e006e\U000e007f" - FLAG_FOR_KUNENE_NA_KU = "\U0001f3f4\U000e006e\U000e0061\U000e006b\U000e0075\U000e007f" - FLAG_FOR_ABIA_NG_AB = "\U0001f3f4\U000e006e\U000e0067\U000e0061\U000e0062\U000e007f" - FLAG_FOR_KHOMAS_NA_KH = "\U0001f3f4\U000e006e\U000e0061\U000e006b\U000e0068\U000e007f" - FLAG_FOR_DIFFA_NE_2 = "\U0001f3f4\U000e006e\U000e0065\U000e0032\U000e007f" - FLAG_FOR_KANO_NG_KN = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e006e\U000e007f" + FLAG_FOR_TETE_MZ_T = "\U0001f3f4\U000e006d\U000e007a\U000e0074\U000e007f" + FLAG_FOR_UPPER_NORTH_PROVINCE_MV_UN = "\U0001f3f4\U000e006d\U000e0076\U000e0075\U000e006e\U000e007f" + FLAG_FOR_MANICA_MZ_B = "\U0001f3f4\U000e006d\U000e007a\U000e0062\U000e007f" + FLAG_FOR_PUTRAJAYA_MY_16 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0036\U000e007f" + FLAG_FOR_MAPUTO_MZ_MPM = "\U0001f3f4\U000e006d\U000e007a\U000e006d\U000e0070\U000e006d\U000e007f" + FLAG_FOR_HARDAP_NA_HA = "\U0001f3f4\U000e006e\U000e0061\U000e0068\U000e0061\U000e007f" + FLAG_FOR_NIASSA_MZ_A = "\U0001f3f4\U000e006d\U000e007a\U000e0061\U000e007f" + FLAG_FOR_BAGO_MM_02 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0032\U000e007f" + FLAG_FOR_INHAMBANE_MZ_I = "\U0001f3f4\U000e006d\U000e007a\U000e0069\U000e007f" + FLAG_FOR_ZAMBEZI_NA_CA = "\U0001f3f4\U000e006e\U000e0061\U000e0063\U000e0061\U000e007f" + FLAG_FOR_PERLIS_MY_09 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0039\U000e007f" FLAG_FOR_KAVANGO_WEST_NA_KW = "\U0001f3f4\U000e006e\U000e0061\U000e006b\U000e0077\U000e007f" - FLAG_FOR_GUJARAT_IN_GJ = "\U0001f3f4\U000e0069\U000e006e\U000e0067\U000e006a\U000e007f" - FLAG_FOR_JINOTEGA_NI_JI = "\U0001f3f4\U000e006e\U000e0069\U000e006a\U000e0069\U000e007f" - FLAG_FOR_CHINANDEGA_NI_CI = "\U0001f3f4\U000e006e\U000e0069\U000e0063\U000e0069\U000e007f" - FLAG_FOR_RIVAS_NI_RI = "\U0001f3f4\U000e006e\U000e0069\U000e0072\U000e0069\U000e007f" - FLAG_FOR_NUEVA_SEGOVIA_NI_NS = "\U0001f3f4\U000e006e\U000e0069\U000e006e\U000e0073\U000e007f" - FLAG_FOR_SAINT_JAMES_JM_08 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0038\U000e007f" - FLAG_FOR_ATLANTICO_NORTE_NI_AN = "\U0001f3f4\U000e006e\U000e0069\U000e0061\U000e006e\U000e007f" - FLAG_FOR_HAMADAN_IR_24 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0034\U000e007f" - FLAG_FOR_CURACAO_NL_CW = "\U0001f3f4\U000e006e\U000e006c\U000e0063\U000e0077\U000e007f" - FLAG_FOR_TARABA_NG_TA = "\U0001f3f4\U000e006e\U000e0067\U000e0074\U000e0061\U000e007f" - FLAG_FOR_ZAMFARA_NG_ZA = "\U0001f3f4\U000e006e\U000e0067\U000e007a\U000e0061\U000e007f" - FLAG_FOR_GELDERLAND_NL_GE = "\U0001f3f4\U000e006e\U000e006c\U000e0067\U000e0065\U000e007f" + FLAG_FOR_RIVIERE_DU_REMPART_MU_RR = "\U0001f3f4\U000e006d\U000e0075\U000e0072\U000e0072\U000e007f" + FLAG_FOR_ZACATECAS_MX_ZAC = "\U0001f3f4\U000e006d\U000e0078\U000e007a\U000e0061\U000e0063\U000e007f" + FLAG_FOR_OSHANA_NA_ON = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e006e\U000e007f" + FLAG_FOR_DOSSO_NE_3 = "\U0001f3f4\U000e006e\U000e0065\U000e0033\U000e007f" + FLAG_FOR_KHOMAS_NA_KH = "\U0001f3f4\U000e006e\U000e0061\U000e006b\U000e0068\U000e007f" + FLAG_FOR_TILLABERI_NE_6 = "\U0001f3f4\U000e006e\U000e0065\U000e0036\U000e007f" + FLAG_FOR_KANO_NG_KN = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e006e\U000e007f" + FLAG_FOR_ANAMBRA_NG_AN = "\U0001f3f4\U000e006e\U000e0067\U000e0061\U000e006e\U000e007f" + FLAG_FOR_NIAMEY_NE_8 = "\U0001f3f4\U000e006e\U000e0065\U000e0038\U000e007f" + FLAG_FOR_KADUNA_NG_KD = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e0064\U000e007f" + FLAG_FOR_JIGAWA_NG_JI = "\U0001f3f4\U000e006e\U000e0067\U000e006a\U000e0069\U000e007f" + FLAG_FOR_MARADI_NE_4 = "\U0001f3f4\U000e006e\U000e0065\U000e0034\U000e007f" + FLAG_FOR_OMUSATI_NA_OS = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e0073\U000e007f" + FLAG_FOR_AGADEZ_NE_1 = "\U0001f3f4\U000e006e\U000e0065\U000e0031\U000e007f" + FLAG_FOR_KARAS_NA_KA = "\U0001f3f4\U000e006e\U000e0061\U000e006b\U000e0061\U000e007f" + FLAG_FOR_BENUE_NG_BE = "\U0001f3f4\U000e006e\U000e0067\U000e0062\U000e0065\U000e007f" + FLAG_FOR_KUNENE_NA_KU = "\U0001f3f4\U000e006e\U000e0061\U000e006b\U000e0075\U000e007f" + FLAG_FOR_OHANGWENA_NA_OW = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e0077\U000e007f" + FLAG_FOR_EKITI_NG_EK = "\U0001f3f4\U000e006e\U000e0067\U000e0065\U000e006b\U000e007f" + FLAG_FOR_SIDI_BEL_ABBES_DZ_22 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0032\U000e007f" + FLAG_FOR_EBONYI_NG_EB = "\U0001f3f4\U000e006e\U000e0067\U000e0065\U000e0062\U000e007f" + FLAG_FOR_TAHOUA_NE_5 = "\U0001f3f4\U000e006e\U000e0065\U000e0035\U000e007f" + FLAG_FOR_KATSINA_NG_KT = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e0074\U000e007f" + FLAG_FOR_BAYELSA_NG_BY = "\U0001f3f4\U000e006e\U000e0067\U000e0062\U000e0079\U000e007f" + FLAG_FOR_ABIA_NG_AB = "\U0001f3f4\U000e006e\U000e0067\U000e0061\U000e0062\U000e007f" + FLAG_FOR_OTJOZONDJUPA_NA_OD = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e0064\U000e007f" + FLAG_FOR_ZINDER_NE_7 = "\U0001f3f4\U000e006e\U000e0065\U000e0037\U000e007f" + MAN_WITH_HEADSCARF_LIGHT_SKIN_TONE = "\U0001f9d5\U0001f3fb\u200d\u2642\ufe0f" + FLAG_FOR_DIFFA_NE_2 = "\U0001f3f4\U000e006e\U000e0065\U000e0032\U000e007f" + FLAG_FOR_AKWA_IBOM_NG_AK = "\U0001f3f4\U000e006e\U000e0067\U000e0061\U000e006b\U000e007f" + FLAG_FOR_BOACO_NI_BO = "\U0001f3f4\U000e006e\U000e0069\U000e0062\U000e006f\U000e007f" FLAG_FOR_OYO_NG_OY = "\U0001f3f4\U000e006e\U000e0067\U000e006f\U000e0079\U000e007f" - FLAG_FOR_KEDAH_MY_02 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0032\U000e007f" + FLAG_FOR_CHONTALES_NI_CO = "\U0001f3f4\U000e006e\U000e0069\U000e0063\U000e006f\U000e007f" + FLAG_FOR_NUEVA_SEGOVIA_NI_NS = "\U0001f3f4\U000e006e\U000e0069\U000e006e\U000e0073\U000e007f" + FLAG_FOR_ROTUMA_FJ_R = "\U0001f3f4\U000e0066\U000e006a\U000e0072\U000e007f" + FLAG_FOR_ESTELI_NI_ES = "\U0001f3f4\U000e006e\U000e0069\U000e0065\U000e0073\U000e007f" + FLAG_FOR_MAYOTTE_FR_MAY = "\U0001f3f4\U000e0066\U000e0072\U000e006d\U000e0061\U000e0079\U000e007f" + FLAG_FOR_TARABA_NG_TA = "\U0001f3f4\U000e006e\U000e0067\U000e0074\U000e0061\U000e007f" + FLAG_FOR_CARAZO_NI_CA = "\U0001f3f4\U000e006e\U000e0069\U000e0063\U000e0061\U000e007f" + FLAG_FOR_JINOTEGA_NI_JI = "\U0001f3f4\U000e006e\U000e0069\U000e006a\U000e0069\U000e007f" + FLAG_FOR_GELDERLAND_NL_GE = "\U0001f3f4\U000e006e\U000e006c\U000e0067\U000e0065\U000e007f" + FLAG_FOR_NORTHERN_DISTRICT_IL_Z = "\U0001f3f4\U000e0069\U000e006c\U000e007a\U000e007f" + FLAG_FOR_NASARAWA_NG_NA = "\U0001f3f4\U000e006e\U000e0067\U000e006e\U000e0061\U000e007f" + FLAG_FOR_MANAGUA_NI_MN = "\U0001f3f4\U000e006e\U000e0069\U000e006d\U000e006e\U000e007f" + FLAG_FOR_SANCTI_SPIRITUS_CU_07 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0037\U000e007f" + FLAG_FOR_ZAMFARA_NG_ZA = "\U0001f3f4\U000e006e\U000e0067\U000e007a\U000e0061\U000e007f" + FLAG_FOR_CHINANDEGA_NI_CI = "\U0001f3f4\U000e006e\U000e0069\U000e0063\U000e0069\U000e007f" + FLAG_FOR_MATAGALPA_NI_MT = "\U0001f3f4\U000e006e\U000e0069\U000e006d\U000e0074\U000e007f" FLAG_FOR_MADRIZ_NI_MD = "\U0001f3f4\U000e006e\U000e0069\U000e006d\U000e0064\U000e007f" + FLAG_FOR_RIVAS_NI_RI = "\U0001f3f4\U000e006e\U000e0069\U000e0072\U000e0069\U000e007f" + FLAG_FOR_SAINT_JAMES_JM_08 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0038\U000e007f" + FLAG_FOR_EL_PROGRESO_GT_PR = "\U0001f3f4\U000e0067\U000e0074\U000e0070\U000e0072\U000e007f" + FLAG_FOR_ATLANTICO_NORTE_NI_AN = "\U0001f3f4\U000e006e\U000e0069\U000e0061\U000e006e\U000e007f" + FLAG_FOR_PLATEAU_NG_PL = "\U0001f3f4\U000e006e\U000e0067\U000e0070\U000e006c\U000e007f" + FLAG_FOR_KABARDINO_BALKAR_RU_KB = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0062\U000e007f" FLAG_FOR_FLEVOLAND_NL_FL = "\U0001f3f4\U000e006e\U000e006c\U000e0066\U000e006c\U000e007f" FLAG_FOR_KWARA_NG_KW = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e0077\U000e007f" - FLAG_FOR_LAGOS_NG_LA = "\U0001f3f4\U000e006e\U000e0067\U000e006c\U000e0061\U000e007f" - FLAG_FOR_MANAGUA_NI_MN = "\U0001f3f4\U000e006e\U000e0069\U000e006d\U000e006e\U000e007f" - FLAG_FOR_ATLANTICO_SUR_NI_AS = "\U0001f3f4\U000e006e\U000e0069\U000e0061\U000e0073\U000e007f" - FLAG_FOR_PLATEAU_NG_PL = "\U0001f3f4\U000e006e\U000e0067\U000e0070\U000e006c\U000e007f" - FLAG_FOR_ONDO_NG_ON = "\U0001f3f4\U000e006e\U000e0067\U000e006f\U000e006e\U000e007f" - FLAG_FOR_BOACO_NI_BO = "\U0001f3f4\U000e006e\U000e0069\U000e0062\U000e006f\U000e007f" - FLAG_FOR_SINT_EUSTATIUS_NL_BQ3 = "\U0001f3f4\U000e006e\U000e006c\U000e0062\U000e0071\U000e0033\U000e007f" - FLAG_FOR_GRONINGEN_NL_GR = "\U0001f3f4\U000e006e\U000e006c\U000e0067\U000e0072\U000e007f" - FLAG_FOR_OSUN_NG_OS = "\U0001f3f4\U000e006e\U000e0067\U000e006f\U000e0073\U000e007f" - FLAG_FOR_CHONTALES_NI_CO = "\U0001f3f4\U000e006e\U000e0069\U000e0063\U000e006f\U000e007f" - FLAG_FOR_ESTELI_NI_ES = "\U0001f3f4\U000e006e\U000e0069\U000e0065\U000e0073\U000e007f" - FLAG_FOR_NORTHERN_DISTRICT_IL_Z = "\U0001f3f4\U000e0069\U000e006c\U000e007a\U000e007f" FLAG_FOR_GRANADA_NI_GR = "\U0001f3f4\U000e006e\U000e0069\U000e0067\U000e0072\U000e007f" - FLAG_FOR_NASARAWA_NG_NA = "\U0001f3f4\U000e006e\U000e0067\U000e006e\U000e0061\U000e007f" - FLAG_FOR_MATAGALPA_NI_MT = "\U0001f3f4\U000e006e\U000e0069\U000e006d\U000e0074\U000e007f" - FLAG_FOR_CARAZO_NI_CA = "\U0001f3f4\U000e006e\U000e0069\U000e0063\U000e0061\U000e007f" - FLAG_FOR_PROVENCE_ALPES_COTE_D_AZUR_FR_PAC = "\U0001f3f4\U000e0066\U000e0072\U000e0070\U000e0061\U000e0063\U000e007f" - FLAG_FOR_NORD_TR_NDELAG_NO_17 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0037\U000e007f" - FLAG_FOR_ANIBARE_NR_04 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0034\U000e007f" - FLAG_FOR_AKERSHUS_NO_02 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0032\U000e007f" - FLAG_FOR_NORDLAND_NO_18 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0038\U000e007f" - FLAG_FOR_JAN_MAYEN_NO_22 = "\U0001f3f4\U000e006e\U000e006f\U000e0032\U000e0032\U000e007f" - FLAG_FOR_TROMS_NO_19 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0039\U000e007f" - FLAG_FOR_FINNMARK_NO_20 = "\U0001f3f4\U000e006e\U000e006f\U000e0032\U000e0030\U000e007f" - FLAG_FOR_DIKHIL_DJ_DI = "\U0001f3f4\U000e0064\U000e006a\U000e0064\U000e0069\U000e007f" - FLAG_FOR_UTRECHT_NL_UT = "\U0001f3f4\U000e006e\U000e006c\U000e0075\U000e0074\U000e007f" - FLAG_FOR_STFOLD_NO_01 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0031\U000e007f" - FLAG_FOR_PURWANCHAL_NP_4 = "\U0001f3f4\U000e006e\U000e0070\U000e0034\U000e007f" - FLAG_FOR_M_RE_OG_ROMSDAL_NO_15 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0035\U000e007f" - FLAG_FOR_ROGALAND_NO_11 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0031\U000e007f" - FLAG_FOR_OPPLAND_NO_05 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0035\U000e007f" - FLAG_FOR_ZEELAND_NL_ZE = "\U0001f3f4\U000e006e\U000e006c\U000e007a\U000e0065\U000e007f" - FLAG_FOR_GRAND_GEDEH_LR_GG = "\U0001f3f4\U000e006c\U000e0072\U000e0067\U000e0067\U000e007f" - FLAG_FOR_AUST_AGDER_NO_09 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0039\U000e007f" - FLAG_FOR_ANABAR_NR_02 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0032\U000e007f" - FLAG_FOR_BAITI_NR_05 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0035\U000e007f" - FLAG_FOR_BUSKERUD_NO_06 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0036\U000e007f" - FLAG_FOR_HEDMARK_NO_04 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0034\U000e007f" + FLAG_FOR_SANTIAGO_DE_CUBA_CU_13 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0033\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc" FLAG_FOR_VESTFOLD_NO_07 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0037\U000e007f" - FLAG_FOR_ANETAN_NR_03 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0033\U000e007f" - FLAG_FOR_SVALBARD_NO_21 = "\U0001f3f4\U000e006e\U000e006f\U000e0032\U000e0031\U000e007f" - FLAG_FOR_BOE_NR_06 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0036\U000e007f" - FLAG_FOR_AIWO_NR_01 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0031\U000e007f" - FLAG_FOR_OSLO_NO_03 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0033\U000e007f" - FLAG_FOR_BUADA_NR_07 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0037\U000e007f" + FLAG_FOR_PURWANCHAL_NP_4 = "\U0001f3f4\U000e006e\U000e0070\U000e0034\U000e007f" + FLAG_FOR_STFOLD_NO_01 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0031\U000e007f" FLAG_FOR_S_R_TR_NDELAG_NO_16 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0036\U000e007f" - FLAG_FOR_MADHYA_PASHCHIMANCHAL_NP_2 = "\U0001f3f4\U000e006e\U000e0070\U000e0032\U000e007f" - FLAG_FOR_OVERIJSSEL_NL_OV = "\U0001f3f4\U000e006e\U000e006c\U000e006f\U000e0076\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_JAN_MAYEN_NO_22 = "\U0001f3f4\U000e006e\U000e006f\U000e0032\U000e0032\U000e007f" + FLAG_FOR_LARVOTTO_MC_LA = "\U0001f3f4\U000e006d\U000e0063\U000e006c\U000e0061\U000e007f" FLAG_FOR_CENTRAL_NP_1 = "\U0001f3f4\U000e006e\U000e0070\U000e0031\U000e007f" FLAG_FOR_TELEMARK_NO_08 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0038\U000e007f" - FLAG_FOR_WESTERN_NP_3 = "\U0001f3f4\U000e006e\U000e0070\U000e0033\U000e007f" - FLAG_FOR_GISBORNE_NZ_GIS = "\U0001f3f4\U000e006e\U000e007a\U000e0067\U000e0069\U000e0073\U000e007f" - FLAG_FOR_SOUTHLAND_NZ_STL = "\U0001f3f4\U000e006e\U000e007a\U000e0073\U000e0074\U000e006c\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_TASMAN_NZ_TAS = "\U0001f3f4\U000e006e\U000e007a\U000e0074\U000e0061\U000e0073\U000e007f" - FLAG_FOR_CHATHAM_ISLANDS_NZ_CIT = "\U0001f3f4\U000e006e\U000e007a\U000e0063\U000e0069\U000e0074\U000e007f" - FLAG_FOR_OTAGO_NZ_OTA = "\U0001f3f4\U000e006e\U000e007a\U000e006f\U000e0074\U000e0061\U000e007f" - FLAG_FOR_MARL_NZ_MBH = "\U0001f3f4\U000e006e\U000e007a\U000e006d\U000e0062\U000e0068\U000e007f" - FLAG_FOR_WAIKATO_NZ_WKO = "\U0001f3f4\U000e006e\U000e007a\U000e0077\U000e006b\U000e006f\U000e007f" - FLAG_FOR_DHOFAR_OM_ZU = "\U0001f3f4\U000e006f\U000e006d\U000e007a\U000e0075\U000e007f" - FLAG_FOR_JANUB_ASH_SHARQIYAH_OM_SJ = "\U0001f3f4\U000e006f\U000e006d\U000e0073\U000e006a\U000e007f" - FLAG_FOR_WEST_BENGAL_IN_WB = "\U0001f3f4\U000e0069\U000e006e\U000e0077\U000e0062\U000e007f" - FLAG_FOR_TARANAKI_NZ_TKI = "\U0001f3f4\U000e006e\U000e007a\U000e0074\U000e006b\U000e0069\U000e007f" + FLAG_FOR_MADHYA_PASHCHIMANCHAL_NP_2 = "\U0001f3f4\U000e006e\U000e0070\U000e0032\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + FLAG_FOR_AUST_AGDER_NO_09 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0039\U000e007f" + FLAG_FOR_BALZERS_LI_01 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0031\U000e007f" + FLAG_FOR_M_RE_OG_ROMSDAL_NO_15 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0035\U000e007f" + FLAG_FOR_NORD_TR_NDELAG_NO_17 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0037\U000e007f" + FLAG_FOR_AKERSHUS_NO_02 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0032\U000e007f" + FLAG_FOR_BUSKERUD_NO_06 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0036\U000e007f" + FLAG_FOR_BOE_NR_06 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0036\U000e007f" + FLAG_FOR_NORDLAND_NO_18 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0038\U000e007f" + FLAG_FOR_PRILEP_MK_62 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0032\U000e007f" + FLAG_FOR_BAITI_NR_05 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0035\U000e007f" + FLAG_FOR_ANETAN_NR_03 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0033\U000e007f" + FLAG_FOR_BUADA_NR_07 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0037\U000e007f" + FLAG_FOR_NZEREKORE_REGION_GN_N = "\U0001f3f4\U000e0067\U000e006e\U000e006e\U000e007f" + FLAG_FOR_ONDO_NG_ON = "\U0001f3f4\U000e006e\U000e0067\U000e006f\U000e006e\U000e007f" + FLAG_FOR_OPPLAND_NO_05 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0035\U000e007f" + FLAG_FOR_ANIBARE_NR_04 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0034\U000e007f" FLAG_FOR_MUSCAT_OM_MA = "\U0001f3f4\U000e006f\U000e006d\U000e006d\U000e0061\U000e007f" - FLAG_FOR_EWA_NR_09 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0039\U000e007f" - FLAG_FOR_SHAMAL_ASH_SHARQIYAH_OM_SS = "\U0001f3f4\U000e006f\U000e006d\U000e0073\U000e0073\U000e007f" - FLAG_FOR_COLON_PA_3 = "\U0001f3f4\U000e0070\U000e0061\U000e0033\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_NIBOK_NR_12 = "\U0001f3f4\U000e006e\U000e0072\U000e0031\U000e0032\U000e007f" - FLAG_FOR_UABOE_NR_13 = "\U0001f3f4\U000e006e\U000e0072\U000e0031\U000e0033\U000e007f" - FLAG_FOR_AD_DHAHIRAH_OM_ZA = "\U0001f3f4\U000e006f\U000e006d\U000e007a\U000e0061\U000e007f" - FLAG_FOR_IJUW_NR_10 = "\U0001f3f4\U000e006e\U000e0072\U000e0031\U000e0030\U000e007f" - FLAG_FOR_SHAMAL_AL_BATINAH_OM_BS = "\U0001f3f4\U000e006f\U000e006d\U000e0062\U000e0073\U000e007f" + FLAG_FOR_CHATHAM_ISLANDS_NZ_CIT = "\U0001f3f4\U000e006e\U000e007a\U000e0063\U000e0069\U000e0074\U000e007f" + FLAG_FOR_UNGHENI_MD_UN = "\U0001f3f4\U000e006d\U000e0064\U000e0075\U000e006e\U000e007f" + FLAG_FOR_KANKAN_REGION_GN_K = "\U0001f3f4\U000e0067\U000e006e\U000e006b\U000e007f" + KISS_WOMAN_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" + FLAG_FOR_DAYKUNDI_AF_DAY = "\U0001f3f4\U000e0061\U000e0066\U000e0064\U000e0061\U000e0079\U000e007f" FLAG_FOR_MUSANDAM_OM_MU = "\U0001f3f4\U000e006f\U000e006d\U000e006d\U000e0075\U000e007f" + FLAG_FOR_KARAK_JO_KA = "\U0001f3f4\U000e006a\U000e006f\U000e006b\U000e0061\U000e007f" + FLAG_FOR_JANUB_ASH_SHARQIYAH_OM_SJ = "\U0001f3f4\U000e006f\U000e006d\U000e0073\U000e006a\U000e007f" + FLAG_FOR_WAIKATO_NZ_WKO = "\U0001f3f4\U000e006e\U000e007a\U000e0077\U000e006b\U000e006f\U000e007f" + FLAG_FOR_TELSIAI_COUNTY_LT_TE = "\U0001f3f4\U000e006c\U000e0074\U000e0074\U000e0065\U000e007f" + FLAG_FOR_SHAMAL_ASH_SHARQIYAH_OM_SS = "\U0001f3f4\U000e006f\U000e006d\U000e0073\U000e0073\U000e007f" + TAG_LATIN_CAPITAL_LETTER_U = "\U000e0055" + FLAG_FOR_IJUW_NR_10 = "\U0001f3f4\U000e006e\U000e0072\U000e0031\U000e0030\U000e007f" + FLAG_FOR_COLON_PA_3 = "\U0001f3f4\U000e0070\U000e0061\U000e0033\U000e007f" + FLAG_FOR_SHAMAL_AL_BATINAH_OM_BS = "\U0001f3f4\U000e006f\U000e006d\U000e0062\U000e0073\U000e007f" + FLAG_FOR_DHOFAR_OM_ZU = "\U0001f3f4\U000e006f\U000e006d\U000e007a\U000e0075\U000e007f" + FLAG_FOR_AD_DHAHIRAH_OM_ZA = "\U0001f3f4\U000e006f\U000e006d\U000e007a\U000e0061\U000e007f" + FLAG_FOR_GISBORNE_NZ_GIS = "\U0001f3f4\U000e006e\U000e007a\U000e0067\U000e0069\U000e0073\U000e007f" + FLAG_FOR_ALOJA_LV_005 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0035\U000e007f" + FLAG_FOR_TROMS_NO_19 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0039\U000e007f" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + FLAG_FOR_NIBOK_NR_12 = "\U0001f3f4\U000e006e\U000e0072\U000e0031\U000e0032\U000e007f" FLAG_FOR_JANUB_AL_BATINAH_OM_BJ = "\U0001f3f4\U000e006f\U000e006d\U000e0062\U000e006a\U000e007f" - FLAG_FOR_ICA_PE_ICA = "\U0001f3f4\U000e0070\U000e0065\U000e0069\U000e0063\U000e0061\U000e007f" - FLAG_FOR_LAMBAYEQUE_PE_LAM = "\U0001f3f4\U000e0070\U000e0065\U000e006c\U000e0061\U000e006d\U000e007f" - FLAG_FOR_PUNO_PE_PUN = "\U0001f3f4\U000e0070\U000e0065\U000e0070\U000e0075\U000e006e\U000e007f" - FLAG_FOR_EL_CALLAO_PE_CAL = "\U0001f3f4\U000e0070\U000e0065\U000e0063\U000e0061\U000e006c\U000e007f" - FLAG_FOR_DENIGOMODU_NR_08 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0038\U000e007f" - FLAG_FOR_NGOBE_BUGLE_PA_NB = "\U0001f3f4\U000e0070\U000e0061\U000e006e\U000e0062\U000e007f" - FLAG_FOR_LOS_SANTOS_PA_7 = "\U0001f3f4\U000e0070\U000e0061\U000e0037\U000e007f" - FLAG_FOR_LA_LIBERTAD_PE_LAL = "\U0001f3f4\U000e0070\U000e0065\U000e006c\U000e0061\U000e006c\U000e007f" - FLAG_FOR_LORETO_PE_LOR = "\U0001f3f4\U000e0070\U000e0065\U000e006c\U000e006f\U000e0072\U000e007f" - FLAG_FOR_AMAZONAS_PE_AMA = "\U0001f3f4\U000e0070\U000e0065\U000e0061\U000e006d\U000e0061\U000e007f" - FLAG_FOR_CHIMBU_PG_CPK = "\U0001f3f4\U000e0070\U000e0067\U000e0063\U000e0070\U000e006b\U000e007f" - FLAG_FOR_CENTRAL_PG_CPM = "\U0001f3f4\U000e0070\U000e0067\U000e0063\U000e0070\U000e006d\U000e007f" - FLAG_FOR_SAN_MARTIN_PE_SAM = "\U0001f3f4\U000e0070\U000e0065\U000e0073\U000e0061\U000e006d\U000e007f" - FLAG_FOR_PASCO_PE_PAS = "\U0001f3f4\U000e0070\U000e0065\U000e0070\U000e0061\U000e0073\U000e007f" - FLAG_FOR_GUNA_YALA_PA_KY = "\U0001f3f4\U000e0070\U000e0061\U000e006b\U000e0079\U000e007f" - FLAG_FOR_VERAGUAS_PA_9 = "\U0001f3f4\U000e0070\U000e0061\U000e0039\U000e007f" - FLAG_FOR_HUANUCO_PE_HUC = "\U0001f3f4\U000e0070\U000e0065\U000e0068\U000e0075\U000e0063\U000e007f" - FLAG_FOR_HERRERA_PA_6 = "\U0001f3f4\U000e0070\U000e0061\U000e0036\U000e007f" - FLAG_FOR_DARIEN_PA_5 = "\U0001f3f4\U000e0070\U000e0061\U000e0035\U000e007f" - FLAG_FOR_EMBERA_PA_EM = "\U0001f3f4\U000e0070\U000e0061\U000e0065\U000e006d\U000e007f" - FLAG_FOR_UCAYALI_PE_UCA = "\U0001f3f4\U000e0070\U000e0065\U000e0075\U000e0063\U000e0061\U000e007f" - FLAG_FOR_PIURA_PE_PIU = "\U0001f3f4\U000e0070\U000e0065\U000e0070\U000e0069\U000e0075\U000e007f" - FLAG_FOR_PANAMA_PA_8 = "\U0001f3f4\U000e0070\U000e0061\U000e0038\U000e007f" FLAG_FOR_TUMBES_PE_TUM = "\U0001f3f4\U000e0070\U000e0065\U000e0074\U000e0075\U000e006d\U000e007f" - FLAG_FOR_JUNIN_PE_JUN = "\U0001f3f4\U000e0070\U000e0065\U000e006a\U000e0075\U000e006e\U000e007f" - FLAG_FOR_MOQUEGUA_PE_MOQ = "\U0001f3f4\U000e0070\U000e0065\U000e006d\U000e006f\U000e0071\U000e007f" - FLAG_FOR_BOCAS_DEL_TORO_PA_1 = "\U0001f3f4\U000e0070\U000e0061\U000e0031\U000e007f" - FLAG_FOR_CAJAMARCA_PE_CAJ = "\U0001f3f4\U000e0070\U000e0065\U000e0063\U000e0061\U000e006a\U000e007f" + FLAG_FOR_EL_CALLAO_PE_CAL = "\U0001f3f4\U000e0070\U000e0065\U000e0063\U000e0061\U000e006c\U000e007f" + FLAG_FOR_PUNO_PE_PUN = "\U0001f3f4\U000e0070\U000e0065\U000e0070\U000e0075\U000e006e\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_PASCO_PE_PAS = "\U0001f3f4\U000e0070\U000e0065\U000e0070\U000e0061\U000e0073\U000e007f" FLAG_FOR_LIMA_PE_LMA = "\U0001f3f4\U000e0070\U000e0065\U000e006c\U000e006d\U000e0061\U000e007f" - FLAG_FOR_TACNA_PE_TAC = "\U0001f3f4\U000e0070\U000e0065\U000e0074\U000e0061\U000e0063\U000e007f" + FLAG_FOR_MECKLENBURG_VORPOMMERN_DE_MV = "\U0001f3f4\U000e0064\U000e0065\U000e006d\U000e0076\U000e007f" + FLAG_FOR_PIURA_PE_PIU = "\U0001f3f4\U000e0070\U000e0065\U000e0070\U000e0069\U000e0075\U000e007f" + FLAG_FOR_ICA_PE_ICA = "\U0001f3f4\U000e0070\U000e0065\U000e0069\U000e0063\U000e0061\U000e007f" + FLAG_FOR_GITEGA_BI_GI = "\U0001f3f4\U000e0062\U000e0069\U000e0067\U000e0069\U000e007f" + FLAG_FOR_UCAYALI_PE_UCA = "\U0001f3f4\U000e0070\U000e0065\U000e0075\U000e0063\U000e0061\U000e007f" + FLAG_FOR_DENIGOMODU_NR_08 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0038\U000e007f" + FLAG_FOR_HUANUCO_PE_HUC = "\U0001f3f4\U000e0070\U000e0065\U000e0068\U000e0075\U000e0063\U000e007f" + FLAG_FOR_JUNIN_PE_JUN = "\U0001f3f4\U000e0070\U000e0065\U000e006a\U000e0075\U000e006e\U000e007f" + FLAG_FOR_LA_LIBERTAD_PE_LAL = "\U0001f3f4\U000e0070\U000e0065\U000e006c\U000e0061\U000e006c\U000e007f" + FLAG_FOR_CHIMBU_PG_CPK = "\U0001f3f4\U000e0070\U000e0067\U000e0063\U000e0070\U000e006b\U000e007f" + FLAG_FOR_CAJAMARCA_PE_CAJ = "\U0001f3f4\U000e0070\U000e0065\U000e0063\U000e0061\U000e006a\U000e007f" + FLAG_FOR_BALKAN_TM_B = "\U0001f3f4\U000e0074\U000e006d\U000e0062\U000e007f" + FLAG_FOR_VERAGUAS_PA_9 = "\U0001f3f4\U000e0070\U000e0061\U000e0039\U000e007f" + FLAG_FOR_LAMBAYEQUE_PE_LAM = "\U0001f3f4\U000e0070\U000e0065\U000e006c\U000e0061\U000e006d\U000e007f" + FLAG_FOR_AMAZONAS_PE_AMA = "\U0001f3f4\U000e0070\U000e0065\U000e0061\U000e006d\U000e0061\U000e007f" + FLAG_FOR_NORTH_JEOLLA_KR_45 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0035\U000e007f" FLAG_FOR_HUANCAVELICA_PE_HUV = "\U0001f3f4\U000e0070\U000e0065\U000e0068\U000e0075\U000e0076\U000e007f" - FLAG_FOR_ANCASH_PE_ANC = "\U0001f3f4\U000e0070\U000e0065\U000e0061\U000e006e\U000e0063\U000e007f" - FLAG_FOR_DAVAO_PH_11 = "\U0001f3f4\U000e0070\U000e0068\U000e0031\U000e0031\U000e007f" - FLAG_FOR_ZAMBOANGA_PENINSULA_PH_09 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0039\U000e007f" - FLAG_FOR_WESTERN_FJ_W = "\U0001f3f4\U000e0066\U000e006a\U000e0077\U000e007f" - FLAG_FOR_EAST_SEPIK_PG_ESW = "\U0001f3f4\U000e0070\U000e0067\U000e0065\U000e0073\U000e0077\U000e007f" - FLAG_FOR_ALSUNGA_LV_006 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0036\U000e007f" - FLAG_FOR_JIWAKA_PG_JWK = "\U0001f3f4\U000e0070\U000e0067\U000e006a\U000e0077\U000e006b\U000e007f" - FLAG_FOR_SOUTHERN_HIGHLANDS_PG_SHM = "\U0001f3f4\U000e0070\U000e0067\U000e0073\U000e0068\U000e006d\U000e007f" - FLAG_FOR_CENTRAL_LUZON_PH_03 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0033\U000e007f" - FLAG_FOR_WESTERN_PG_WPD = "\U0001f3f4\U000e0070\U000e0067\U000e0077\U000e0070\U000e0064\U000e007f" - FLAG_FOR_EASTERN_VISAYAS_PH_08 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0038\U000e007f" - FLAG_FOR_BOUGAINVILLE_PG_NSB = "\U0001f3f4\U000e0070\U000e0067\U000e006e\U000e0073\U000e0062\U000e007f" - FLAG_FOR_CALABARZON_PH_40 = "\U0001f3f4\U000e0070\U000e0068\U000e0034\U000e0030\U000e007f" - FLAG_FOR_ENGA_PG_EPW = "\U0001f3f4\U000e0070\U000e0067\U000e0065\U000e0070\U000e0077\U000e007f" - FLAG_FOR_MADANG_PG_MPM = "\U0001f3f4\U000e0070\U000e0067\U000e006d\U000e0070\U000e006d\U000e007f" - FLAG_FOR_HELA_PG_HLA = "\U0001f3f4\U000e0070\U000e0067\U000e0068\U000e006c\U000e0061\U000e007f" - FLAG_FOR_PAHANG_MY_06 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0036\U000e007f" - FLAG_FOR_NORTHERN_MINDANAO_PH_10 = "\U0001f3f4\U000e0070\U000e0068\U000e0031\U000e0030\U000e007f" - FLAG_FOR_ORO_PG_NPP = "\U0001f3f4\U000e0070\U000e0067\U000e006e\U000e0070\U000e0070\U000e007f" - FLAG_FOR_MOROBE_PG_MPL = "\U0001f3f4\U000e0070\U000e0067\U000e006d\U000e0070\U000e006c\U000e007f" - FLAG_FOR_ISLAMABAD_PK_IS = "\U0001f3f4\U000e0070\U000e006b\U000e0069\U000e0073\U000e007f" - FLAG_FOR_GILGIT_BALTISTAN_PK_GB = "\U0001f3f4\U000e0070\U000e006b\U000e0067\U000e0062\U000e007f" - FLAG_FOR_CARAGA_PH_13 = "\U0001f3f4\U000e0070\U000e0068\U000e0031\U000e0033\U000e007f" - FLAG_FOR_WESTERN_VISAYAS_PH_06 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0036\U000e007f" - FLAG_FOR_MIMAROPA_PH_41 = "\U0001f3f4\U000e0070\U000e0068\U000e0034\U000e0031\U000e007f" + FLAG_FOR_DARIEN_PA_5 = "\U0001f3f4\U000e0070\U000e0061\U000e0035\U000e007f" + FLAG_FOR_ROGALAND_NO_11 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0031\U000e007f" + FLAG_FOR_LORETO_PE_LOR = "\U0001f3f4\U000e0070\U000e0065\U000e006c\U000e006f\U000e0072\U000e007f" + FLAG_FOR_SAN_MARTIN_PE_SAM = "\U0001f3f4\U000e0070\U000e0065\U000e0073\U000e0061\U000e006d\U000e007f" + FLAG_FOR_CHONGQING_CN_50 = "\U0001f3f4\U000e0063\U000e006e\U000e0035\U000e0030\U000e007f" FLAG_FOR_SANDAUN_PG_SAN = "\U0001f3f4\U000e0070\U000e0067\U000e0073\U000e0061\U000e006e\U000e007f" + FLAG_FOR_CIUDAD_DE_MEXICO_MX_CMX = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e006d\U000e0078\U000e007f" + FLAG_FOR_OSUN_NG_OS = "\U0001f3f4\U000e006e\U000e0067\U000e006f\U000e0073\U000e007f" + MAHJONG_TILE_TWO_OF_CIRCLES = "\U0001f01a" + FLAG_FOR_HEDMARK_NO_04 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0034\U000e007f" + COUPLE_WITH_HEART_MAN_MAN_MEDIUM_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" + FLAG_FOR_NORTHERN_MINDANAO_PH_10 = "\U0001f3f4\U000e0070\U000e0068\U000e0031\U000e0030\U000e007f" + FLAG_FOR_MADANG_PG_MPM = "\U0001f3f4\U000e0070\U000e0067\U000e006d\U000e0070\U000e006d\U000e007f" + FLAG_FOR_WESTERN_PG_WPD = "\U0001f3f4\U000e0070\U000e0067\U000e0077\U000e0070\U000e0064\U000e007f" + FLAG_FOR_SOUTH_PYONGAN_KP_02 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0032\U000e007f" + FLAG_FOR_EASTERN_VISAYAS_PH_08 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0038\U000e007f" + FLAG_FOR_WESTERN_FJ_W = "\U0001f3f4\U000e0066\U000e006a\U000e0077\U000e007f" FLAG_FOR_SOCCSKSARGEN_PH_12 = "\U0001f3f4\U000e0070\U000e0068\U000e0031\U000e0032\U000e007f" - FLAG_FOR_MANUS_PG_MRL = "\U0001f3f4\U000e0070\U000e0067\U000e006d\U000e0072\U000e006c\U000e007f" + FLAG_FOR_MOROBE_PG_MPL = "\U0001f3f4\U000e0070\U000e0067\U000e006d\U000e0070\U000e006c\U000e007f" + FLAG_FOR_MIMAROPA_PH_41 = "\U0001f3f4\U000e0070\U000e0068\U000e0034\U000e0031\U000e007f" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" + FLAG_FOR_HELA_PG_HLA = "\U0001f3f4\U000e0070\U000e0067\U000e0068\U000e006c\U000e0061\U000e007f" + FLAG_FOR_CALABARZON_PH_40 = "\U0001f3f4\U000e0070\U000e0068\U000e0034\U000e0030\U000e007f" + FLAG_FOR_ZAMBOANGA_PENINSULA_PH_09 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0039\U000e007f" + FLAG_FOR_HERRERA_PA_6 = "\U0001f3f4\U000e0070\U000e0061\U000e0036\U000e007f" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + FLAG_FOR_EDO_NG_ED = "\U0001f3f4\U000e006e\U000e0067\U000e0065\U000e0064\U000e007f" FLAG_FOR_MILNE_BAY_PG_MBA = "\U0001f3f4\U000e0070\U000e0067\U000e006d\U000e0062\U000e0061\U000e007f" - FLAG_FOR_WARMIAN_MASURIA_PL_WN = "\U0001f3f4\U000e0070\U000e006c\U000e0077\U000e006e\U000e007f" - FLAG_FOR_SWIETOKRZYSKIE_PL_SK = "\U0001f3f4\U000e0070\U000e006c\U000e0073\U000e006b\U000e007f" - FLAG_FOR_GREATER_POLAND_PL_WP = "\U0001f3f4\U000e0070\U000e006c\U000e0077\U000e0070\U000e007f" - FLAG_FOR_ODZ_PL_LD = "\U0001f3f4\U000e0070\U000e006c\U000e006c\U000e0064\U000e007f" - FLAG_FOR_LUBUSZ_PL_LB = "\U0001f3f4\U000e0070\U000e006c\U000e006c\U000e0062\U000e007f" - FLAG_FOR_JERICHO_PS_JRH = "\U0001f3f4\U000e0070\U000e0073\U000e006a\U000e0072\U000e0068\U000e007f" - TAG_RIGHT_SQUARE_BRACKET = "\U000e005d" - FLAG_FOR_FEDERAL_CAPITAL_TERRITORY_PL_PM = "\U0001f3f4\U000e0070\U000e006c\U000e0070\U000e006d\U000e007f" - FLAG_FOR_KHAN_YUNIS_PS_KYS = "\U0001f3f4\U000e0070\U000e0073\U000e006b\U000e0079\U000e0073\U000e007f" - FLAG_FOR_RAFAH_PS_RFH = "\U0001f3f4\U000e0070\U000e0073\U000e0072\U000e0066\U000e0068\U000e007f" - FLAG_FOR_AVEIRO_PT_01 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0031\U000e007f" - FLAG_FOR_PUNJAB_PK_PB = "\U0001f3f4\U000e0070\U000e006b\U000e0070\U000e0062\U000e007f" - FLAG_FOR_OPOLE_PL_OP = "\U0001f3f4\U000e0070\U000e006c\U000e006f\U000e0070\U000e007f" - FLAG_FOR_HEBRON_PS_HBN = "\U0001f3f4\U000e0070\U000e0073\U000e0068\U000e0062\U000e006e\U000e007f" - FLAG_FOR_SILESIA_PL_SL = "\U0001f3f4\U000e0070\U000e006c\U000e0073\U000e006c\U000e007f" - FLAG_FOR_JOHOR_MY_01 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0031\U000e007f" - FLAG_FOR_LOWER_SILESIAN_PL_DS = "\U0001f3f4\U000e0070\U000e006c\U000e0064\U000e0073\U000e007f" - FLAG_FOR_QALQILYA_PS_QQA = "\U0001f3f4\U000e0070\U000e0073\U000e0071\U000e0071\U000e0061\U000e007f" - FLAG_FOR_SINDH_PK_SD = "\U0001f3f4\U000e0070\U000e006b\U000e0073\U000e0064\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_WESTERN_VISAYAS_PH_06 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0036\U000e007f" + FLAG_FOR_ANABAR_NR_02 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0032\U000e007f" + FLAG_FOR_CARAGA_PH_13 = "\U0001f3f4\U000e0070\U000e0068\U000e0031\U000e0033\U000e007f" + FLAG_FOR_KOGI_NG_KO = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e006f\U000e007f" + FLAG_FOR_GUANACASTE_CR_G = "\U0001f3f4\U000e0063\U000e0072\U000e0067\U000e007f" + FLAG_FOR_COROZAL_BZ_CZL = "\U0001f3f4\U000e0062\U000e007a\U000e0063\U000e007a\U000e006c\U000e007f" + FLAG_FOR_ALSUNGA_LV_006 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0036\U000e007f" FLAG_FOR_TULKARM_PS_TKM = "\U0001f3f4\U000e0070\U000e0073\U000e0074\U000e006b\U000e006d\U000e007f" + FLAG_FOR_OPOLE_PL_OP = "\U0001f3f4\U000e0070\U000e006c\U000e006f\U000e0070\U000e007f" FLAG_FOR_KHYBER_PAKHTUNKHWA_PK_KP = "\U0001f3f4\U000e0070\U000e006b\U000e006b\U000e0070\U000e007f" - FLAG_FOR_SALFIT_PS_SLT = "\U0001f3f4\U000e0070\U000e0073\U000e0073\U000e006c\U000e0074\U000e007f" - FLAG_FOR_BICOL_PH_05 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0035\U000e007f" - FLAG_FOR_JENIN_PS_JEN = "\U0001f3f4\U000e0070\U000e0073\U000e006a\U000e0065\U000e006e\U000e007f" FLAG_FOR_WEST_POMERANIA_PL_ZP = "\U0001f3f4\U000e0070\U000e006c\U000e007a\U000e0070\U000e007f" - FLAG_FOR_LESSER_POLAND_PL_MA = "\U0001f3f4\U000e0070\U000e006c\U000e006d\U000e0061\U000e007f" + FLAG_FOR_KURDAMIR_AZ_KUR = "\U0001f3f4\U000e0061\U000e007a\U000e006b\U000e0075\U000e0072\U000e007f" + FLAG_FOR_LUBUSZ_PL_LB = "\U0001f3f4\U000e0070\U000e006c\U000e006c\U000e0062\U000e007f" + FLAG_FOR_HEBRON_PS_HBN = "\U0001f3f4\U000e0070\U000e0073\U000e0068\U000e0062\U000e006e\U000e007f" + FLAG_FOR_RAFAH_PS_RFH = "\U0001f3f4\U000e0070\U000e0073\U000e0072\U000e0066\U000e0068\U000e007f" + FLAG_FOR_WARMIAN_MASURIA_PL_WN = "\U0001f3f4\U000e0070\U000e006c\U000e0077\U000e006e\U000e007f" + FLAG_FOR_PUNJAB_PK_PB = "\U0001f3f4\U000e0070\U000e006b\U000e0070\U000e0062\U000e007f" + FLAG_FOR_AVEIRO_PT_01 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0031\U000e007f" FLAG_FOR_MAZOVIA_PL_MZ = "\U0001f3f4\U000e0070\U000e006c\U000e006d\U000e007a\U000e007f" FLAG_FOR_LUBLIN_PL_LU = "\U0001f3f4\U000e0070\U000e006c\U000e006c\U000e0075\U000e007f" FLAG_FOR_NABLUS_PS_NBS = "\U0001f3f4\U000e0070\U000e0073\U000e006e\U000e0062\U000e0073\U000e007f" - FLAG_FOR_SUBCARPATHIA_PL_PK = "\U0001f3f4\U000e0070\U000e006c\U000e0070\U000e006b\U000e007f" - FLAG_FOR_PODLASKIE_PL_PD = "\U0001f3f4\U000e0070\U000e006c\U000e0070\U000e0064\U000e007f" + FLAG_FOR_QALQILYA_PS_QQA = "\U0001f3f4\U000e0070\U000e0073\U000e0071\U000e0071\U000e0061\U000e007f" FLAG_FOR_KUYAVIAN_POMERANIA_PL_KP = "\U0001f3f4\U000e0070\U000e006c\U000e006b\U000e0070\U000e007f" - FLAG_FOR_TUBAS_PS_TBS = "\U0001f3f4\U000e0070\U000e0073\U000e0074\U000e0062\U000e0073\U000e007f" - FLAG_FOR_NORTH_GAZA_PS_NGZ = "\U0001f3f4\U000e0070\U000e0073\U000e006e\U000e0067\U000e007a\U000e007f" - FLAG_FOR_CENTRAL_PY_11 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0031\U000e007f" - FLAG_FOR_COIMBRA_PT_06 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0036\U000e007f" + FLAG_FOR_SINDH_PK_SD = "\U0001f3f4\U000e0070\U000e006b\U000e0073\U000e0064\U000e007f" + FLAG_FOR_PODLASKIE_PL_PD = "\U0001f3f4\U000e0070\U000e006c\U000e0070\U000e0064\U000e007f" + FLAG_FOR_DAVAO_PH_11 = "\U0001f3f4\U000e0070\U000e0068\U000e0031\U000e0031\U000e007f" + FLAG_FOR_SUBCARPATHIA_PL_PK = "\U0001f3f4\U000e0070\U000e006c\U000e0070\U000e006b\U000e007f" + FLAG_FOR_ODZ_PL_LD = "\U0001f3f4\U000e0070\U000e006c\U000e006c\U000e0064\U000e007f" + FLAG_FOR_SALFIT_PS_SLT = "\U0001f3f4\U000e0070\U000e0073\U000e0073\U000e006c\U000e0074\U000e007f" + FLAG_FOR_JENIN_PS_JEN = "\U0001f3f4\U000e0070\U000e0073\U000e006a\U000e0065\U000e006e\U000e007f" + FLAG_FOR_SILESIA_PL_SL = "\U0001f3f4\U000e0070\U000e006c\U000e0073\U000e006c\U000e007f" + FLAG_FOR_KHAN_YUNIS_PS_KYS = "\U0001f3f4\U000e0070\U000e0073\U000e006b\U000e0079\U000e0073\U000e007f" + TAG_RIGHT_SQUARE_BRACKET = "\U000e005d" + FLAG_FOR_MOSCOW_PROVINCE_RU_MOS = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e006f\U000e0073\U000e007f" + FLAG_FOR_TUSCANY_IT_52 = "\U0001f3f4\U000e0069\U000e0074\U000e0035\U000e0032\U000e007f" + FLAG_FOR_BICOL_PH_05 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0035\U000e007f" + TAG_LATIN_CAPITAL_LETTER_K = "\U000e004b" + FLAG_FOR_LOWER_SILESIAN_PL_DS = "\U0001f3f4\U000e0070\U000e006c\U000e0064\U000e0073\U000e007f" + FLAG_FOR_CAGAYAN_VALLEY_PH_02 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0032\U000e007f" + FLAG_FOR_RIO_DE_JANEIRO_BR_RJ = "\U0001f3f4\U000e0062\U000e0072\U000e0072\U000e006a\U000e007f" FLAG_FOR_EVORA_PT_07 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0037\U000e007f" FLAG_FOR_NGARAARD_PW_214 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0031\U000e0034\U000e007f" - FLAG_FOR_CAGAYAN_VALLEY_PH_02 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0032\U000e007f" - FLAG_FOR_NEEMBUCU_PY_12 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0032\U000e007f" - FLAG_FOR_NGATPANG_PW_224 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0032\U000e0034\U000e007f" - FLAG_FOR_AMAMBAY_PY_13 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0033\U000e007f" - FLAG_FOR_SETUBAL_PT_15 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0035\U000e007f" - FLAG_FOR_AIRAI_PW_004 = "\U0001f3f4\U000e0070\U000e0077\U000e0030\U000e0030\U000e0034\U000e007f" - FLAG_FOR_PORTALEGRE_PT_12 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0032\U000e007f" FLAG_FOR_BRAGANCA_PT_04 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0034\U000e007f" - FLAG_FOR_ANGAUR_PW_010 = "\U0001f3f4\U000e0070\U000e0077\U000e0030\U000e0031\U000e0030\U000e007f" - FLAG_FOR_NGARDMAU_PW_222 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0032\U000e0032\U000e007f" - FLAG_FOR_KOROR_PW_150 = "\U0001f3f4\U000e0070\U000e0077\U000e0031\U000e0035\U000e0030\U000e007f" - FLAG_FOR_PRESIDENTE_HAYES_PY_15 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0035\U000e007f" - FLAG_FOR_CANINDEYU_PY_14 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0034\U000e007f" - FLAG_FOR_NGEREMLENGUI_PW_227 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0032\U000e0037\U000e007f" - FLAG_FOR_VILA_REAL_PT_17 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0037\U000e007f" - FLAG_FOR_SARAWAK_MY_13 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0033\U000e007f" - FLAG_FOR_VIANA_DO_CASTELO_PT_16 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0036\U000e007f" - FLAG_FOR_SANTAREM_PT_14 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0034\U000e007f" - FLAG_FOR_CASTELO_BRANCO_PT_05 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0035\U000e007f" - FLAG_FOR_ALTO_PARANA_PY_10 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0030\U000e007f" - FLAG_FOR_PORTO_PT_13 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0033\U000e007f" - FLAG_FOR_COCLE_PA_2 = "\U0001f3f4\U000e0070\U000e0061\U000e0032\U000e007f" - FLAG_FOR_HATOHOBEI_PW_050 = "\U0001f3f4\U000e0070\U000e0077\U000e0030\U000e0035\U000e0030\U000e007f" + FLAG_FOR_SHIDA_KARTLI_GE_SK = "\U0001f3f4\U000e0067\U000e0065\U000e0073\U000e006b\U000e007f" FLAG_FOR_MENENG_NR_11 = "\U0001f3f4\U000e006e\U000e0072\U000e0031\U000e0031\U000e007f" - FLAG_FOR_SONSOROL_PW_370 = "\U0001f3f4\U000e0070\U000e0077\U000e0033\U000e0037\U000e0030\U000e007f" FLAG_FOR_AIMELIIK_PW_002 = "\U0001f3f4\U000e0070\U000e0077\U000e0030\U000e0030\U000e0032\U000e007f" - FLAG_FOR_NGCHESAR_PW_226 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0032\U000e0036\U000e007f" + FLAG_FOR_AMAMBAY_PY_13 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0033\U000e007f" + FLAG_FOR_HATOHOBEI_PW_050 = "\U0001f3f4\U000e0070\U000e0077\U000e0030\U000e0035\U000e0030\U000e007f" + FLAG_FOR_CENTRAL_PY_11 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0031\U000e007f" + FLAG_FOR_COIMBRA_PT_06 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0036\U000e007f" + FLAG_FOR_CENTRAL_PG_CPM = "\U0001f3f4\U000e0070\U000e0067\U000e0063\U000e0070\U000e006d\U000e007f" + FLAG_FOR_KOROR_PW_150 = "\U0001f3f4\U000e0070\U000e0077\U000e0031\U000e0035\U000e0030\U000e007f" + FLAG_FOR_COCLE_PA_2 = "\U0001f3f4\U000e0070\U000e0061\U000e0032\U000e007f" + FLAG_FOR_NEEMBUCU_PY_12 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0032\U000e007f" + FLAG_FOR_AIRAI_PW_004 = "\U0001f3f4\U000e0070\U000e0077\U000e0030\U000e0030\U000e0034\U000e007f" + FLAG_FOR_SANTAREM_PT_14 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0034\U000e007f" + FLAG_FOR_NGATPANG_PW_224 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0032\U000e0034\U000e007f" + FLAG_FOR_PORTALEGRE_PT_12 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0032\U000e007f" FLAG_FOR_LEIRIA_PT_10 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0030\U000e007f" - FLAG_FOR_GUARDA_PT_09 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0039\U000e007f" - FLAG_FOR_BUZAU_RO_BZ = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e007a\U000e007f" - FLAG_FOR_SAN_PEDRO_PY_2 = "\U0001f3f4\U000e0070\U000e0079\U000e0032\U000e007f" - FLAG_FOR_CAAGUAZU_PY_5 = "\U0001f3f4\U000e0070\U000e0079\U000e0035\U000e007f" - FLAG_FOR_CAPITAL_IS_1 = "\U0001f3f4\U000e0069\U000e0073\U000e0031\U000e007f" - FLAG_FOR_GUAIRA_PY_4 = "\U0001f3f4\U000e0070\U000e0079\U000e0034\U000e007f" - FLAG_FOR_ITAPUA_PY_7 = "\U0001f3f4\U000e0070\U000e0079\U000e0037\U000e007f" - FLAG_FOR_CAAZAPA_PY_6 = "\U0001f3f4\U000e0070\U000e0079\U000e0036\U000e007f" - FLAG_FOR_AL_KHOR_QA_KH = "\U0001f3f4\U000e0071\U000e0061\U000e006b\U000e0068\U000e007f" - FLAG_FOR_BISTRITA_NASAUD_RO_BN = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e006e\U000e007f" - FLAG_FOR_GOIAS_BR_GO = "\U0001f3f4\U000e0062\U000e0072\U000e0067\U000e006f\U000e007f" - FLAG_FOR_AL_RAYYAN_QA_RA = "\U0001f3f4\U000e0071\U000e0061\U000e0072\U000e0061\U000e007f" - FLAG_FOR_CLUJ_RO_CJ = "\U0001f3f4\U000e0072\U000e006f\U000e0063\U000e006a\U000e007f" + FLAG_FOR_NGARDMAU_PW_222 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0032\U000e0032\U000e007f" + FLAG_FOR_NGCHESAR_PW_226 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0032\U000e0036\U000e007f" + FLAG_FOR_NORTH_HWANGHAE_KP_06 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0036\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" + FLAG_FOR_WESTERN_NP_3 = "\U0001f3f4\U000e006e\U000e0070\U000e0033\U000e007f" + FLAG_FOR_VIANA_DO_CASTELO_PT_16 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0036\U000e007f" + FLAG_FOR_CANINDEYU_PY_14 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0034\U000e007f" FLAG_FOR_CORDILLERA_PY_3 = "\U0001f3f4\U000e0070\U000e0079\U000e0033\U000e007f" - FLAG_FOR_DOLJ_RO_DJ = "\U0001f3f4\U000e0072\U000e006f\U000e0064\U000e006a\U000e007f" - FLAG_FOR_HARGHITA_RO_HR = "\U0001f3f4\U000e0072\U000e006f\U000e0068\U000e0072\U000e007f" - FLAG_FOR_ARGES_RO_AG = "\U0001f3f4\U000e0072\U000e006f\U000e0061\U000e0067\U000e007f" - FLAG_FOR_AL_DAAYEN_QA_ZA = "\U0001f3f4\U000e0071\U000e0061\U000e007a\U000e0061\U000e007f" - FLAG_FOR_JERUSALEM_PS_JEM = "\U0001f3f4\U000e0070\U000e0073\U000e006a\U000e0065\U000e006d\U000e007f" - FLAG_FOR_CONSTANTA_RO_CT = "\U0001f3f4\U000e0072\U000e006f\U000e0063\U000e0074\U000e007f" - FLAG_FOR_BIHOR_RO_BH = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e0068\U000e007f" - FLAG_FOR_CONCEPCION_PY_1 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e007f" - FLAG_FOR_GALATI_RO_GL = "\U0001f3f4\U000e0072\U000e006f\U000e0067\U000e006c\U000e007f" - FLAG_FOR_ASUNCION_PY_ASU = "\U0001f3f4\U000e0070\U000e0079\U000e0061\U000e0073\U000e0075\U000e007f" - FLAG_FOR_BACAU_RO_BC = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e0063\U000e007f" - FLAG_FOR_BOQUERON_PY_19 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0039\U000e007f" - FLAG_FOR_MISIONES_PY_8 = "\U0001f3f4\U000e0070\U000e0079\U000e0038\U000e007f" - FLAG_FOR_CARAS_SEVERIN_RO_CS = "\U0001f3f4\U000e0072\U000e006f\U000e0063\U000e0073\U000e007f" - FLAG_FOR_PARAGUARI_PY_9 = "\U0001f3f4\U000e0070\U000e0079\U000e0039\U000e007f" - FLAG_FOR_BRAILA_RO_BR = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e0072\U000e007f" + FLAG_FOR_CAAZAPA_PY_6 = "\U0001f3f4\U000e0070\U000e0079\U000e0036\U000e007f" FLAG_FOR_COVASNA_RO_CV = "\U0001f3f4\U000e0072\U000e006f\U000e0063\U000e0076\U000e007f" - FLAG_FOR_DAMBOVITA_RO_DB = "\U0001f3f4\U000e0072\U000e006f\U000e0064\U000e0062\U000e007f" - FLAG_FOR_BUCHAREST_RO_B = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e007f" - FLAG_FOR_ALBA_RO_AB = "\U0001f3f4\U000e0072\U000e006f\U000e0061\U000e0062\U000e007f" - FLAG_FOR_MADINAT_ASH_SHAMAL_QA_MS = "\U0001f3f4\U000e0071\U000e0061\U000e006d\U000e0073\U000e007f" - FLAG_FOR_AL_WAKRAH_QA_WA = "\U0001f3f4\U000e0071\U000e0061\U000e0077\U000e0061\U000e007f" FLAG_FOR_GIURGIU_RO_GR = "\U0001f3f4\U000e0072\U000e006f\U000e0067\U000e0072\U000e007f" - FLAG_FOR_HUNEDOARA_RO_HD = "\U0001f3f4\U000e0072\U000e006f\U000e0068\U000e0064\U000e007f" + FLAG_FOR_DAMBOVITA_RO_DB = "\U0001f3f4\U000e0072\U000e006f\U000e0064\U000e0062\U000e007f" + FLAG_FOR_ITAPUA_PY_7 = "\U0001f3f4\U000e0070\U000e0079\U000e0037\U000e007f" + FLAG_FOR_CAAGUAZU_PY_5 = "\U0001f3f4\U000e0070\U000e0079\U000e0035\U000e007f" + FLAG_FOR_SAN_PEDRO_PY_2 = "\U0001f3f4\U000e0070\U000e0079\U000e0032\U000e007f" + FLAG_FOR_NGEREMLENGUI_PW_227 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0032\U000e0037\U000e007f" + FLAG_FOR_BIHOR_RO_BH = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e0068\U000e007f" + FLAG_FOR_DOLJ_RO_DJ = "\U0001f3f4\U000e0072\U000e006f\U000e0064\U000e006a\U000e007f" + FLAG_FOR_ARGES_RO_AG = "\U0001f3f4\U000e0072\U000e006f\U000e0061\U000e0067\U000e007f" + FLAG_FOR_AL_KHOR_QA_KH = "\U0001f3f4\U000e0071\U000e0061\U000e006b\U000e0068\U000e007f" + FLAG_FOR_GILGIT_BALTISTAN_PK_GB = "\U0001f3f4\U000e0070\U000e006b\U000e0067\U000e0062\U000e007f" + FLAG_FOR_GUAIRA_PY_4 = "\U0001f3f4\U000e0070\U000e0079\U000e0034\U000e007f" + FLAG_FOR_PARAGUARI_PY_9 = "\U0001f3f4\U000e0070\U000e0079\U000e0039\U000e007f" + FLAG_FOR_CAPITAL_IS_1 = "\U0001f3f4\U000e0069\U000e0073\U000e0031\U000e007f" + FLAG_FOR_GALATI_RO_GL = "\U0001f3f4\U000e0072\U000e006f\U000e0067\U000e006c\U000e007f" FLAG_FOR_ARAD_RO_AR = "\U0001f3f4\U000e0072\U000e006f\U000e0061\U000e0072\U000e007f" - FLAG_FOR_SALAJ_RO_SJ = "\U0001f3f4\U000e0072\U000e006f\U000e0073\U000e006a\U000e007f" - FLAG_FOR_VALCEA_RO_VL = "\U0001f3f4\U000e0072\U000e006f\U000e0076\U000e006c\U000e007f" - FLAG_FOR_NISAVA_RS_20 = "\U0001f3f4\U000e0072\U000e0073\U000e0032\U000e0030\U000e007f" - FLAG_FOR_SATU_MARE_RO_SM = "\U0001f3f4\U000e0072\U000e006f\U000e0073\U000e006d\U000e007f" - FLAG_FOR_BEOGRAD_RS_00 = "\U0001f3f4\U000e0072\U000e0073\U000e0030\U000e0030\U000e007f" - FLAG_FOR_TELEORMAN_RO_TR = "\U0001f3f4\U000e0072\U000e006f\U000e0074\U000e0072\U000e007f" - FLAG_FOR_VRANCEA_RO_VN = "\U0001f3f4\U000e0072\U000e006f\U000e0076\U000e006e\U000e007f" - FLAG_FOR_BALOCHISTAN_PK_BA = "\U0001f3f4\U000e0070\U000e006b\U000e0062\U000e0061\U000e007f" - FLAG_FOR_KOSOVO_METOHIJA_RS_KM = "\U0001f3f4\U000e0072\U000e0073\U000e006b\U000e006d\U000e007f" - FLAG_FOR_IASI_RO_IS = "\U0001f3f4\U000e0072\U000e006f\U000e0069\U000e0073\U000e007f" - FLAG_FOR_RASKA_RS_18 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0038\U000e007f" - FLAG_FOR_MEHEDINTI_RO_MH = "\U0001f3f4\U000e0072\U000e006f\U000e006d\U000e0068\U000e007f" - FLAG_FOR_MACVA_RS_08 = "\U0001f3f4\U000e0072\U000e0073\U000e0030\U000e0038\U000e007f" - FLAG_FOR_IALOMITA_RO_IL = "\U0001f3f4\U000e0072\U000e006f\U000e0069\U000e006c\U000e007f" - FLAG_FOR_PRAHOVA_RO_PH = "\U0001f3f4\U000e0072\U000e006f\U000e0070\U000e0068\U000e007f" - FLAG_FOR_BRANICEVO_RS_11 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0031\U000e007f" - FLAG_FOR_ILFOV_RO_IF = "\U0001f3f4\U000e0072\U000e006f\U000e0069\U000e0066\U000e007f" - FLAG_FOR_ZAJECAR_RS_15 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0035\U000e007f" - FLAG_FOR_ALTAI_RU_AL = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e006c\U000e007f" - FLAG_FOR_PIROT_RS_22 = "\U0001f3f4\U000e0072\U000e0073\U000e0032\U000e0032\U000e007f" - FLAG_FOR_ADYGEA_RU_AD = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e0064\U000e007f" - FLAG_FOR_POMORAVLJE_RS_13 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0033\U000e007f" - FLAG_FOR_VOJVODINA_RS_VO = "\U0001f3f4\U000e0072\U000e0073\U000e0076\U000e006f\U000e007f" - FLAG_FOR_NEAMT_RO_NT = "\U0001f3f4\U000e0072\U000e006f\U000e006e\U000e0074\U000e007f" - FLAG_FOR_TOPLICA_RS_21 = "\U0001f3f4\U000e0072\U000e0073\U000e0032\U000e0031\U000e007f" + FLAG_FOR_BRAILA_RO_BR = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e0072\U000e007f" + FLAG_FOR_TIVAT_ME_19 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0039\U000e007f" + FLAG_FOR_HARGHITA_RO_HR = "\U0001f3f4\U000e0072\U000e006f\U000e0068\U000e0072\U000e007f" + FLAG_FOR_MISIONES_PY_8 = "\U0001f3f4\U000e0070\U000e0079\U000e0038\U000e007f" + FLAG_FOR_AL_DAAYEN_QA_ZA = "\U0001f3f4\U000e0071\U000e0061\U000e007a\U000e0061\U000e007f" + FLAG_FOR_DIKHIL_DJ_DI = "\U0001f3f4\U000e0064\U000e006a\U000e0064\U000e0069\U000e007f" FLAG_FOR_OLT_RO_OT = "\U0001f3f4\U000e0072\U000e006f\U000e006f\U000e0074\U000e007f" - FLAG_FOR_SUCEAVA_RO_SV = "\U0001f3f4\U000e0072\U000e006f\U000e0073\U000e0076\U000e007f" - FLAG_FOR_TULCEA_RO_TL = "\U0001f3f4\U000e0072\U000e006f\U000e0074\U000e006c\U000e007f" + FLAG_FOR_BRANICEVO_RS_11 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0031\U000e007f" FLAG_FOR_RASINA_RS_19 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0039\U000e007f" - FLAG_FOR_SUMADIJA_RS_12 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0032\U000e007f" - FLAG_FOR_PCINJA_RS_24 = "\U0001f3f4\U000e0072\U000e0073\U000e0032\U000e0034\U000e007f" - FLAG_FOR_VASLUI_RO_VS = "\U0001f3f4\U000e0072\U000e006f\U000e0076\U000e0073\U000e007f" - FLAG_FOR_MARAMURES_RO_MM = "\U0001f3f4\U000e0072\U000e006f\U000e006d\U000e006d\U000e007f" - FLAG_FOR_MURES_RO_MS = "\U0001f3f4\U000e0072\U000e006f\U000e006d\U000e0073\U000e007f" - FLAG_FOR_PODUNAVLJE_RS_10 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0030\U000e007f" - FLAG_FOR_ZLATIBOR_RS_16 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0036\U000e007f" - FLAG_FOR_MORAVICA_RS_17 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0037\U000e007f" + FLAG_FOR_SUCEAVA_RO_SV = "\U0001f3f4\U000e0072\U000e006f\U000e0073\U000e0076\U000e007f" + FLAG_FOR_ZAJECAR_RS_15 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0035\U000e007f" + WHITE_HEART_SUIT = "\u2661" FLAG_FOR_JABLANICA_RS_23 = "\U0001f3f4\U000e0072\U000e0073\U000e0032\U000e0033\U000e007f" - FLAG_FOR_TIMIS_RO_TM = "\U0001f3f4\U000e0072\U000e006f\U000e0074\U000e006d\U000e007f" + FLAG_FOR_SUMADIJA_RS_12 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0032\U000e007f" + FLAG_FOR_PIROT_RS_22 = "\U0001f3f4\U000e0072\U000e0073\U000e0032\U000e0032\U000e007f" + FLAG_FOR_MURES_RO_MS = "\U0001f3f4\U000e0072\U000e006f\U000e006d\U000e0073\U000e007f" + FLAG_FOR_TELEORMAN_RO_TR = "\U0001f3f4\U000e0072\U000e006f\U000e0074\U000e0072\U000e007f" + FLAG_FOR_MACVA_RS_08 = "\U0001f3f4\U000e0072\U000e0073\U000e0030\U000e0038\U000e007f" + FLAG_FOR_MORAVICA_RS_17 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0037\U000e007f" + FLAG_FOR_ILFOV_RO_IF = "\U0001f3f4\U000e0072\U000e006f\U000e0069\U000e0066\U000e007f" + FLAG_FOR_PRAHOVA_RO_PH = "\U0001f3f4\U000e0072\U000e006f\U000e0070\U000e0068\U000e007f" + FLAG_FOR_LOS_LAGOS_CL_LL = "\U0001f3f4\U000e0063\U000e006c\U000e006c\U000e006c\U000e007f" + FLAG_FOR_TULCEA_RO_TL = "\U0001f3f4\U000e0072\U000e006f\U000e0074\U000e006c\U000e007f" + FLAG_FOR_IALOMITA_RO_IL = "\U0001f3f4\U000e0072\U000e006f\U000e0069\U000e006c\U000e007f" + FLAG_FOR_MOULINS_MC_MU = "\U0001f3f4\U000e006d\U000e0063\U000e006d\U000e0075\U000e007f" FLAG_FOR_KOLUBARA_RS_09 = "\U0001f3f4\U000e0072\U000e0073\U000e0030\U000e0039\U000e007f" - FLAG_FOR_IVANOVO_RU_IVA = "\U0001f3f4\U000e0072\U000e0075\U000e0069\U000e0076\U000e0061\U000e007f" - FLAG_FOR_INGUSHETIA_RU_IN = "\U0001f3f4\U000e0072\U000e0075\U000e0069\U000e006e\U000e007f" - FLAG_FOR_AMUR_RU_AMU = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e006d\U000e0075\U000e007f" - FLAG_FOR_KALININGRAD_RU_KGD = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0067\U000e0064\U000e007f" - FLAG_FOR_KAMCHATKA_KRAI_RU_KAM = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0061\U000e006d\U000e007f" - FLAG_FOR_BASHKORTOSTAN_RU_BA = "\U0001f3f4\U000e0072\U000e0075\U000e0062\U000e0061\U000e007f" - FLAG_FOR_KURGAN_RU_KGN = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0067\U000e006e\U000e007f" + FLAG_FOR_ZLATIBOR_RS_16 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0036\U000e007f" + FLAG_FOR_SALAJ_RO_SJ = "\U0001f3f4\U000e0072\U000e006f\U000e0073\U000e006a\U000e007f" + FLAG_FOR_VASLUI_RO_VS = "\U0001f3f4\U000e0072\U000e006f\U000e0076\U000e0073\U000e007f" + FLAG_FOR_POMORAVLJE_RS_13 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0033\U000e007f" + FLAG_FOR_NISAVA_RS_20 = "\U0001f3f4\U000e0072\U000e0073\U000e0032\U000e0030\U000e007f" + FLAG_FOR_MEHEDINTI_RO_MH = "\U0001f3f4\U000e0072\U000e006f\U000e006d\U000e0068\U000e007f" + FLAG_FOR_RASKA_RS_18 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0038\U000e007f" + FLAG_FOR_PCINJA_RS_24 = "\U0001f3f4\U000e0072\U000e0073\U000e0032\U000e0034\U000e007f" + FLAG_FOR_BEOGRAD_RS_00 = "\U0001f3f4\U000e0072\U000e0073\U000e0030\U000e0030\U000e007f" + FLAG_FOR_TACNA_PE_TAC = "\U0001f3f4\U000e0070\U000e0065\U000e0074\U000e0061\U000e0063\U000e007f" FLAG_FOR_BELGOROD_RU_BEL = "\U0001f3f4\U000e0072\U000e0075\U000e0062\U000e0065\U000e006c\U000e007f" - FLAG_FOR_MAGADAN_RU_MAG = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e0061\U000e0067\U000e007f" - FLAG_FOR_KOSTROMA_RU_KOS = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e006f\U000e0073\U000e007f" - FLAG_FOR_CHUVASH_RU_CU = "\U0001f3f4\U000e0072\U000e0075\U000e0063\U000e0075\U000e007f" - FLAG_FOR_KALMYKIA_RU_KL = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e006c\U000e007f" - FLAG_FOR_MORDOVIA_RU_MO = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e006f\U000e007f" - FLAG_FOR_KARELIA_RU_KR = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0072\U000e007f" - FLAG_FOR_KOMI_RU_KO = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e006f\U000e007f" - FLAG_FOR_KHABAROVSK_KRAI_RU_KHA = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0068\U000e0061\U000e007f" - FLAG_FOR_KABARDINO_BALKAR_RU_KB = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0062\U000e007f" - FLAG_FOR_LIPETSK_RU_LIP = "\U0001f3f4\U000e0072\U000e0075\U000e006c\U000e0069\U000e0070\U000e007f" - FLAG_FOR_KHANTY_MANSI_RU_KHM = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0068\U000e006d\U000e007f" - FLAG_FOR_IRKUTSK_RU_IRK = "\U0001f3f4\U000e0072\U000e0075\U000e0069\U000e0072\U000e006b\U000e007f" - FLAG_FOR_CHUKOTKA_OKRUG_RU_CHU = "\U0001f3f4\U000e0072\U000e0075\U000e0063\U000e0068\U000e0075\U000e007f" - FLAG_FOR_KALUGA_RU_KLU = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e006c\U000e0075\U000e007f" - FLAG_FOR_KRASNOYARSK_KRAI_RU_KYA = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0079\U000e0061\U000e007f" - FLAG_FOR_ASTRAKHAN_RU_AST = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e0073\U000e0074\U000e007f" - FLAG_FOR_MARI_EL_RU_ME = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e0065\U000e007f" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_KURGAN_RU_KGN = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0067\U000e006e\U000e007f" FLAG_FOR_CHELYABINSK_RU_CHE = "\U0001f3f4\U000e0072\U000e0075\U000e0063\U000e0068\U000e0065\U000e007f" - FLAG_FOR_KARACHAY_CHERKESS_RU_KC = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0063\U000e007f" FLAG_FOR_KIROV_RU_KIR = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0069\U000e0072\U000e007f" - FLAG_FOR_KURSK_RU_KRS = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0072\U000e0073\U000e007f" + KISS_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" + FLAG_FOR_UTTAR_PRADESH_IN_UP = "\U0001f3f4\U000e0069\U000e006e\U000e0075\U000e0070\U000e007f" + FLAG_FOR_KOMI_RU_KO = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e006f\U000e007f" + FLAG_FOR_IVANOVO_RU_IVA = "\U0001f3f4\U000e0072\U000e0075\U000e0069\U000e0076\U000e0061\U000e007f" + FLAG_FOR_ALBA_RO_AB = "\U0001f3f4\U000e0072\U000e006f\U000e0061\U000e0062\U000e007f" + FLAG_FOR_KHANTY_MANSI_RU_KHM = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0068\U000e006d\U000e007f" + FLAG_FOR_KALUGA_RU_KLU = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e006c\U000e0075\U000e007f" + FLAG_FOR_PECS_HU_PS = "\U0001f3f4\U000e0068\U000e0075\U000e0070\U000e0073\U000e007f" + FLAG_FOR_MARI_EL_RU_ME = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e0065\U000e007f" + FLAG_FOR_IRKUTSK_RU_IRK = "\U0001f3f4\U000e0072\U000e0075\U000e0069\U000e0072\U000e006b\U000e007f" + FLAG_FOR_PLAV_ME_13 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0033\U000e007f" + FLAG_FOR_GRAND_KRU_LR_GK = "\U0001f3f4\U000e006c\U000e0072\U000e0067\U000e006b\U000e007f" + FLAG_FOR_SIEM_REAP_KH_17 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0037\U000e007f" + FLAG_FOR_KAMCHATKA_KRAI_RU_KAM = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0061\U000e006d\U000e007f" + FLAG_FOR_ALTAI_RU_AL = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e006c\U000e007f" + FLAG_FOR_MORDOVIA_RU_MO = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e006f\U000e007f" + FLAG_FOR_ASTRAKHAN_RU_AST = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e0073\U000e0074\U000e007f" + FLAG_FOR_KARACHAY_CHERKESS_RU_KC = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0063\U000e007f" FLAG_FOR_KEMEROVO_RU_KEM = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0065\U000e006d\U000e007f" - FLAG_FOR_TVER_RU_TVE = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0076\U000e0065\U000e007f" - FLAG_FOR_SAKHA_RU_SA = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0061\U000e007f" - FLAG_FOR_RYAZAN_RU_RYA = "\U0001f3f4\U000e0072\U000e0075\U000e0072\U000e0079\U000e0061\U000e007f" - FLAG_FOR_PSKOV_RU_PSK = "\U0001f3f4\U000e0072\U000e0075\U000e0070\U000e0073\U000e006b\U000e007f" - FLAG_FOR_ORYOL_RU_ORL = "\U0001f3f4\U000e0072\U000e0075\U000e006f\U000e0072\U000e006c\U000e007f" - FLAG_FOR_STAVROPOL_KRAI_RU_STA = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0074\U000e0061\U000e007f" - FLAG_FOR_NIZHNY_NOVGOROD_RU_NIZ = "\U0001f3f4\U000e0072\U000e0075\U000e006e\U000e0069\U000e007a\U000e007f" - FLAG_FOR_ULYANOVSK_RU_ULY = "\U0001f3f4\U000e0072\U000e0075\U000e0075\U000e006c\U000e0079\U000e007f" - FLAG_FOR_NENETS_RU_NEN = "\U0001f3f4\U000e0072\U000e0075\U000e006e\U000e0065\U000e006e\U000e007f" - FLAG_FOR_SVERDLOVSK_RU_SVE = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0076\U000e0065\U000e007f" - FLAG_FOR_SAKHALIN_RU_SAK = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0061\U000e006b\U000e007f" - FLAG_FOR_YAMALO_NENETS_OKRUG_RU_YAN = "\U0001f3f4\U000e0072\U000e0075\U000e0079\U000e0061\U000e006e\U000e007f" - FLAG_FOR_TAMBOV_RU_TAM = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0061\U000e006d\U000e007f" - FLAG_FOR_VLADIMIR_RU_VLA = "\U0001f3f4\U000e0072\U000e0075\U000e0076\U000e006c\U000e0061\U000e007f" - FLAG_FOR_PENZA_RU_PNZ = "\U0001f3f4\U000e0072\U000e0075\U000e0070\U000e006e\U000e007a\U000e007f" - FLAG_FOR_MOSCOW_RU_MOW = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e006f\U000e0077\U000e007f" - FLAG_FOR_ORENBURG_RU_ORE = "\U0001f3f4\U000e0072\U000e0075\U000e006f\U000e0072\U000e0065\U000e007f" - FLAG_FOR_TULA_RU_TUL = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0075\U000e006c\U000e007f" - FLAG_FOR_YAROSLAVL_RU_YAR = "\U0001f3f4\U000e0072\U000e0075\U000e0079\U000e0061\U000e0072\U000e007f" - FLAG_FOR_SARATOV_RU_SAR = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0061\U000e0072\U000e007f" - FLAG_FOR_VORONEZH_RU_VOR = "\U0001f3f4\U000e0072\U000e0075\U000e0076\U000e006f\U000e0072\U000e007f" - FLAG_FOR_PERM_KRAI_RU_PER = "\U0001f3f4\U000e0072\U000e0075\U000e0070\U000e0065\U000e0072\U000e007f" - FLAG_FOR_NOVGOROD_RU_NGR = "\U0001f3f4\U000e0072\U000e0075\U000e006e\U000e0067\U000e0072\U000e007f" - FLAG_FOR_UDMURT_RU_UD = "\U0001f3f4\U000e0072\U000e0075\U000e0075\U000e0064\U000e007f" - FLAG_FOR_MURMANSK_RU_MUR = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e0075\U000e0072\U000e007f" - FLAG_FOR_OMSK_RU_OMS = "\U0001f3f4\U000e0072\U000e0075\U000e006f\U000e006d\U000e0073\U000e007f" - FLAG_FOR_NOVOSIBIRSK_RU_NVS = "\U0001f3f4\U000e0072\U000e0075\U000e006e\U000e0076\U000e0073\U000e007f" - FLAG_FOR_TYUMEN_RU_TYU = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0079\U000e0075\U000e007f" - FLAG_FOR_TUVA_RU_TY = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0079\U000e007f" - FLAG_FOR_ROSTOV_RU_ROS = "\U0001f3f4\U000e0072\U000e0075\U000e0072\U000e006f\U000e0073\U000e007f" + FLAG_FOR_ENGA_PG_EPW = "\U0001f3f4\U000e0070\U000e0067\U000e0065\U000e0070\U000e0077\U000e007f" FLAG_FOR_VOLOGDA_RU_VLG = "\U0001f3f4\U000e0072\U000e0075\U000e0076\U000e006c\U000e0067\U000e007f" - FLAG_FOR_SMOLENSK_RU_SMO = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e006d\U000e006f\U000e007f" FLAG_FOR_TOMSK_RU_TOM = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e006f\U000e006d\U000e007f" - FLAG_FOR_ZABAYKALSKY_KRAI_RU_ZAB = "\U0001f3f4\U000e0072\U000e0075\U000e007a\U000e0061\U000e0062\U000e007f" - FLAG_FOR_JIZAN_SA_09 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0039\U000e007f" - FLAG_FOR_ANSE_BOILEAU_SC_02 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0032\U000e007f" - FLAG_FOR_TABUK_SA_07 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0037\U000e007f" - FLAG_FOR_GUADALCANAL_SB_GU = "\U0001f3f4\U000e0073\U000e0062\U000e0067\U000e0075\U000e007f" - FLAG_FOR_EASTERN_SA_04 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0034\U000e007f" - FLAG_FOR_ANSE_ETOILE_SC_03 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0033\U000e007f" - FLAG_FOR_SOUTHERN_RW_05 = "\U0001f3f4\U000e0072\U000e0077\U000e0030\U000e0035\U000e007f" - FLAG_FOR_ISABEL_SB_IS = "\U0001f3f4\U000e0073\U000e0062\U000e0069\U000e0073\U000e007f" - FLAG_FOR_MALAITA_SB_ML = "\U0001f3f4\U000e0073\U000e0062\U000e006d\U000e006c\U000e007f" - FLAG_FOR_KIGALI_RW_01 = "\U0001f3f4\U000e0072\U000e0077\U000e0030\U000e0031\U000e007f" - FLAG_FOR_CENTRAL_SB_CE = "\U0001f3f4\U000e0073\U000e0062\U000e0063\U000e0065\U000e007f" - FLAG_FOR_HONIARA_SB_CT = "\U0001f3f4\U000e0073\U000e0062\U000e0063\U000e0074\U000e007f" - FLAG_FOR_WESTERN_SB_WE = "\U0001f3f4\U000e0073\U000e0062\U000e0077\U000e0065\U000e007f" - FLAG_FOR_NAJRAN_SA_10 = "\U0001f3f4\U000e0073\U000e0061\U000e0031\U000e0030\U000e007f" - FLAG_FOR_RENNELL_AND_BELLONA_SB_RB = "\U0001f3f4\U000e0073\U000e0062\U000e0072\U000e0062\U000e007f" - FLAG_FOR_BEAU_VALLON_SC_08 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0038\U000e007f" - FLAG_FOR_EASTERN_RW_02 = "\U0001f3f4\U000e0072\U000e0077\U000e0030\U000e0032\U000e007f" - FLAG_FOR_BAIE_SAINTE_ANNE_SC_07 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0037\U000e007f" - FLAG_FOR_BEL_OMBRE_SC_10 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0030\U000e007f" - FLAG_FOR_BAIE_LAZARE_SC_06 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0036\U000e007f" - FLAG_FOR_CHIRIQUI_PA_4 = "\U0001f3f4\U000e0070\U000e0061\U000e0034\U000e007f" - FLAG_FOR_HA_IL_SA_06 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0036\U000e007f" - FLAG_FOR_AL_JAWF_SA_12 = "\U0001f3f4\U000e0073\U000e0061\U000e0031\U000e0032\U000e007f" - FLAG_FOR_NORTHERN_BORDERS_SA_08 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0038\U000e007f" - FLAG_FOR_CHOISEUL_SB_CH = "\U0001f3f4\U000e0073\U000e0062\U000e0063\U000e0068\U000e007f" - FLAG_FOR_WESTERN_RW_04 = "\U0001f3f4\U000e0072\U000e0077\U000e0030\U000e0034\U000e007f" - FLAG_FOR_MAKIRA_ULAWA_SB_MK = "\U0001f3f4\U000e0073\U000e0062\U000e006d\U000e006b\U000e007f" - FLAG_FOR_NORTHERN_RW_03 = "\U0001f3f4\U000e0072\U000e0077\U000e0030\U000e0033\U000e007f" - FLAG_FOR_BRAGA_PT_03 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0033\U000e007f" + FLAG_FOR_VLADIMIR_RU_VLA = "\U0001f3f4\U000e0072\U000e0075\U000e0076\U000e006c\U000e0061\U000e007f" + FLAG_FOR_CONCEPCION_PY_1 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e007f" + FLAG_FOR_BAUCHI_NG_BA = "\U0001f3f4\U000e006e\U000e0067\U000e0062\U000e0061\U000e007f" + FLAG_FOR_NIZHNY_NOVGOROD_RU_NIZ = "\U0001f3f4\U000e0072\U000e0075\U000e006e\U000e0069\U000e007a\U000e007f" + FLAG_FOR_ORENBURG_RU_ORE = "\U0001f3f4\U000e0072\U000e0075\U000e006f\U000e0072\U000e0065\U000e007f" + FLAG_FOR_NOVOSIBIRSK_RU_NVS = "\U0001f3f4\U000e0072\U000e0075\U000e006e\U000e0076\U000e0073\U000e007f" + FLAG_FOR_SAINT_JOHN_GD_04 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0034\U000e007f" + FLAG_FOR_TVER_RU_TVE = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0076\U000e0065\U000e007f" + FLAG_FOR_NOVGOROD_RU_NGR = "\U0001f3f4\U000e0072\U000e0075\U000e006e\U000e0067\U000e0072\U000e007f" + FLAG_FOR_TULA_RU_TUL = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0075\U000e006c\U000e007f" + FLAG_FOR_CASTELO_BRANCO_PT_05 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0035\U000e007f" + FLAG_FOR_PRESIDENTE_HAYES_PY_15 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0035\U000e007f" + FLAG_FOR_SMOLENSK_RU_SMO = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e006d\U000e006f\U000e007f" + FLAG_FOR_TYUMEN_RU_TYU = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0079\U000e0075\U000e007f" + FLAG_FOR_SVERDLOVSK_RU_SVE = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0076\U000e0065\U000e007f" + FLAG_FOR_DAMAN_AND_DIU_IN_DD = "\U0001f3f4\U000e0069\U000e006e\U000e0064\U000e0064\U000e007f" + FLAG_FOR_SARATOV_RU_SAR = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0061\U000e0072\U000e007f" + FLAG_FOR_NENETS_RU_NEN = "\U0001f3f4\U000e0072\U000e0075\U000e006e\U000e0065\U000e006e\U000e007f" + FLAG_FOR_XIANGKHOUANG_LA_XI = "\U0001f3f4\U000e006c\U000e0061\U000e0078\U000e0069\U000e007f" + FLAG_FOR_PSKOV_RU_PSK = "\U0001f3f4\U000e0072\U000e0075\U000e0070\U000e0073\U000e006b\U000e007f" + FLAG_FOR_OTAGO_NZ_OTA = "\U0001f3f4\U000e006e\U000e007a\U000e006f\U000e0074\U000e0061\U000e007f" FLAG_FOR_CANTERBURY_NZ_CAN = "\U0001f3f4\U000e006e\U000e007a\U000e0063\U000e0061\U000e006e\U000e007f" - FLAG_FOR_AU_CAP_SC_04 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0034\U000e007f" + FLAG_FOR_HA_IL_SA_06 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0036\U000e007f" + FLAG_FOR_EASTERN_RW_02 = "\U0001f3f4\U000e0072\U000e0077\U000e0030\U000e0032\U000e007f" + FLAG_FOR_TUVA_RU_TY = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0079\U000e007f" + FLAG_FOR_ANSE_BOILEAU_SC_02 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0032\U000e007f" + FLAG_FOR_ZABAYKALSKY_KRAI_RU_ZAB = "\U0001f3f4\U000e0072\U000e0075\U000e007a\U000e0061\U000e0062\U000e007f" + FLAG_FOR_BAIE_SAINTE_ANNE_SC_07 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0037\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_CHOISEUL_SB_CH = "\U0001f3f4\U000e0073\U000e0062\U000e0063\U000e0068\U000e007f" + FLAG_FOR_SOUTHERN_RW_05 = "\U0001f3f4\U000e0072\U000e0077\U000e0030\U000e0035\U000e007f" + FLAG_FOR_VAS_HU_VA = "\U0001f3f4\U000e0068\U000e0075\U000e0076\U000e0061\U000e007f" FLAG_FOR_ASIR_SA_14 = "\U0001f3f4\U000e0073\U000e0061\U000e0031\U000e0034\U000e007f" - FLAG_FOR_PLAISANCE_SC_19 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0039\U000e007f" - FLAG_FOR_VOLGOGRAD_RU_VGG = "\U0001f3f4\U000e0072\U000e0075\U000e0076\U000e0067\U000e0067\U000e007f" - FLAG_FOR_MONT_FLEURI_SC_18 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0038\U000e007f" - FLAG_FOR_STOCKHOLM_SE_AB = "\U0001f3f4\U000e0073\U000e0065\U000e0061\U000e0062\U000e007f" - FLAG_FOR_TAKAMAKA_SC_23 = "\U0001f3f4\U000e0073\U000e0063\U000e0032\U000e0033\U000e007f" - FLAG_FOR_AL_QADARIF_SD_GD = "\U0001f3f4\U000e0073\U000e0064\U000e0067\U000e0064\U000e007f" - FLAG_FOR_SAINT_LOUIS_SC_22 = "\U0001f3f4\U000e0073\U000e0063\U000e0032\U000e0032\U000e007f" - FLAG_FOR_WEST_KURDUFAN_SD_GK = "\U0001f3f4\U000e0073\U000e0064\U000e0067\U000e006b\U000e007f" - FLAG_FOR_KASSALA_SD_KA = "\U0001f3f4\U000e0073\U000e0064\U000e006b\U000e0061\U000e007f" - FLAG_FOR_KHARTOUM_SD_KH = "\U0001f3f4\U000e0073\U000e0064\U000e006b\U000e0068\U000e007f" - FLAG_FOR_LA_DIGUE_SC_15 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0035\U000e007f" - FLAG_FOR_NORTH_KURDUFAN_SD_KN = "\U0001f3f4\U000e0073\U000e0064\U000e006b\U000e006e\U000e007f" - FLAG_FOR_NORTHERN_SD_NO = "\U0001f3f4\U000e0073\U000e0064\U000e006e\U000e006f\U000e007f" + FLAG_FOR_NAJRAN_SA_10 = "\U0001f3f4\U000e0073\U000e0061\U000e0031\U000e0030\U000e007f" + FLAG_FOR_AL_JAWF_SA_12 = "\U0001f3f4\U000e0073\U000e0061\U000e0031\U000e0032\U000e007f" + FLAG_FOR_WESTERN_RW_04 = "\U0001f3f4\U000e0072\U000e0077\U000e0030\U000e0034\U000e007f" + FLAG_FOR_RENNELL_AND_BELLONA_SB_RB = "\U0001f3f4\U000e0073\U000e0062\U000e0072\U000e0062\U000e007f" + FLAG_FOR_EASTERN_SA_04 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0034\U000e007f" + FLAG_FOR_MALAITA_SB_ML = "\U0001f3f4\U000e0073\U000e0062\U000e006d\U000e006c\U000e007f" + FLAG_FOR_KRASNOYARSK_KRAI_RU_KYA = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0079\U000e0061\U000e007f" + FLAG_FOR_BEAU_VALLON_SC_08 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0038\U000e007f" + FLAG_FOR_KIGALI_RW_01 = "\U0001f3f4\U000e0072\U000e0077\U000e0030\U000e0031\U000e007f" + FLAG_FOR_ISABEL_SB_IS = "\U0001f3f4\U000e0073\U000e0062\U000e0069\U000e0073\U000e007f" + FLAG_FOR_NORTHERN_BORDERS_SA_08 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0038\U000e007f" + FLAG_FOR_YAROSLAVL_RU_YAR = "\U0001f3f4\U000e0072\U000e0075\U000e0079\U000e0061\U000e0072\U000e007f" + FLAG_FOR_WILTZ_LU_WI = "\U0001f3f4\U000e006c\U000e0075\U000e0077\U000e0069\U000e007f" + FLAG_FOR_HONIARA_SB_CT = "\U0001f3f4\U000e0073\U000e0062\U000e0063\U000e0074\U000e007f" + FLAG_FOR_NORTHERN_RW_03 = "\U0001f3f4\U000e0072\U000e0077\U000e0030\U000e0033\U000e007f" + FLAG_FOR_SONSOROL_PW_370 = "\U0001f3f4\U000e0070\U000e0077\U000e0033\U000e0037\U000e0030\U000e007f" + FLAG_FOR_TABUK_SA_07 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0037\U000e007f" + FLAG_FOR_LA_RIVIERE_ANGLAISE_SC_16 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0036\U000e007f" + FLAG_FOR_GRAND_ANSE_MAHE_SC_13 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0033\U000e007f" FLAG_FOR_POINTE_LA_RUE_SC_20 = "\U0001f3f4\U000e0073\U000e0063\U000e0032\U000e0030\U000e007f" - FLAG_FOR_WHITE_NILE_SD_NW = "\U0001f3f4\U000e0073\U000e0064\U000e006e\U000e0077\U000e007f" - FLAG_FOR_LES_MAMELLES_SC_24 = "\U0001f3f4\U000e0073\U000e0063\U000e0032\U000e0034\U000e007f" - FLAG_FOR_SOUTH_DARFUR_SD_DS = "\U0001f3f4\U000e0073\U000e0064\U000e0064\U000e0073\U000e007f" - FLAG_FOR_SENNAR_SD_SI = "\U0001f3f4\U000e0073\U000e0064\U000e0073\U000e0069\U000e007f" - FLAG_FOR_PORT_GLAUD_SC_21 = "\U0001f3f4\U000e0073\U000e0063\U000e0032\U000e0031\U000e007f" + FLAG_FOR_CASCADE_SC_11 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0031\U000e007f" + FLAG_FOR_NORTH_DARFUR_SD_DN = "\U0001f3f4\U000e0073\U000e0064\U000e0064\U000e006e\U000e007f" + FLAG_FOR_WEST_KURDUFAN_SD_GK = "\U0001f3f4\U000e0073\U000e0064\U000e0067\U000e006b\U000e007f" + FLAG_FOR_RIVER_NILE_SD_NR = "\U0001f3f4\U000e0073\U000e0064\U000e006e\U000e0072\U000e007f" FLAG_FOR_EAST_DARFUR_SD_DE = "\U0001f3f4\U000e0073\U000e0064\U000e0064\U000e0065\U000e007f" - FLAG_FOR_UPPSALA_SE_C = "\U0001f3f4\U000e0073\U000e0065\U000e0063\U000e007f" - FLAG_FOR_AL_JAZIRAH_SD_GZ = "\U0001f3f4\U000e0073\U000e0064\U000e0067\U000e007a\U000e007f" - FLAG_FOR_OSTERGOTLAND_SE_E = "\U0001f3f4\U000e0073\U000e0065\U000e0065\U000e007f" - FLAG_FOR_GLACIS_SC_12 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0032\U000e007f" + FLAG_FOR_NORRBOTTEN_SE_BD = "\U0001f3f4\U000e0073\U000e0065\U000e0062\U000e0064\U000e007f" FLAG_FOR_SODERMANLAND_SE_D = "\U0001f3f4\U000e0073\U000e0065\U000e0064\U000e007f" + FLAG_FOR_TAKAMAKA_SC_23 = "\U0001f3f4\U000e0073\U000e0063\U000e0032\U000e0033\U000e007f" + FLAG_FOR_FRENCH_POLYNESIA_FR_PF = "\U0001f3f4\U000e0066\U000e0072\U000e0070\U000e0066\U000e007f" + FLAG_FOR_AL_QADARIF_SD_GD = "\U0001f3f4\U000e0073\U000e0064\U000e0067\U000e0064\U000e007f" + FLAG_FOR_VASTERBOTTEN_SE_AC = "\U0001f3f4\U000e0073\U000e0065\U000e0061\U000e0063\U000e007f" + FLAG_FOR_NORTHERN_SD_NO = "\U0001f3f4\U000e0073\U000e0064\U000e006e\U000e006f\U000e007f" + FLAG_FOR_MONT_FLEURI_SC_18 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0038\U000e007f" + FLAG_FOR_CENTRAL_SB_CE = "\U0001f3f4\U000e0073\U000e0062\U000e0063\U000e0065\U000e007f" + FLAG_FOR_CENTRAL_DARFUR_SD_DC = "\U0001f3f4\U000e0073\U000e0064\U000e0064\U000e0063\U000e007f" + FLAG_FOR_VOLGOGRAD_RU_VGG = "\U0001f3f4\U000e0072\U000e0075\U000e0076\U000e0067\U000e0067\U000e007f" + FLAG_FOR_PLAISANCE_SC_19 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0039\U000e007f" FLAG_FOR_MONT_BUXTON_SC_17 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0037\U000e007f" + FLAG_FOR_KASSALA_SD_KA = "\U0001f3f4\U000e0073\U000e0064\U000e006b\U000e0061\U000e007f" + FLAG_FOR_LES_MAMELLES_SC_24 = "\U0001f3f4\U000e0073\U000e0063\U000e0032\U000e0034\U000e007f" + FLAG_FOR_GLACIS_SC_12 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0032\U000e007f" + FLAG_FOR_ROSTOV_RU_ROS = "\U0001f3f4\U000e0072\U000e0075\U000e0072\U000e006f\U000e0073\U000e007f" + FLAG_FOR_SENNAR_SD_SI = "\U0001f3f4\U000e0073\U000e0064\U000e0073\U000e0069\U000e007f" + FLAG_FOR_LA_DIGUE_SC_15 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0035\U000e007f" + FLAG_FOR_SOUTH_DARFUR_SD_DS = "\U0001f3f4\U000e0073\U000e0064\U000e0064\U000e0073\U000e007f" + FLAG_FOR_WHITE_NILE_SD_NW = "\U0001f3f4\U000e0073\U000e0064\U000e006e\U000e0077\U000e007f" + FLAG_FOR_AL_JAZIRAH_SD_GZ = "\U0001f3f4\U000e0073\U000e0064\U000e0067\U000e007a\U000e007f" + FLAG_FOR_SOUTH_KURDUFAN_SD_KS = "\U0001f3f4\U000e0073\U000e0064\U000e006b\U000e0073\U000e007f" + FLAG_FOR_NORTH_KURDUFAN_SD_KN = "\U0001f3f4\U000e0073\U000e0064\U000e006b\U000e006e\U000e007f" + FLAG_FOR_PORT_GLAUD_SC_21 = "\U0001f3f4\U000e0073\U000e0063\U000e0032\U000e0031\U000e007f" + FLAG_FOR_OSTERGOTLAND_SE_E = "\U0001f3f4\U000e0073\U000e0065\U000e0065\U000e007f" FLAG_FOR_GRAND_ANSE_PRASLIN_SC_14 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0034\U000e007f" FLAG_FOR_JONKOPING_SE_F = "\U0001f3f4\U000e0073\U000e0065\U000e0066\U000e007f" - FLAG_FOR_SOUTH_KURDUFAN_SD_KS = "\U0001f3f4\U000e0073\U000e0064\U000e006b\U000e0073\U000e007f" - FLAG_FOR_CASCADE_SC_11 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0031\U000e007f" - FLAG_FOR_GRAND_ANSE_MAHE_SC_13 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0033\U000e007f" - FLAG_FOR_WEST_DARFUR_SD_DW = "\U0001f3f4\U000e0073\U000e0064\U000e0064\U000e0077\U000e007f" - FLAG_FOR_LA_RIVIERE_ANGLAISE_SC_16 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0036\U000e007f" - FLAG_FOR_VASTERBOTTEN_SE_AC = "\U0001f3f4\U000e0073\U000e0065\U000e0061\U000e0063\U000e007f" - FLAG_FOR_NORTH_DARFUR_SD_DN = "\U0001f3f4\U000e0073\U000e0064\U000e0064\U000e006e\U000e007f" - FLAG_FOR_NORRBOTTEN_SE_BD = "\U0001f3f4\U000e0073\U000e0065\U000e0062\U000e0064\U000e007f" - FLAG_FOR_CENTRAL_DARFUR_SD_DC = "\U0001f3f4\U000e0073\U000e0064\U000e0064\U000e0063\U000e007f" - FLAG_FOR_RIVER_NILE_SD_NR = "\U0001f3f4\U000e0073\U000e0064\U000e006e\U000e0072\U000e007f" - FLAG_FOR_VASTERNORRLAND_SE_Y = "\U0001f3f4\U000e0073\U000e0065\U000e0079\U000e007f" - FLAG_FOR_KALMAR_SE_H = "\U0001f3f4\U000e0073\U000e0065\U000e0068\U000e007f" - FLAG_FOR_BLEKINGE_SE_K = "\U0001f3f4\U000e0073\U000e0065\U000e006b\U000e007f" - FLAG_FOR_CRNOMELJ_SI_017 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0037\U000e007f" - FLAG_FOR_JAMTLAND_SE_Z = "\U0001f3f4\U000e0073\U000e0065\U000e007a\U000e007f" - FLAG_FOR_VASTRA_GOTALAND_SE_O = "\U0001f3f4\U000e0073\U000e0065\U000e006f\U000e007f" - FLAG_FOR_SOUTH_WEST_SG_05 = "\U0001f3f4\U000e0073\U000e0067\U000e0030\U000e0035\U000e007f" - FLAG_FOR_VASTMANLAND_SE_U = "\U0001f3f4\U000e0073\U000e0065\U000e0075\U000e007f" - FLAG_FOR_CRNA_NA_KOROSKEM_SI_016 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0036\U000e007f" - FLAG_FOR_SOUTH_EAST_SG_04 = "\U0001f3f4\U000e0073\U000e0067\U000e0030\U000e0034\U000e007f" - FLAG_FOR_AJDOVSCINA_SI_001 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0031\U000e007f" - FLAG_FOR_SAINT_HELENA_SH_HL = "\U0001f3f4\U000e0073\U000e0068\U000e0068\U000e006c\U000e007f" - FLAG_FOR_DESTRNIK_SI_018 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0038\U000e007f" - FLAG_FOR_BRDA_SI_007 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0037\U000e007f" - FLAG_FOR_NORTH_WEST_SG_03 = "\U0001f3f4\U000e0073\U000e0067\U000e0030\U000e0033\U000e007f" - FLAG_FOR_BLED_SI_003 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0033\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" - FLAG_FOR_CERKNICA_SI_013 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0033\U000e007f" - FLAG_FOR_BOVEC_SI_006 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0036\U000e007f" - FLAG_FOR_CRENSOVCI_SI_015 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0035\U000e007f" - FLAG_FOR_KRONOBERG_SE_G = "\U0001f3f4\U000e0073\U000e0065\U000e0067\U000e007f" - FLAG_FOR_ASCENSION_ISLAND_SH_AC = "\U0001f3f4\U000e0073\U000e0068\U000e0061\U000e0063\U000e007f" - FLAG_FOR_TISINA_SI_010 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0030\U000e007f" - FLAG_FOR_BOROVNICA_SI_005 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0035\U000e007f" - FLAG_FOR_BELTINCI_SI_002 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0032\U000e007f" - FLAG_FOR_GOTLAND_SE_I = "\U0001f3f4\U000e0073\U000e0065\U000e0069\U000e007f" FLAG_FOR_VARMLAND_SE_S = "\U0001f3f4\U000e0073\U000e0065\U000e0073\U000e007f" FLAG_FOR_CERKLJE_NA_GORENJSKEM_SI_012 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0032\U000e007f" - FLAG_FOR_DALARNA_SE_W = "\U0001f3f4\U000e0073\U000e0065\U000e0077\U000e007f" FLAG_FOR_CERKNO_SI_014 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0034\U000e007f" - FLAG_FOR_BREZICE_SI_009 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0039\U000e007f" + FLAG_FOR_SVETI_NIKOLE_MK_69 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0039\U000e007f" FLAG_FOR_NORTH_EAST_SG_02 = "\U0001f3f4\U000e0073\U000e0067\U000e0030\U000e0032\U000e007f" + FLAG_FOR_SOUTH_EAST_SG_04 = "\U0001f3f4\U000e0073\U000e0067\U000e0030\U000e0034\U000e007f" + FLAG_FOR_NORTH_WEST_SG_03 = "\U0001f3f4\U000e0073\U000e0067\U000e0030\U000e0033\U000e007f" + FLAG_FOR_DESTRNIK_SI_018 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0038\U000e007f" + FLAG_FOR_SOUTH_WEST_SG_05 = "\U0001f3f4\U000e0073\U000e0067\U000e0030\U000e0035\U000e007f" + FLAG_FOR_BRDA_SI_007 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0037\U000e007f" FLAG_FOR_OREBRO_SE_T = "\U0001f3f4\U000e0073\U000e0065\U000e0074\U000e007f" + FLAG_FOR_KRONOBERG_SE_G = "\U0001f3f4\U000e0073\U000e0065\U000e0067\U000e007f" + FLAG_FOR_ASCENSION_ISLAND_SH_AC = "\U0001f3f4\U000e0073\U000e0068\U000e0061\U000e0063\U000e007f" + FLAG_FOR_VASTMANLAND_SE_U = "\U0001f3f4\U000e0073\U000e0065\U000e0075\U000e007f" + FLAG_FOR_CERKNICA_SI_013 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0033\U000e007f" + FLAG_FOR_CRENSOVCI_SI_015 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0035\U000e007f" + FLAG_FOR_REZINA_MD_RE = "\U0001f3f4\U000e006d\U000e0064\U000e0072\U000e0065\U000e007f" + KISS_WOMAN_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" + FLAG_FOR_BLED_SI_003 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0033\U000e007f" + FLAG_FOR_GOIAS_BR_GO = "\U0001f3f4\U000e0062\U000e0072\U000e0067\U000e006f\U000e007f" + FLAG_FOR_BELTINCI_SI_002 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0032\U000e007f" + FLAG_FOR_CRNOMELJ_SI_017 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0037\U000e007f" FLAG_FOR_BREZOVICA_SI_008 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0038\U000e007f" - FLAG_FOR_IZOLA_SI_040 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0030\U000e007f" - FLAG_FOR_DRAVOGRAD_SI_025 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0035\U000e007f" - FLAG_FOR_DUPLEK_SI_026 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0036\U000e007f" - FLAG_FOR_JESENICE_SI_041 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0031\U000e007f" - FLAG_FOR_GORISNICA_SI_028 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0038\U000e007f" - FLAG_FOR_GORNJA_RADGONA_SI_029 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0039\U000e007f" - FLAG_FOR_KRANJSKA_GORA_SI_053 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0033\U000e007f" - FLAG_FOR_GORNJI_PETROVCI_SI_031 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0031\U000e007f" - FLAG_FOR_DORNAVA_SI_024 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0034\U000e007f" - FLAG_FOR_HRASTNIK_SI_034 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0034\U000e007f" - FLAG_FOR_KANAL_SI_044 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0034\U000e007f" - FLAG_FOR_KOMEN_SI_049 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0039\U000e007f" - FLAG_FOR_KOZJE_SI_051 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0031\U000e007f" - FLAG_FOR_DIVACA_SI_019 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0039\U000e007f" - FLAG_FOR_IDRIJA_SI_036 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0036\U000e007f" - FLAG_FOR_KOBARID_SI_046 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0036\U000e007f" - FLAG_FOR_KOBILJE_SI_047 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0037\U000e007f" - FLAG_FOR_IG_SI_037 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0037\U000e007f" - FLAG_FOR_TEMOTU_SB_TE = "\U0001f3f4\U000e0073\U000e0062\U000e0074\U000e0065\U000e007f" - FLAG_FOR_IVANCNA_GORICA_SI_039 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0039\U000e007f" - FLAG_FOR_KUNGOTA_SI_055 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0035\U000e007f" - FLAG_FOR_GROSUPLJE_SI_032 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0032\U000e007f" - FLAG_FOR_DOBROVA_POLHOV_GRADEC_SI_021 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0031\U000e007f" + FLAG_FOR_MINYA_EG_MN = "\U0001f3f4\U000e0065\U000e0067\U000e006d\U000e006e\U000e007f" + FLAG_FOR_RIVIERE_NOIRE_MU_BL = "\U0001f3f4\U000e006d\U000e0075\U000e0062\U000e006c\U000e007f" + FLAG_FOR_GOVI_ALTAI_MN_065 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0035\U000e007f" + FLAG_FOR_AJDOVSCINA_SI_001 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0031\U000e007f" + FLAG_FOR_BOROVNICA_SI_005 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0035\U000e007f" FLAG_FOR_JURSINCI_SI_042 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0032\U000e007f" - FLAG_FOR_KRSKO_SI_054 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0034\U000e007f" - FLAG_FOR_SALOVCI_SI_033 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0033\U000e007f" + FLAG_FOR_IDRIJA_SI_036 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0036\U000e007f" FLAG_FOR_KUZMA_SI_056 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0036\U000e007f" + FLAG_FOR_ULYANOVSK_RU_ULY = "\U0001f3f4\U000e0072\U000e0075\U000e0075\U000e006c\U000e0079\U000e007f" + FLAG_FOR_IZOLA_SI_040 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0030\U000e007f" + FLAG_FOR_KOZJE_SI_051 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0031\U000e007f" + FLAG_FOR_KUNGOTA_SI_055 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0035\U000e007f" + FLAG_FOR_JESENICE_SI_041 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0031\U000e007f" FLAG_FOR_GORNJI_GRAD_SI_030 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0030\U000e007f" - FLAG_FOR_KOCEVJE_SI_048 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0038\U000e007f" - FLAG_FOR_ILIRSKA_BISTRICA_SI_038 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0038\U000e007f" + FLAG_FOR_DIVACA_SI_019 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0039\U000e007f" + FLAG_FOR_IVANCNA_GORICA_SI_039 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0039\U000e007f" + FLAG_FOR_KRSKO_SI_054 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0034\U000e007f" FLAG_FOR_KAMNIK_SI_043 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0033\U000e007f" - FLAG_FOR_HRPELJE_KOZINA_SI_035 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0035\U000e007f" - FLAG_FOR_DOMZALE_SI_023 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0033\U000e007f" FLAG_FOR_DOBREPOLJE_SI_020 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0030\U000e007f" - FLAG_FOR_PESNICA_SI_089 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0039\U000e007f" - FLAG_FOR_MEZICA_SI_074 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0034\U000e007f" - FLAG_FOR_MUTA_SI_081 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0031\U000e007f" - FLAG_FOR_LJUBNO_SI_062 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0032\U000e007f" - FLAG_FOR_ORMOZ_SI_087 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0037\U000e007f" - FLAG_FOR_LOSKI_POTOK_SI_066 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0036\U000e007f" - FLAG_FOR_MISLINJA_SI_076 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0036\U000e007f" - FLAG_FOR_MAJSPERK_SI_069 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0039\U000e007f" - FLAG_FOR_MENGES_SI_072 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0032\U000e007f" - FLAG_FOR_METLIKA_SI_073 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0033\U000e007f" - FLAG_FOR_MORAVCE_SI_077 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0037\U000e007f" - FLAG_FOR_MORAVSKE_TOPLICE_SI_078 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0038\U000e007f" - FLAG_FOR_POSTOJNA_SI_094 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0034\U000e007f" - FLAG_FOR_MURSKA_SOBOTA_SI_080 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0030\U000e007f" - FLAG_FOR_NAKLO_SI_082 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0032\U000e007f" - FLAG_FOR_AL_MADINAH_SA_03 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0033\U000e007f" + FLAG_FOR_SALOVCI_SI_033 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0033\U000e007f" + FLAG_FOR_KOBILJE_SI_047 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0037\U000e007f" + FLAG_FOR_HRASTNIK_SI_034 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0034\U000e007f" + FLAG_FOR_DOBROVA_POLHOV_GRADEC_SI_021 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0031\U000e007f" + FLAG_FOR_DRAVOGRAD_SI_025 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0035\U000e007f" + FLAG_FOR_STOCKHOLM_SE_AB = "\U0001f3f4\U000e0073\U000e0065\U000e0061\U000e0062\U000e007f" + FLAG_FOR_DUPLEK_SI_026 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0036\U000e007f" + FLAG_FOR_SALACGRIVA_LV_086 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0036\U000e007f" + FLAG_FOR_KOCEVJE_SI_048 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0038\U000e007f" + FLAG_FOR_KRANJSKA_GORA_SI_053 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0033\U000e007f" + FLAG_FOR_KANAL_SI_044 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0034\U000e007f" + FLAG_FOR_GORNJI_PETROVCI_SI_031 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0031\U000e007f" + FLAG_FOR_GROSUPLJE_SI_032 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0032\U000e007f" + FLAG_FOR_GORISNICA_SI_028 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0038\U000e007f" + FLAG_FOR_TEMOTU_SB_TE = "\U0001f3f4\U000e0073\U000e0062\U000e0074\U000e0065\U000e007f" + FLAG_FOR_DORNAVA_SI_024 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0034\U000e007f" + FLAG_FOR_DOMZALE_SI_023 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0033\U000e007f" + FLAG_FOR_KOBARID_SI_046 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0036\U000e007f" + FLAG_FOR_GORNJA_RADGONA_SI_029 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0039\U000e007f" + FLAG_FOR_ILIRSKA_BISTRICA_SI_038 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0038\U000e007f" + FLAG_FOR_KOMEN_SI_049 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0039\U000e007f" FLAG_FOR_MARIBOR_SI_070 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0030\U000e007f" - FLAG_FOR_PIVKA_SI_091 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0031\U000e007f" - FLAG_FOR_NAZARJE_SI_083 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0033\U000e007f" - FLAG_FOR_MIREN_KOSTANJEVICA_SI_075 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0035\U000e007f" - FLAG_FOR_LOGATEC_SI_064 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0034\U000e007f" - FLAG_FOR_LITIJA_SI_060 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0030\U000e007f" - FLAG_FOR_NOVA_GORICA_SI_084 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0034\U000e007f" - FLAG_FOR_LJUTOMER_SI_063 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0033\U000e007f" - FLAG_FOR_LASKO_SI_057 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0037\U000e007f" + FLAG_FOR_MEZICA_SI_074 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0034\U000e007f" FLAG_FOR_LUCE_SI_067 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0037\U000e007f" - FLAG_FOR_PODCETRTEK_SI_092 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0032\U000e007f" FLAG_FOR_PODVELKA_SI_093 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0033\U000e007f" - FLAG_FOR_MEDVODE_SI_071 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0031\U000e007f" - FLAG_FOR_LOSKA_DOLINA_SI_065 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0035\U000e007f" + FLAG_FOR_LOSKI_POTOK_SI_066 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0036\U000e007f" + FLAG_FOR_NAZARJE_SI_083 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0033\U000e007f" + FLAG_FOR_LITIJA_SI_060 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0030\U000e007f" + FLAG_FOR_LUKOVICA_SI_068 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0038\U000e007f" + FLAG_FOR_PESNICA_SI_089 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0039\U000e007f" FLAG_FOR_OSILNICA_SI_088 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0038\U000e007f" FLAG_FOR_LENDAVA_SI_059 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0039\U000e007f" - FLAG_FOR_MOZIRJE_SI_079 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0039\U000e007f" - FLAG_FOR_LUKOVICA_SI_068 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0038\U000e007f" + FLAG_FOR_MIREN_KOSTANJEVICA_SI_075 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0035\U000e007f" + FLAG_FOR_MORAVSKE_TOPLICE_SI_078 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0038\U000e007f" + FLAG_FOR_PODCETRTEK_SI_092 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0032\U000e007f" + FLAG_FOR_LJUTOMER_SI_063 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0033\U000e007f" + FLAG_FOR_LASKO_SI_057 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0037\U000e007f" + FLAG_FOR_PIVKA_SI_091 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0031\U000e007f" + FLAG_FOR_METLIKA_SI_073 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0033\U000e007f" + FLAG_FOR_HERCEG_NOVI_ME_08 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0038\U000e007f" + FLAG_FOR_LOSKA_DOLINA_SI_065 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0035\U000e007f" + FLAG_FOR_ANSE_ETOILE_SC_03 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0033\U000e007f" + FLAG_FOR_ORMOZ_SI_087 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0037\U000e007f" + FLAG_FOR_LOGATEC_SI_064 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0034\U000e007f" + FLAG_FOR_NAKLO_SI_082 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0032\U000e007f" + FLAG_FOR_NOVA_GORICA_SI_084 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0034\U000e007f" + FLAG_FOR_LJUBNO_SI_062 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0032\U000e007f" + FLAG_FOR_MISLINJA_SI_076 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0036\U000e007f" + FLAG_FOR_MEDVODE_SI_071 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0031\U000e007f" + FLAG_FOR_POSTOJNA_SI_094 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0034\U000e007f" + FLAG_FOR_MORAVCE_SI_077 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0037\U000e007f" FLAG_FOR_LJUBLJANA_SI_061 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0031\U000e007f" - FLAG_FOR_PIRAN_SI_090 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0030\U000e007f" - FLAG_FOR_TRZIC_SI_131 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0031\U000e007f" - FLAG_FOR_SENTILJ_SI_118 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0038\U000e007f" - FLAG_FOR_SLOVENSKE_KONJICE_SI_114 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0034\U000e007f" - FLAG_FOR_PUCONCI_SI_097 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0037\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_ROGASOVCI_SI_105 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0035\U000e007f" - FLAG_FOR_SLOVENSKA_BISTRICA_SI_113 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0033\U000e007f" - FLAG_FOR_ROGATEC_SI_107 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0037\U000e007f" - FLAG_FOR_PTUJ_SI_096 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0036\U000e007f" - FLAG_FOR_SENTJERNEJ_SI_119 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0039\U000e007f" + FLAG_FOR_MAJSPERK_SI_069 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0036\U000e0039\U000e007f" + FLAG_FOR_MENGES_SI_072 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0032\U000e007f" + FLAG_FOR_MUTA_SI_081 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0031\U000e007f" + FLAG_FOR_MOZIRJE_SI_079 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0037\U000e0039\U000e007f" + FLAG_FOR_MURSKA_SOBOTA_SI_080 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0030\U000e007f" + FLAG_FOR_RIBNICA_SI_104 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0034\U000e007f" + FLAG_FOR_SKOFLJICA_SI_123 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0033\U000e007f" FLAG_FOR_SEZANA_SI_111 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0031\U000e007f" + FLAG_FOR_TRBOVLJE_SI_129 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0039\U000e007f" + FLAG_FOR_SLOVENSKE_KONJICE_SI_114 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0034\U000e007f" + FLAG_FOR_STORE_SI_127 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0037\U000e007f" + FLAG_FOR_PUCONCI_SI_097 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0037\U000e007f" + FLAG_FOR_TREBNJE_SI_130 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0030\U000e007f" + FLAG_FOR_ROGATEC_SI_107 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0037\U000e007f" + FLAG_FOR_TOLMIN_SI_128 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0038\U000e007f" + FLAG_FOR_RADOVLJICA_SI_102 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0032\U000e007f" + FLAG_FOR_SEVNICA_SI_110 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0030\U000e007f" + FLAG_FOR_STARSE_SI_115 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0035\U000e007f" + FLAG_FOR_RADLJE_OB_DRAVI_SI_101 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0031\U000e007f" + FLAG_FOR_PTUJ_SI_096 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0036\U000e007f" + FLAG_FOR_SLOVENSKA_BISTRICA_SI_113 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0033\U000e007f" + FLAG_FOR_SEMIC_SI_109 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0039\U000e007f" + FLAG_FOR_PREDDVOR_SI_095 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0035\U000e007f" + FLAG_FOR_RADECE_SI_099 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0039\U000e007f" + FLAG_FOR_SOSTANJ_SI_126 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0036\U000e007f" + FLAG_FOR_ROGASKA_SLATINA_SI_106 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0036\U000e007f" + FLAG_FOR_TRZIC_SI_131 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0031\U000e007f" + FLAG_FOR_RUSE_SI_108 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0038\U000e007f" + FLAG_FOR_SMARJE_PRI_JELSAH_SI_124 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0034\U000e007f" + FLAG_FOR_TURNISCE_SI_132 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0032\U000e007f" + FLAG_FOR_SKOCJAN_SI_121 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0031\U000e007f" + FLAG_FOR_SVETI_JURIJ_SI_116 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0036\U000e007f" FLAG_FOR_RACE_FRAM_SI_098 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0038\U000e007f" FLAG_FOR_SLOVENJ_GRADEC_SI_112 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0032\U000e007f" - FLAG_FOR_STARSE_SI_115 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0035\U000e007f" - FLAG_FOR_SVETI_JURIJ_SI_116 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0036\U000e007f" - FLAG_FOR_TREBNJE_SI_130 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0030\U000e007f" - FLAG_FOR_SEVNICA_SI_110 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0030\U000e007f" - FLAG_FOR_RADECE_SI_099 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0039\U000e007f" - FLAG_FOR_SKOCJAN_SI_121 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0031\U000e007f" - FLAG_FOR_SMARJE_PRI_JELSAH_SI_124 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0034\U000e007f" - FLAG_FOR_SOSTANJ_SI_126 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0036\U000e007f" - FLAG_FOR_STORE_SI_127 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0037\U000e007f" - FLAG_FOR_ROGASKA_SLATINA_SI_106 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0036\U000e007f" - FLAG_FOR_PREDDVOR_SI_095 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0035\U000e007f" - FLAG_FOR_TURNISCE_SI_132 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0032\U000e007f" - FLAG_FOR_RADOVLJICA_SI_102 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0032\U000e007f" - FLAG_FOR_SENTJUR_SI_120 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0030\U000e007f" - FLAG_FOR_TOLMIN_SI_128 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0038\U000e007f" - FLAG_FOR_RIBNICA_SI_104 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0034\U000e007f" - FLAG_FOR_RADLJE_OB_DRAVI_SI_101 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0031\U000e007f" - FLAG_FOR_RUSE_SI_108 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0038\U000e007f" - FLAG_FOR_TRBOVLJE_SI_129 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0039\U000e007f" - FLAG_FOR_SEMIC_SI_109 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0039\U000e007f" + FLAG_FOR_SENTILJ_SI_118 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0038\U000e007f" + FLAG_FOR_ROGASOVCI_SI_105 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0035\U000e007f" + FLAG_FOR_SENTJERNEJ_SI_119 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0039\U000e007f" FLAG_FOR_SENCUR_SI_117 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0031\U000e0037\U000e007f" + FLAG_FOR_SENTJUR_SI_120 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0030\U000e007f" FLAG_FOR_RAVNE_NA_KOROSKEM_SI_103 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0033\U000e007f" - FLAG_FOR_SKOFLJICA_SI_123 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0033\U000e007f" - FLAG_FOR_MIKLAVZ_NA_DRAVSKEM_POLJU_SI_169 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0039\U000e007f" - FLAG_FOR_KOMENDA_SI_164 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0034\U000e007f" - FLAG_FOR_VUZENICA_SI_141 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0031\U000e007f" - FLAG_FOR_ZAGORJE_OB_SAVI_SI_142 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0032\U000e007f" - FLAG_FOR_VODICE_SI_138 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0038\U000e007f" - FLAG_FOR_VRHNIKA_SI_140 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0030\U000e007f" - FLAG_FOR_HAJDINA_SI_159 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0039\U000e007f" - FLAG_FOR_ZIRI_SI_147 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0037\U000e007f" - FLAG_FOR_BENEDIKT_SI_148 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0038\U000e007f" - FLAG_FOR_VELIKE_LASCE_SI_134 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0034\U000e007f" - FLAG_FOR_VITANJE_SI_137 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0037\U000e007f" - FLAG_FOR_GRAD_SI_158 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0038\U000e007f" - FLAG_FOR_DOBRNA_SI_155 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0035\U000e007f" - FLAG_FOR_DOBROVNIK_SI_156 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0036\U000e007f" FLAG_FOR_DOLENJSKE_TOPLICE_SI_157 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0037\U000e007f" - FLAG_FOR_HODOS_SI_161 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0031\U000e007f" - FLAG_FOR_OPLOTNICA_SI_171 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0031\U000e007f" + FLAG_FOR_MIKLAVZ_NA_DRAVSKEM_POLJU_SI_169 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0039\U000e007f" FLAG_FOR_VIDEM_SI_135 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0035\U000e007f" - FLAG_FOR_JEZERSKO_SI_163 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0033\U000e007f" - FLAG_FOR_BISTRICA_OB_SOTLI_SI_149 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0039\U000e007f" - FLAG_FOR_KOSTEL_SI_165 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0035\U000e007f" - FLAG_FOR_KRIZEVCI_SI_166 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0036\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_MARKOVCI_SI_168 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0038\U000e007f" - FLAG_FOR_MIRNA_PEC_SI_170 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0030\U000e007f" - FLAG_FOR_VIPAVA_SI_136 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0036\U000e007f" - FLAG_FOR_HORJUL_SI_162 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0032\U000e007f" - FLAG_FOR_CERKVENJAK_SI_153 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0033\U000e007f" - FLAG_FOR_BLOKE_SI_150 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0030\U000e007f" - FLAG_FOR_ZAVRC_SI_143 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0033\U000e007f" - FLAG_FOR_VOJNIK_SI_139 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0039\U000e007f" FLAG_FOR_ZRECE_SI_144 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0034\U000e007f" - FLAG_FOR_CANKOVA_SI_152 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0032\U000e007f" + FLAG_FOR_WEST_DARFUR_SD_DW = "\U0001f3f4\U000e0073\U000e0064\U000e0064\U000e0077\U000e007f" + FLAG_FOR_KOSTEL_SI_165 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0035\U000e007f" + FLAG_FOR_VOJNIK_SI_139 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0039\U000e007f" + FLAG_FOR_BENEDIKT_SI_148 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0038\U000e007f" + FLAG_FOR_HORJUL_SI_162 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0032\U000e007f" + FLAG_FOR_OPLOTNICA_SI_171 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0031\U000e007f" + FLAG_FOR_JEZERSKO_SI_163 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0033\U000e007f" + FLAG_FOR_VITANJE_SI_137 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0037\U000e007f" + FLAG_FOR_ZAGORJE_OB_SAVI_SI_142 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0032\U000e007f" + FLAG_FOR_VUZENICA_SI_141 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0031\U000e007f" + FLAG_FOR_VIPAVA_SI_136 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0036\U000e007f" + FLAG_FOR_HAJDINA_SI_159 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0039\U000e007f" FLAG_FOR_ZELEZNIKI_SI_146 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0036\U000e007f" + FLAG_FOR_ZIRI_SI_147 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0037\U000e007f" + FLAG_FOR_KRIZEVCI_SI_166 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0036\U000e007f" + FLAG_FOR_CERKVENJAK_SI_153 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0033\U000e007f" + FLAG_FOR_VRHNIKA_SI_140 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0030\U000e007f" FLAG_FOR_HOCE_SLIVNICA_SI_160 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0030\U000e007f" - FLAG_FOR_PODLEHNIK_SI_172 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0032\U000e007f" - FLAG_FOR_CIRKULANE_SI_196 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0036\U000e007f" - FLAG_FOR_PREBOLD_SI_174 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0034\U000e007f" - FLAG_FOR_VERZEJ_SI_188 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0038\U000e007f" + FLAG_FOR_VODICE_SI_138 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0038\U000e007f" + FLAG_FOR_MIRNA_PEC_SI_170 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0030\U000e007f" + FLAG_FOR_MARKOVCI_SI_168 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0038\U000e007f" + FLAG_FOR_HODOS_SI_161 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0031\U000e007f" + FLAG_FOR_DOBRNA_SI_155 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0035\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_KOMENDA_SI_164 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0034\U000e007f" FLAG_FOR_ZALEC_SI_190 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0030\U000e007f" - FLAG_FOR_SOLCAVA_SI_180 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0030\U000e007f" - FLAG_FOR_SVETA_ANA_SI_181 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0031\U000e007f" - FLAG_FOR_SEMPETER_VRTOJBA_SI_183 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0033\U000e007f" FLAG_FOR_TRNOVSKA_VAS_SI_185 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0035\U000e007f" + FLAG_FOR_SMARTNO_PRI_LITIJI_SI_194 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0034\U000e007f" + FLAG_FOR_GORJE_SI_207 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0037\U000e007f" + FLAG_FOR_PREBOLD_SI_174 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0034\U000e007f" + FLAG_FOR_SELNICA_OB_DRAVI_SI_178 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0038\U000e007f" + FLAG_FOR_APACE_SI_195 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0035\U000e007f" + FLAG_FOR_CIRKULANE_SI_196 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0036\U000e007f" + FLAG_FOR_SOLCAVA_SI_180 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0030\U000e007f" + FLAG_FOR_SEMPETER_VRTOJBA_SI_183 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0033\U000e007f" FLAG_FOR_VALLON_DE_LA_ROUSSE_MC_VR = "\U0001f3f4\U000e006d\U000e0063\U000e0076\U000e0072\U000e007f" FLAG_FOR_SODRAZICA_SI_179 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0039\U000e007f" - FLAG_FOR_MAKOLE_SI_198 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0038\U000e007f" - FLAG_FOR_STRAZA_SI_203 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0033\U000e007f" - FLAG_FOR_ZUZEMBERK_SI_193 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0033\U000e007f" - FLAG_FOR_KOSTANJEVICA_NA_KRKI_SI_197 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0037\U000e007f" - FLAG_FOR_PREVALJE_SI_175 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0035\U000e007f" - FLAG_FOR_SMARTNO_PRI_LITIJI_SI_194 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0034\U000e007f" - FLAG_FOR_ZETALE_SI_191 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0031\U000e007f" - FLAG_FOR_VRANSKO_SI_189 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0039\U000e007f" FLAG_FOR_RENCE_VOGRSKO_SI_201 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0031\U000e007f" - FLAG_FOR_TRZIN_SI_186 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0036\U000e007f" - FLAG_FOR_RAZKRIZJE_SI_176 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0036\U000e007f" - FLAG_FOR_SVETI_TOMAZ_SI_205 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0035\U000e007f" - FLAG_FOR_RIBNICA_NA_POHORJU_SI_177 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0037\U000e007f" - FLAG_FOR_GORJE_SI_207 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0037\U000e007f" - FLAG_FOR_SVETA_TROJICA_V_SLOVENSKIH_GORICAH_SI_204 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0034\U000e007f" - FLAG_FOR_TABOR_SI_184 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0034\U000e007f" - FLAG_FOR_MOKRONOG_TREBELNO_SI_199 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0039\U000e007f" - FLAG_FOR_POLZELA_SI_173 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0033\U000e007f" - FLAG_FOR_SELNICA_OB_DRAVI_SI_178 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0038\U000e007f" + FLAG_FOR_PREVALJE_SI_175 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0035\U000e007f" FLAG_FOR_POLJCANE_SI_200 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0030\U000e007f" - FLAG_FOR_APACE_SI_195 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0035\U000e007f" - FLAG_FOR_TRNAVA_SK_TA = "\U0001f3f4\U000e0073\U000e006b\U000e0074\U000e0061\U000e007f" - FLAG_FOR_RECICA_OB_SAVINJI_SI_209 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0039\U000e007f" + FLAG_FOR_RIBNICA_NA_POHORJU_SI_177 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0037\U000e007f" + FLAG_FOR_VERZEJ_SI_188 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0038\U000e007f" + FLAG_FOR_MAKOLE_SI_198 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0038\U000e007f" + FLAG_FOR_PODLEHNIK_SI_172 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0032\U000e007f" + FLAG_FOR_POLZELA_SI_173 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0033\U000e007f" + FLAG_FOR_RAZKRIZJE_SI_176 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0037\U000e0036\U000e007f" + FLAG_FOR_TABOR_SI_184 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0034\U000e007f" + FLAG_FOR_KOSTANJEVICA_NA_KRKI_SI_197 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0037\U000e007f" + FLAG_FOR_ZETALE_SI_191 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0031\U000e007f" + FLAG_FOR_ZUZEMBERK_SI_193 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0033\U000e007f" + FLAG_FOR_STRAZA_SI_203 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0033\U000e007f" + FLAG_FOR_VRANSKO_SI_189 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0039\U000e007f" + FLAG_FOR_TUBAS_PS_TBS = "\U0001f3f4\U000e0070\U000e0073\U000e0074\U000e0062\U000e0073\U000e007f" + FLAG_FOR_TRZIN_SI_186 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0036\U000e007f" + FLAG_FOR_SVETI_TOMAZ_SI_205 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0035\U000e007f" + FLAG_FOR_MOKRONOG_TREBELNO_SI_199 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0039\U000e007f" + FLAG_FOR_WESTERN_AREA_SL_W = "\U0001f3f4\U000e0073\U000e006c\U000e0077\U000e007f" + FLAG_FOR_CALABRIA_IT_78 = "\U0001f3f4\U000e0069\U000e0074\U000e0037\U000e0038\U000e007f" FLAG_FOR_SERRAVALLE_SM_09 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0039\U000e007f" FLAG_FOR_FAETANO_SM_04 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0034\U000e007f" - FLAG_FOR_KOSICE_SK_KI = "\U0001f3f4\U000e0073\U000e006b\U000e006b\U000e0069\U000e007f" FLAG_FOR_SENTRUPERT_SI_211 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0031\U000e0031\U000e007f" - FLAG_FOR_NITRA_SK_NI = "\U0001f3f4\U000e0073\U000e006b\U000e006e\U000e0069\U000e007f" - FLAG_FOR_KAOLACK_SN_KL = "\U0001f3f4\U000e0073\U000e006e\U000e006b\U000e006c\U000e007f" - FLAG_FOR_WEST_GREECE_GR_G = "\U0001f3f4\U000e0067\U000e0072\U000e0067\U000e007f" - FLAG_FOR_BANSKA_BYSTRICA_SK_BC = "\U0001f3f4\U000e0073\U000e006b\U000e0062\U000e0063\U000e007f" - FLAG_FOR_MONTEGIARDINO_SM_08 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0038\U000e007f" - FLAG_FOR_WESTERN_AREA_SL_W = "\U0001f3f4\U000e0073\U000e006c\U000e0077\U000e007f" - FLAG_FOR_FATICK_SN_FK = "\U0001f3f4\U000e0073\U000e006e\U000e0066\U000e006b\U000e007f" - FLAG_FOR_MIRNA_SI_212 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0031\U000e0032\U000e007f" - FLAG_FOR_KAFFRINE_SN_KA = "\U0001f3f4\U000e0073\U000e006e\U000e006b\U000e0061\U000e007f" - FLAG_FOR_FIORENTINO_SM_05 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0035\U000e007f" - TAG_QUESTION_MARK = "\U000e003f" - FLAG_FOR_SAN_MARINO_SM_07 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0037\U000e007f" - FLAG_FOR_DIOURBEL_SN_DB = "\U0001f3f4\U000e0073\U000e006e\U000e0064\U000e0062\U000e007f" - FLAG_FOR_RAJASTHAN_IN_RJ = "\U0001f3f4\U000e0069\U000e006e\U000e0072\U000e006a\U000e007f" - FLAG_FOR_SEOUL_KR_11 = "\U0001f3f4\U000e006b\U000e0072\U000e0031\U000e0031\U000e007f" - FLAG_FOR_DOMAGNANO_SM_03 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0033\U000e007f" - FLAG_FOR_CHIESANUOVA_SM_02 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0032\U000e007f" - FLAG_FOR_CALABRIA_IT_78 = "\U0001f3f4\U000e0069\U000e0074\U000e0037\U000e0038\U000e007f" - FLAG_FOR_NORTHERN_SL_N = "\U0001f3f4\U000e0073\U000e006c\U000e006e\U000e007f" - FLAG_FOR_TAMBACOUNDA_SN_TC = "\U0001f3f4\U000e0073\U000e006e\U000e0074\U000e0063\U000e007f" - FLAG_FOR_TRENCIN_SK_TC = "\U0001f3f4\U000e0073\U000e006b\U000e0074\U000e0063\U000e007f" - FLAG_FOR_KOLDA_SN_KD = "\U0001f3f4\U000e0073\U000e006e\U000e006b\U000e0064\U000e007f" - FLAG_FOR_SEDHIOU_SN_SE = "\U0001f3f4\U000e0073\U000e006e\U000e0073\U000e0065\U000e007f" - FLAG_FOR_THIES_SN_TH = "\U0001f3f4\U000e0073\U000e006e\U000e0074\U000e0068\U000e007f" - FLAG_FOR_KEDOUGOU_SN_KE = "\U0001f3f4\U000e0073\U000e006e\U000e006b\U000e0065\U000e007f" - FLAG_FOR_ZILINA_SK_ZI = "\U0001f3f4\U000e0073\U000e006b\U000e007a\U000e0069\U000e007f" + FLAG_FOR_TRNAVA_SK_TA = "\U0001f3f4\U000e0073\U000e006b\U000e0074\U000e0061\U000e007f" FLAG_FOR_ACQUAVIVA_SM_01 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0031\U000e007f" FLAG_FOR_SOUTHERN_SL_S = "\U0001f3f4\U000e0073\U000e006c\U000e0073\U000e007f" FLAG_FOR_PRESOV_SK_PV = "\U0001f3f4\U000e0073\U000e006b\U000e0070\U000e0076\U000e007f" - FLAG_FOR_BRATISLAVA_SK_BL = "\U0001f3f4\U000e0073\U000e006b\U000e0062\U000e006c\U000e007f" - FLAG_FOR_BORGO_MAGGIORE_SM_06 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0036\U000e007f" + FLAG_FOR_KOSICE_SK_KI = "\U0001f3f4\U000e0073\U000e006b\U000e006b\U000e0069\U000e007f" + FLAG_FOR_NORTHERN_SL_N = "\U0001f3f4\U000e0073\U000e006c\U000e006e\U000e007f" + FLAG_FOR_KAOLACK_SN_KL = "\U0001f3f4\U000e0073\U000e006e\U000e006b\U000e006c\U000e007f" + FLAG_FOR_SAN_MARINO_SM_07 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0037\U000e007f" + FLAG_FOR_FIORENTINO_SM_05 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0035\U000e007f" + FLAG_FOR_TAMBACOUNDA_SN_TC = "\U0001f3f4\U000e0073\U000e006e\U000e0074\U000e0063\U000e007f" + FLAG_FOR_SEOUL_KR_11 = "\U0001f3f4\U000e006b\U000e0072\U000e0031\U000e0031\U000e007f" + FLAG_FOR_CHIESANUOVA_SM_02 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0032\U000e007f" + FLAG_FOR_KOLDA_SN_KD = "\U0001f3f4\U000e0073\U000e006e\U000e006b\U000e0064\U000e007f" + FLAG_FOR_KAFFRINE_SN_KA = "\U0001f3f4\U000e0073\U000e006e\U000e006b\U000e0061\U000e007f" + FLAG_FOR_SEDHIOU_SN_SE = "\U0001f3f4\U000e0073\U000e006e\U000e0073\U000e0065\U000e007f" + FLAG_FOR_FATICK_SN_FK = "\U0001f3f4\U000e0073\U000e006e\U000e0066\U000e006b\U000e007f" + FLAG_FOR_TRENCIN_SK_TC = "\U0001f3f4\U000e0073\U000e006b\U000e0074\U000e0063\U000e007f" + FLAG_FOR_BANSKA_BYSTRICA_SK_BC = "\U0001f3f4\U000e0073\U000e006b\U000e0062\U000e0063\U000e007f" FLAG_FOR_LOUGA_SN_LG = "\U0001f3f4\U000e0073\U000e006e\U000e006c\U000e0067\U000e007f" + FLAG_FOR_NITRA_SK_NI = "\U0001f3f4\U000e0073\U000e006b\U000e006e\U000e0069\U000e007f" + FLAG_FOR_RECICA_OB_SAVINJI_SI_209 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0039\U000e007f" + FLAG_FOR_RAJASTHAN_IN_RJ = "\U0001f3f4\U000e0069\U000e006e\U000e0072\U000e006a\U000e007f" + FLAG_FOR_LENINGRAD_RU_LEN = "\U0001f3f4\U000e0072\U000e0075\U000e006c\U000e0065\U000e006e\U000e007f" + FLAG_FOR_ZILINA_SK_ZI = "\U0001f3f4\U000e0073\U000e006b\U000e007a\U000e0069\U000e007f" + FLAG_FOR_BORGO_MAGGIORE_SM_06 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0036\U000e007f" FLAG_FOR_MATAM_SN_MT = "\U0001f3f4\U000e0073\U000e006e\U000e006d\U000e0074\U000e007f" - FLAG_FOR_BROKOPONDO_SR_BR = "\U0001f3f4\U000e0073\U000e0072\U000e0062\U000e0072\U000e007f" - FLAG_FOR_EASTERN_EQUATORIA_SS_EE = "\U0001f3f4\U000e0073\U000e0073\U000e0065\U000e0065\U000e007f" - FLAG_FOR_SARAMACCA_SR_SA = "\U0001f3f4\U000e0073\U000e0072\U000e0073\U000e0061\U000e007f" - FLAG_FOR_SOOL_SO_SO = "\U0001f3f4\U000e0073\U000e006f\U000e0073\U000e006f\U000e007f" - FLAG_FOR_WESTERN_BAHR_EL_GHAZAL_SS_BW = "\U0001f3f4\U000e0073\U000e0073\U000e0062\U000e0077\U000e007f" - FLAG_FOR_PARAMARIBO_SR_PM = "\U0001f3f4\U000e0073\U000e0072\U000e0070\U000e006d\U000e007f" - FLAG_FOR_MAROWIJNE_SR_MA = "\U0001f3f4\U000e0073\U000e0072\U000e006d\U000e0061\U000e007f" - TAG_COMMA = "\U000e002c" + FLAG_FOR_DOMAGNANO_SM_03 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0033\U000e007f" + FLAG_FOR_KEDOUGOU_SN_KE = "\U0001f3f4\U000e0073\U000e006e\U000e006b\U000e0065\U000e007f" + FLAG_FOR_MIRNA_SI_212 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0031\U000e0032\U000e007f" + FLAG_FOR_THIES_SN_TH = "\U0001f3f4\U000e0073\U000e006e\U000e0074\U000e0068\U000e007f" + FLAG_FOR_MONTEGIARDINO_SM_08 = "\U0001f3f4\U000e0073\U000e006d\U000e0030\U000e0038\U000e007f" + FLAG_FOR_VALCEA_RO_VL = "\U0001f3f4\U000e0072\U000e006f\U000e0076\U000e006c\U000e007f" + FLAG_FOR_CLUJ_RO_CJ = "\U0001f3f4\U000e0072\U000e006f\U000e0063\U000e006a\U000e007f" FLAG_FOR_TOGDHEER_SO_TO = "\U0001f3f4\U000e0073\U000e006f\U000e0074\U000e006f\U000e007f" - FLAG_FOR_PRINCIPE_ST_P = "\U0001f3f4\U000e0073\U000e0074\U000e0070\U000e007f" - FLAG_FOR_CENTRAL_EQUATORIA_SS_EC = "\U0001f3f4\U000e0073\U000e0073\U000e0065\U000e0063\U000e007f" - FLAG_FOR_WOQOOYI_GALBEED_SO_WO = "\U0001f3f4\U000e0073\U000e006f\U000e0077\U000e006f\U000e007f" - FLAG_FOR_PARA_SR_PR = "\U0001f3f4\U000e0073\U000e0072\U000e0070\U000e0072\U000e007f" FLAG_FOR_UPPER_NILE_SS_NU = "\U0001f3f4\U000e0073\U000e0073\U000e006e\U000e0075\U000e007f" - FLAG_FOR_GEDO_SO_GE = "\U0001f3f4\U000e0073\U000e006f\U000e0067\U000e0065\U000e007f" - FLAG_FOR_GALGUDUUD_SO_GA = "\U0001f3f4\U000e0073\U000e006f\U000e0067\U000e0061\U000e007f" - FLAG_FOR_NUGAL_SO_NU = "\U0001f3f4\U000e0073\U000e006f\U000e006e\U000e0075\U000e007f" - FLAG_FOR_CORONIE_SR_CR = "\U0001f3f4\U000e0073\U000e0072\U000e0063\U000e0072\U000e007f" - FLAG_FOR_WANICA_SR_WA = "\U0001f3f4\U000e0073\U000e0072\U000e0077\U000e0061\U000e007f" - FLAG_FOR_GOVISUMBER_MN_064 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0034\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe" - FLAG_FOR_LOWER_JUBA_SO_JH = "\U0001f3f4\U000e0073\U000e006f\U000e006a\U000e0068\U000e007f" + FLAG_FOR_SARAMACCA_SR_SA = "\U0001f3f4\U000e0073\U000e0072\U000e0073\U000e0061\U000e007f" + FLAG_FOR_WESTERN_BAHR_EL_GHAZAL_SS_BW = "\U0001f3f4\U000e0073\U000e0073\U000e0062\U000e0077\U000e007f" FLAG_FOR_WARRAP_SS_WR = "\U0001f3f4\U000e0073\U000e0073\U000e0077\U000e0072\U000e007f" - FLAG_FOR_COMMEWIJNE_SR_CM = "\U0001f3f4\U000e0073\U000e0072\U000e0063\U000e006d\U000e007f" - FLAG_FOR_MIDDLE_SHEBELLE_SO_SD = "\U0001f3f4\U000e0073\U000e006f\U000e0073\U000e0064\U000e007f" - FLAG_FOR_JONGLEI_SS_JG = "\U0001f3f4\U000e0073\U000e0073\U000e006a\U000e0067\U000e007f" - FLAG_FOR_SANAAG_SO_SA = "\U0001f3f4\U000e0073\U000e006f\U000e0073\U000e0061\U000e007f" - FLAG_FOR_WESTERN_EQUATORIA_SS_EW = "\U0001f3f4\U000e0073\U000e0073\U000e0065\U000e0077\U000e007f" - FLAG_FOR_HIRAN_SO_HI = "\U0001f3f4\U000e0073\U000e006f\U000e0068\U000e0069\U000e007f" - FLAG_FOR_AWDAL_SO_AW = "\U0001f3f4\U000e0073\U000e006f\U000e0061\U000e0077\U000e007f" + DIE_FACE_6 = "\u2685" FLAG_FOR_NICKERIE_SR_NI = "\U0001f3f4\U000e0073\U000e0072\U000e006e\U000e0069\U000e007f" - FLAG_FOR_BARI_SO_BR = "\U0001f3f4\U000e0073\U000e006f\U000e0062\U000e0072\U000e007f" - FLAG_FOR_MUDUG_SO_MU = "\U0001f3f4\U000e0073\U000e006f\U000e006d\U000e0075\U000e007f" - FLAG_FOR_ZIGUINCHOR_SN_ZG = "\U0001f3f4\U000e0073\U000e006e\U000e007a\U000e0067\U000e007f" - FLAG_FOR_LOWER_SHEBELLE_SO_SH = "\U0001f3f4\U000e0073\U000e006f\U000e0073\U000e0068\U000e007f" - FLAG_FOR_MIDDLE_JUBA_SO_JD = "\U0001f3f4\U000e0073\U000e006f\U000e006a\U000e0064\U000e007f" + FLAG_FOR_EASTERN_EQUATORIA_SS_EE = "\U0001f3f4\U000e0073\U000e0073\U000e0065\U000e0065\U000e007f" FLAG_FOR_BAKOOL_SO_BK = "\U0001f3f4\U000e0073\U000e006f\U000e0062\U000e006b\U000e007f" - FLAG_FOR_SIPALIWINI_SR_SI = "\U0001f3f4\U000e0073\U000e0072\U000e0073\U000e0069\U000e007f" - FLAG_FOR_RIF_DIMASHQ_SY_RD = "\U0001f3f4\U000e0073\U000e0079\U000e0072\U000e0064\U000e007f" + FLAG_FOR_PARAMARIBO_SR_PM = "\U0001f3f4\U000e0073\U000e0072\U000e0070\U000e006d\U000e007f" + FLAG_FOR_WANICA_SR_WA = "\U0001f3f4\U000e0073\U000e0072\U000e0077\U000e0061\U000e007f" + FLAG_FOR_ANGAUR_PW_010 = "\U0001f3f4\U000e0070\U000e0077\U000e0030\U000e0031\U000e0030\U000e007f" + FLAG_FOR_MUDUG_SO_MU = "\U0001f3f4\U000e0073\U000e006f\U000e006d\U000e0075\U000e007f" + FLAG_FOR_MIDDLE_JUBA_SO_JD = "\U0001f3f4\U000e0073\U000e006f\U000e006a\U000e0064\U000e007f" + FLAG_FOR_WESTERN_EQUATORIA_SS_EW = "\U0001f3f4\U000e0073\U000e0073\U000e0065\U000e0077\U000e007f" + FLAG_FOR_PRINCIPE_ST_P = "\U0001f3f4\U000e0073\U000e0074\U000e0070\U000e007f" + FLAG_FOR_CORONIE_SR_CR = "\U0001f3f4\U000e0073\U000e0072\U000e0063\U000e0072\U000e007f" + FLAG_FOR_CONSTANTA_RO_CT = "\U0001f3f4\U000e0072\U000e006f\U000e0063\U000e0074\U000e007f" + FLAG_FOR_HIRAN_SO_HI = "\U0001f3f4\U000e0073\U000e006f\U000e0068\U000e0069\U000e007f" + FLAG_FOR_KARELIA_RU_KR = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0072\U000e007f" + FLAG_FOR_LOWER_SHEBELLE_SO_SH = "\U0001f3f4\U000e0073\U000e006f\U000e0073\U000e0068\U000e007f" + FLAG_FOR_GEDO_SO_GE = "\U0001f3f4\U000e0073\U000e006f\U000e0067\U000e0065\U000e007f" + FLAG_FOR_ZIGUINCHOR_SN_ZG = "\U0001f3f4\U000e0073\U000e006e\U000e007a\U000e0067\U000e007f" + FLAG_FOR_BOQUERON_PY_19 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0039\U000e007f" + FLAG_FOR_MIDDLE_SHEBELLE_SO_SD = "\U0001f3f4\U000e0073\U000e006f\U000e0073\U000e0064\U000e007f" + FLAG_FOR_SANAAG_SO_SA = "\U0001f3f4\U000e0073\U000e006f\U000e0073\U000e0061\U000e007f" + FLAG_FOR_BROKOPONDO_SR_BR = "\U0001f3f4\U000e0073\U000e0072\U000e0062\U000e0072\U000e007f" + FLAG_FOR_BREZICE_SI_009 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0039\U000e007f" + FLAG_FOR_HRPELJE_KOZINA_SI_035 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0035\U000e007f" + FLAG_FOR_AWDAL_SO_AW = "\U0001f3f4\U000e0073\U000e006f\U000e0061\U000e0077\U000e007f" + FLAG_FOR_LATAKIA_SY_LA = "\U0001f3f4\U000e0073\U000e0079\U000e006c\U000e0061\U000e007f" + FLAG_FOR_AS_SUWAYDA_SY_SU = "\U0001f3f4\U000e0073\U000e0079\U000e0073\U000e0075\U000e007f" + FLAG_FOR_AR_RAQQAH_SY_RA = "\U0001f3f4\U000e0073\U000e0079\U000e0072\U000e0061\U000e007f" FLAG_FOR_CUSCATLAN_SV_CU = "\U0001f3f4\U000e0073\U000e0076\U000e0063\U000e0075\U000e007f" - FLAG_FOR_SHISELWENI_SZ_SH = "\U0001f3f4\U000e0073\U000e007a\U000e0073\U000e0068\U000e007f" + FLAG_FOR_CHALATENANGO_SV_CH = "\U0001f3f4\U000e0073\U000e0076\U000e0063\U000e0068\U000e007f" + FLAG_FOR_GALGUDUUD_SO_GA = "\U0001f3f4\U000e0073\U000e006f\U000e0067\U000e0061\U000e007f" + FLAG_FOR_DOBROVNIK_SI_156 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0036\U000e007f" + FLAG_FOR_BORKOU_TD_BO = "\U0001f3f4\U000e0074\U000e0064\U000e0062\U000e006f\U000e007f" + FLAG_FOR_LUBOMBO_SZ_LU = "\U0001f3f4\U000e0073\U000e007a\U000e006c\U000e0075\U000e007f" + FLAG_FOR_MANZINI_SZ_MA = "\U0001f3f4\U000e0073\U000e007a\U000e006d\U000e0061\U000e007f" + FLAG_FOR_MORAZAN_SV_MO = "\U0001f3f4\U000e0073\U000e0076\U000e006d\U000e006f\U000e007f" + FLAG_FOR_DARAA_SY_DR = "\U0001f3f4\U000e0073\U000e0079\U000e0064\U000e0072\U000e007f" FLAG_FOR_SANTA_ANA_SV_SA = "\U0001f3f4\U000e0073\U000e0076\U000e0073\U000e0061\U000e007f" + FLAG_FOR_TARTUS_SY_TA = "\U0001f3f4\U000e0073\U000e0079\U000e0074\U000e0061\U000e007f" + FLAG_FOR_SHISELWENI_SZ_SH = "\U0001f3f4\U000e0073\U000e007a\U000e0073\U000e0068\U000e007f" + FLAG_FOR_LA_UNION_SV_UN = "\U0001f3f4\U000e0073\U000e0076\U000e0075\U000e006e\U000e007f" FLAG_FOR_BATHA_TD_BA = "\U0001f3f4\U000e0074\U000e0064\U000e0062\U000e0061\U000e007f" - FLAG_FOR_ALEPPO_SY_HL = "\U0001f3f4\U000e0073\U000e0079\U000e0068\U000e006c\U000e007f" + FLAG_FOR_KANEM_TD_KA = "\U0001f3f4\U000e0074\U000e0064\U000e006b\U000e0061\U000e007f" + FLAG_FOR_GUADELOUPE_FR_GUA = "\U0001f3f4\U000e0066\U000e0072\U000e0067\U000e0075\U000e0061\U000e007f" + FLAG_FOR_QUNEITRA_SY_QU = "\U0001f3f4\U000e0073\U000e0079\U000e0071\U000e0075\U000e007f" + FLAG_FOR_HOMS_SY_HI = "\U0001f3f4\U000e0073\U000e0079\U000e0068\U000e0069\U000e007f" + FLAG_FOR_AL_HASAKAH_SY_HA = "\U0001f3f4\U000e0073\U000e0079\U000e0068\U000e0061\U000e007f" + FLAG_FOR_HAMA_SY_HM = "\U0001f3f4\U000e0073\U000e0079\U000e0068\U000e006d\U000e007f" + FLAG_FOR_AHUACHAPAN_SV_AH = "\U0001f3f4\U000e0073\U000e0076\U000e0061\U000e0068\U000e007f" FLAG_FOR_SONSONATE_SV_SO = "\U0001f3f4\U000e0073\U000e0076\U000e0073\U000e006f\U000e007f" FLAG_FOR_CABANAS_SV_CA = "\U0001f3f4\U000e0073\U000e0076\U000e0063\U000e0061\U000e007f" - FLAG_FOR_AL_HASAKAH_SY_HA = "\U0001f3f4\U000e0073\U000e0079\U000e0068\U000e0061\U000e007f" - FLAG_FOR_MORAZAN_SV_MO = "\U0001f3f4\U000e0073\U000e0076\U000e006d\U000e006f\U000e007f" - FLAG_FOR_ENNEDI_OUEST_TD_EO = "\U0001f3f4\U000e0074\U000e0064\U000e0065\U000e006f\U000e007f" - FLAG_FOR_HOMS_SY_HI = "\U0001f3f4\U000e0073\U000e0079\U000e0068\U000e0069\U000e007f" - FLAG_FOR_LUBOMBO_SZ_LU = "\U0001f3f4\U000e0073\U000e007a\U000e006c\U000e0075\U000e007f" - FLAG_FOR_CHALATENANGO_SV_CH = "\U0001f3f4\U000e0073\U000e0076\U000e0063\U000e0068\U000e007f" - FLAG_FOR_HHOHHO_SZ_HH = "\U0001f3f4\U000e0073\U000e007a\U000e0068\U000e0068\U000e007f" - FLAG_FOR_TARTUS_SY_TA = "\U0001f3f4\U000e0073\U000e0079\U000e0074\U000e0061\U000e007f" - FLAG_FOR_DAMASCUS_SY_DI = "\U0001f3f4\U000e0073\U000e0079\U000e0064\U000e0069\U000e007f" - FLAG_FOR_MANZINI_SZ_MA = "\U0001f3f4\U000e0073\U000e007a\U000e006d\U000e0061\U000e007f" - FLAG_FOR_HAMA_SY_HM = "\U0001f3f4\U000e0073\U000e0079\U000e0068\U000e006d\U000e007f" FLAG_FOR_ENNEDI_EST_TD_EE = "\U0001f3f4\U000e0074\U000e0064\U000e0065\U000e0065\U000e007f" - FLAG_FOR_BORKOU_TD_BO = "\U0001f3f4\U000e0074\U000e0064\U000e0062\U000e006f\U000e007f" - FLAG_FOR_IDLIB_SY_ID = "\U0001f3f4\U000e0073\U000e0079\U000e0069\U000e0064\U000e007f" - FLAG_FOR_KANEM_TD_KA = "\U0001f3f4\U000e0074\U000e0064\U000e006b\U000e0061\U000e007f" + FLAG_FOR_ALEPPO_SY_HL = "\U0001f3f4\U000e0073\U000e0079\U000e0068\U000e006c\U000e007f" + FLAG_FOR_GOVISUMBER_MN_064 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0034\U000e007f" FLAG_FOR_LA_LIBERTAD_SV_LI = "\U0001f3f4\U000e0073\U000e0076\U000e006c\U000e0069\U000e007f" - FLAG_FOR_AHUACHAPAN_SV_AH = "\U0001f3f4\U000e0073\U000e0076\U000e0061\U000e0068\U000e007f" - FLAG_FOR_QUNEITRA_SY_QU = "\U0001f3f4\U000e0073\U000e0079\U000e0071\U000e0075\U000e007f" - FLAG_FOR_LA_UNION_SV_UN = "\U0001f3f4\U000e0073\U000e0076\U000e0075\U000e006e\U000e007f" - FLAG_FOR_CHARI_BAGUIRMI_TD_CB = "\U0001f3f4\U000e0074\U000e0064\U000e0063\U000e0062\U000e007f" - FLAG_FOR_DARAA_SY_DR = "\U0001f3f4\U000e0073\U000e0079\U000e0064\U000e0072\U000e007f" - FLAG_FOR_AS_SUWAYDA_SY_SU = "\U0001f3f4\U000e0073\U000e0079\U000e0073\U000e0075\U000e007f" FLAG_FOR_BAHR_EL_GAZEL_TD_BG = "\U0001f3f4\U000e0074\U000e0064\U000e0062\U000e0067\U000e007f" - FLAG_FOR_LATAKIA_SY_LA = "\U0001f3f4\U000e0073\U000e0079\U000e006c\U000e0061\U000e007f" - FLAG_FOR_AR_RAQQAH_SY_RA = "\U0001f3f4\U000e0073\U000e0079\U000e0072\U000e0061\U000e007f" - FLAG_FOR_LA_PAZ_SV_PA = "\U0001f3f4\U000e0073\U000e0076\U000e0070\U000e0061\U000e007f" - FLAG_FOR_GUERA_TD_GR = "\U0001f3f4\U000e0074\U000e0064\U000e0067\U000e0072\U000e007f" - FLAG_FOR_LOGONE_OCCIDENTAL_TD_LO = "\U0001f3f4\U000e0074\U000e0064\U000e006c\U000e006f\U000e007f" - FLAG_FOR_CHANTHABURI_TH_22 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0032\U000e007f" - FLAG_FOR_SING_BURI_TH_17 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0037\U000e007f" - FLAG_FOR_PHRA_NAKHON_SI_AYUTTHAYA_TH_14 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0034\U000e007f" - FLAG_FOR_LAC_TD_LC = "\U0001f3f4\U000e0074\U000e0064\U000e006c\U000e0063\U000e007f" - FLAG_FOR_ANG_THONG_TH_15 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0035\U000e007f" - FLAG_FOR_PATHUM_THANI_TH_13 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0033\U000e007f" - FLAG_FOR_SAVANES_TG_S = "\U0001f3f4\U000e0074\U000e0067\U000e0073\U000e007f" - FLAG_FOR_BANGKOK_TH_10 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0030\U000e007f" - FLAG_FOR_PLATEAUX_TG_P = "\U0001f3f4\U000e0074\U000e0067\U000e0070\U000e007f" - FLAG_FOR_TANDJILE_TD_TA = "\U0001f3f4\U000e0074\U000e0064\U000e0074\U000e0061\U000e007f" - FLAG_FOR_BURI_RAM_TH_31 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0031\U000e007f" - FLAG_FOR_CHON_BURI_TH_20 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0030\U000e007f" - FLAG_FOR_MAYO_KEBBI_EST_TD_ME = "\U0001f3f4\U000e0074\U000e0064\U000e006d\U000e0065\U000e007f" - FLAG_FOR_MOYEN_CHARI_TD_MC = "\U0001f3f4\U000e0074\U000e0064\U000e006d\U000e0063\U000e007f" - FLAG_FOR_RAYONG_TH_21 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0031\U000e007f" - FLAG_FOR_NAKHON_RATCHASIMA_TH_30 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0030\U000e007f" - FLAG_FOR_MAYO_KEBBI_OUEST_TD_MO = "\U0001f3f4\U000e0074\U000e0064\U000e006d\U000e006f\U000e007f" - FLAG_FOR_TIBESTI_TD_TI = "\U0001f3f4\U000e0074\U000e0064\U000e0074\U000e0069\U000e007f" - FLAG_FOR_MANDOUL_TD_MA = "\U0001f3f4\U000e0074\U000e0064\U000e006d\U000e0061\U000e007f" - TAG_LATIN_CAPITAL_LETTER_L = "\U000e004c" - TAG_LATIN_CAPITAL_LETTER_D = "\U000e0044" - FLAG_FOR_CHACHOENGSAO_TH_24 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0034\U000e007f" - FLAG_FOR_LOGONE_ORIENTAL_TD_LR = "\U0001f3f4\U000e0074\U000e0064\U000e006c\U000e0072\U000e007f" - FLAG_FOR_OUADDAI_TD_OD = "\U0001f3f4\U000e0074\U000e0064\U000e006f\U000e0064\U000e007f" - FLAG_FOR_SILA_TD_SI = "\U0001f3f4\U000e0074\U000e0064\U000e0073\U000e0069\U000e007f" - FLAG_FOR_SURIN_TH_32 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0032\U000e007f" - FLAG_FOR_NAKHON_NAYOK_TH_26 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0036\U000e007f" - FLAG_FOR_WADI_FIRA_TD_WF = "\U0001f3f4\U000e0074\U000e0064\U000e0077\U000e0066\U000e007f" - FLAG_FOR_SARABURI_TH_19 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0039\U000e007f" - FLAG_FOR_SAMUT_PRAKAN_TH_11 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0031\U000e007f" - FLAG_FOR_CHAI_NAT_TH_18 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0038\U000e007f" - FLAG_FOR_CENTRALE_TG_C = "\U0001f3f4\U000e0074\U000e0067\U000e0063\U000e007f" - FLAG_FOR_N_DJAMENA_TD_ND = "\U0001f3f4\U000e0074\U000e0064\U000e006e\U000e0064\U000e007f" - FLAG_FOR_SA_KAEO_TH_27 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0037\U000e007f" - FLAG_FOR_SALAMAT_TD_SA = "\U0001f3f4\U000e0074\U000e0064\U000e0073\U000e0061\U000e007f" + FLAG_FOR_SIPALIWINI_SR_SI = "\U0001f3f4\U000e0073\U000e0072\U000e0073\U000e0069\U000e007f" + FLAG_FOR_FINNMARK_NO_20 = "\U0001f3f4\U000e006e\U000e006f\U000e0032\U000e0030\U000e007f" FLAG_FOR_NONTHABURI_TH_12 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0032\U000e007f" + FLAG_FOR_PATHUM_THANI_TH_13 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0033\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_WADI_FIRA_TD_WF = "\U0001f3f4\U000e0074\U000e0064\U000e0077\U000e0066\U000e007f" FLAG_FOR_PRACHIN_BURI_TH_25 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0035\U000e007f" - FLAG_FOR_SAKON_NAKHON_TH_47 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0037\U000e007f" - FLAG_FOR_UBON_RATCHATHANI_TH_34 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0034\U000e007f" - FLAG_FOR_SUPHANBURI_TH_72 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0032\U000e007f" - FLAG_FOR_SAMUT_SAKHON_TH_74 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0034\U000e007f" - FLAG_FOR_PHETCHABUN_TH_67 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0037\U000e007f" - FLAG_FOR_KANCHANABURI_TH_71 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0031\U000e007f" + FLAG_FOR_BURI_RAM_TH_31 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0031\U000e007f" + FLAG_FOR_NAKHON_RATCHASIMA_TH_30 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0030\U000e007f" + FLAG_FOR_N_DJAMENA_TD_ND = "\U0001f3f4\U000e0074\U000e0064\U000e006e\U000e0064\U000e007f" + FLAG_FOR_PHRA_NAKHON_SI_AYUTTHAYA_TH_14 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0034\U000e007f" + FLAG_FOR_MARSASKALA_MT_27 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0037\U000e007f" + FLAG_FOR_LOGONE_OCCIDENTAL_TD_LO = "\U0001f3f4\U000e0074\U000e0064\U000e006c\U000e006f\U000e007f" + FLAG_FOR_CHACHOENGSAO_TH_24 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0034\U000e007f" + FLAG_FOR_TIBESTI_TD_TI = "\U0001f3f4\U000e0074\U000e0064\U000e0074\U000e0069\U000e007f" + FLAG_FOR_CHAI_NAT_TH_18 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0038\U000e007f" + FLAG_FOR_MOYEN_CHARI_TD_MC = "\U0001f3f4\U000e0074\U000e0064\U000e006d\U000e0063\U000e007f" + FLAG_FOR_TANDJILE_TD_TA = "\U0001f3f4\U000e0074\U000e0064\U000e0074\U000e0061\U000e007f" + FLAG_FOR_SAINT_HELENA_SH_HL = "\U0001f3f4\U000e0073\U000e0068\U000e0068\U000e006c\U000e007f" + FLAG_FOR_PLATEAUX_TG_P = "\U0001f3f4\U000e0074\U000e0067\U000e0070\U000e007f" + FLAG_FOR_SALAMAT_TD_SA = "\U0001f3f4\U000e0074\U000e0064\U000e0073\U000e0061\U000e007f" + FLAG_FOR_CHON_BURI_TH_20 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0030\U000e007f" + FLAG_FOR_MANDOUL_TD_MA = "\U0001f3f4\U000e0074\U000e0064\U000e006d\U000e0061\U000e007f" + FLAG_FOR_MAYO_KEBBI_EST_TD_ME = "\U0001f3f4\U000e0074\U000e0064\U000e006d\U000e0065\U000e007f" + FLAG_FOR_SURIN_TH_32 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0032\U000e007f" + FLAG_FOR_ARDAHAN_TR_75 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0035\U000e007f" + FLAG_FOR_NAKHON_NAYOK_TH_26 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0036\U000e007f" + FLAG_FOR_SARABURI_TH_19 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0039\U000e007f" + FLAG_FOR_RIF_DIMASHQ_SY_RD = "\U0001f3f4\U000e0073\U000e0079\U000e0072\U000e0064\U000e007f" + FLAG_FOR_SAMUT_PRAKAN_TH_11 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0031\U000e007f" + FLAG_FOR_SA_KAEO_TH_27 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0037\U000e007f" + FLAG_FOR_GUERA_TD_GR = "\U0001f3f4\U000e0074\U000e0064\U000e0067\U000e0072\U000e007f" + FLAG_FOR_OUADDAI_TD_OD = "\U0001f3f4\U000e0074\U000e0064\U000e006f\U000e0064\U000e007f" + FLAG_FOR_SAVANES_TG_S = "\U0001f3f4\U000e0074\U000e0067\U000e0073\U000e007f" FLAG_FOR_PHRAE_TH_54 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0034\U000e007f" - FLAG_FOR_TAK_TH_63 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0033\U000e007f" - FLAG_FOR_SUKHOTHAI_TH_64 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0034\U000e007f" - FLAG_FOR_NAKHON_PHANOM_TH_48 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0038\U000e007f" - FLAG_FOR_LAMPHUN_TH_51 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0031\U000e007f" - FLAG_FOR_MAE_HONG_SON_TH_58 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0038\U000e007f" - FLAG_FOR_KAMPHAENG_PHET_TH_62 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0032\U000e007f" - FLAG_FOR_PHAYAO_TH_56 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0036\U000e007f" - FLAG_FOR_CHIANG_MAI_TH_50 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0030\U000e007f" - FLAG_FOR_CHIANG_RAI_TH_57 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0037\U000e007f" - FLAG_FOR_NAN_TH_55 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0035\U000e007f" - FLAG_FOR_NAKHON_PATHOM_TH_73 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0033\U000e007f" FLAG_FOR_KHON_KAEN_TH_40 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0030\U000e007f" - FLAG_FOR_MAHA_SARAKHAM_TH_44 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0034\U000e007f" + FLAG_FOR_UTHAI_THANI_TH_61 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0031\U000e007f" + FLAG_FOR_MUKDAHAN_TH_49 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0039\U000e007f" + FLAG_FOR_PHITSANULOK_TH_65 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0035\U000e007f" + FLAG_FOR_LAMPANG_TH_52 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0032\U000e007f" + FLAG_FOR_SUPHANBURI_TH_72 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0032\U000e007f" FLAG_FOR_RATCHABURI_TH_70 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0030\U000e007f" FLAG_FOR_UDON_THANI_TH_41 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0031\U000e007f" - FLAG_FOR_YASOTHON_TH_35 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0035\U000e007f" - FLAG_FOR_MUKDAHAN_TH_49 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0039\U000e007f" - FLAG_FOR_NAKHON_SAWAN_TH_60 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0030\U000e007f" - FLAG_FOR_SI_SA_KET_TH_33 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0033\U000e007f" - FLAG_FOR_ROI_ET_TH_45 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0035\U000e007f" - FLAG_FOR_KALASIN_TH_46 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0036\U000e007f" FLAG_FOR_LOEI_TH_42 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0032\U000e007f" - FLAG_FOR_UTHAI_THANI_TH_61 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0031\U000e007f" - FLAG_FOR_BUENG_KAN_TH_38 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0038\U000e007f" - FLAG_FOR_NONG_BUA_LAM_PHU_TH_39 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0039\U000e007f" - FLAG_FOR_UTTARADIT_TH_53 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0033\U000e007f" - FLAG_FOR_LAMPANG_TH_52 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0032\U000e007f" - FLAG_FOR_PHICHIT_TH_66 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0036\U000e007f" FLAG_FOR_NONG_KHAI_TH_43 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0033\U000e007f" - FLAG_FOR_PHITSANULOK_TH_65 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0035\U000e007f" - FLAG_FOR_AMNAT_CHAROEN_TH_37 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0037\U000e007f" - FLAG_FOR_LIQUICA_TL_LI = "\U0001f3f4\U000e0074\U000e006c\U000e006c\U000e0069\U000e007f" - FLAG_FOR_DUSHANBE_TJ_DU = "\U0001f3f4\U000e0074\U000e006a\U000e0064\U000e0075\U000e007f" - FLAG_FOR_MANUFAHI_TL_MF = "\U0001f3f4\U000e0074\U000e006c\U000e006d\U000e0066\U000e007f" - FLAG_FOR_PHETCHABURI_TH_76 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0036\U000e007f" - FLAG_FOR_BOBONARO_TL_BO = "\U0001f3f4\U000e0074\U000e006c\U000e0062\U000e006f\U000e007f" - FLAG_FOR_MANATUTO_TL_MT = "\U0001f3f4\U000e0074\U000e006c\U000e006d\U000e0074\U000e007f" - FLAG_FOR_KHATLON_TJ_KT = "\U0001f3f4\U000e0074\U000e006a\U000e006b\U000e0074\U000e007f" - FLAG_FOR_TUNIS_TN_11 = "\U0001f3f4\U000e0074\U000e006e\U000e0031\U000e0031\U000e007f" - FLAG_FOR_AINARO_TL_AN = "\U0001f3f4\U000e0074\U000e006c\U000e0061\U000e006e\U000e007f" - FLAG_FOR_PHANG_NGA_TH_82 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0032\U000e007f" - FLAG_FOR_COVA_LIMA_TL_CO = "\U0001f3f4\U000e0074\U000e006c\U000e0063\U000e006f\U000e007f" - FLAG_FOR_ERMERA_TL_ER = "\U0001f3f4\U000e0074\U000e006c\U000e0065\U000e0072\U000e007f" - FLAG_FOR_RANONG_TH_85 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0035\U000e007f" - FLAG_FOR_PRACHUAP_KHIRI_KHAN_TH_77 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0037\U000e007f" - FLAG_FOR_KRABI_TH_81 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0031\U000e007f" - FLAG_FOR_YALA_TH_95 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0035\U000e007f" - FLAG_FOR_SURAT_THANI_TH_84 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0034\U000e007f" - FLAG_FOR_LEBAP_TM_L = "\U0001f3f4\U000e0074\U000e006d\U000e006c\U000e007f" - FLAG_FOR_SUGHD_TJ_SU = "\U0001f3f4\U000e0074\U000e006a\U000e0073\U000e0075\U000e007f" - FLAG_FOR_TRANG_TH_92 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0032\U000e007f" + FLAG_FOR_NAKHON_SAWAN_TH_60 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0030\U000e007f" + FLAG_FOR_PHETCHABUN_TH_67 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0037\U000e007f" + FLAG_FOR_SAKON_NAKHON_TH_47 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0037\U000e007f" + FLAG_FOR_KALASIN_TH_46 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0036\U000e007f" + FLAG_FOR_KANCHANABURI_TH_71 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0031\U000e007f" + FLAG_FOR_TOTONICAPAN_GT_TO = "\U0001f3f4\U000e0067\U000e0074\U000e0074\U000e006f\U000e007f" + FLAG_FOR_SAMUT_SAKHON_TH_74 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0034\U000e007f" + FLAG_FOR_TIGRAY_ET_TI = "\U0001f3f4\U000e0065\U000e0074\U000e0074\U000e0069\U000e007f" + FLAG_FOR_NAKHON_PHANOM_TH_48 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0038\U000e007f" + FLAG_FOR_NAKHON_PATHOM_TH_73 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0033\U000e007f" + FLAG_FOR_UBON_RATCHATHANI_TH_34 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0034\U000e007f" + FLAG_FOR_KAMPHAENG_PHET_TH_62 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0032\U000e007f" + FLAG_FOR_YASOTHON_TH_35 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0035\U000e007f" + FLAG_FOR_CHIANG_RAI_TH_57 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0037\U000e007f" + FLAG_FOR_CHIANG_MAI_TH_50 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0030\U000e007f" + FLAG_FOR_NONG_BUA_LAM_PHU_TH_39 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0039\U000e007f" + FLAG_FOR_TAK_TH_63 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0033\U000e007f" + FLAG_FOR_BUENG_KAN_TH_38 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0038\U000e007f" + FLAG_FOR_LAMPHUN_TH_51 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0031\U000e007f" + FLAG_FOR_PHAYAO_TH_56 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0036\U000e007f" + FLAG_FOR_ROI_ET_TH_45 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0035\U000e007f" + FLAG_FOR_PHICHIT_TH_66 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0036\U000e007f" + FLAG_FOR_MAHA_SARAKHAM_TH_44 = "\U0001f3f4\U000e0074\U000e0068\U000e0034\U000e0034\U000e007f" + FLAG_FOR_SI_SA_KET_TH_33 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0033\U000e007f" + FLAG_FOR_NAN_TH_55 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0035\U000e007f" + FLAG_FOR_SUKHOTHAI_TH_64 = "\U0001f3f4\U000e0074\U000e0068\U000e0036\U000e0034\U000e007f" FLAG_FOR_AILEU_TL_AL = "\U0001f3f4\U000e0074\U000e006c\U000e0061\U000e006c\U000e007f" - FLAG_FOR_AHAL_TM_A = "\U0001f3f4\U000e0074\U000e006d\U000e0061\U000e007f" - FLAG_FOR_SONGKHLA_TH_90 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0030\U000e007f" + FLAG_FOR_MOQUEGUA_PE_MOQ = "\U0001f3f4\U000e0070\U000e0065\U000e006d\U000e006f\U000e0071\U000e007f" FLAG_FOR_BAUCAU_TL_BA = "\U0001f3f4\U000e0074\U000e006c\U000e0062\U000e0061\U000e007f" - FLAG_FOR_NARATHIWAT_TH_96 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0036\U000e007f" - FLAG_FOR_DASOGUZ_TM_D = "\U0001f3f4\U000e0074\U000e006d\U000e0064\U000e007f" - FLAG_FOR_NAKHON_SI_THAMMARAT_TH_80 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0030\U000e007f" - FLAG_FOR_MARY_TM_M = "\U0001f3f4\U000e0074\U000e006d\U000e006d\U000e007f" - FLAG_FOR_VIQUEQUE_TL_VI = "\U0001f3f4\U000e0074\U000e006c\U000e0076\U000e0069\U000e007f" - FLAG_FOR_PATTANI_TH_94 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0034\U000e007f" - FLAG_FOR_PATTAYA_TH_S = "\U0001f3f4\U000e0074\U000e0068\U000e0073\U000e007f" - FLAG_FOR_DILI_TL_DI = "\U0001f3f4\U000e0074\U000e006c\U000e0064\U000e0069\U000e007f" - FLAG_FOR_OECUSSE_TL_OE = "\U0001f3f4\U000e0074\U000e006c\U000e006f\U000e0065\U000e007f" + FLAG_FOR_AINARO_TL_AN = "\U0001f3f4\U000e0074\U000e006c\U000e0061\U000e006e\U000e007f" + FLAG_FOR_YAP_FM_YAP = "\U0001f3f4\U000e0066\U000e006d\U000e0079\U000e0061\U000e0070\U000e007f" FLAG_FOR_SATUN_TH_91 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0031\U000e007f" - FLAG_FOR_NOHIYAHOI_TOBEI_JUMHURI_TJ_RA = "\U0001f3f4\U000e0074\U000e006a\U000e0072\U000e0061\U000e007f" - FLAG_FOR_BEJA_TN_31 = "\U0001f3f4\U000e0074\U000e006e\U000e0033\U000e0031\U000e007f" - FLAG_FOR_KASSERINE_TN_42 = "\U0001f3f4\U000e0074\U000e006e\U000e0034\U000e0032\U000e007f" - FLAG_FOR_MEDENINE_TN_82 = "\U0001f3f4\U000e0074\U000e006e\U000e0038\U000e0032\U000e007f" - FLAG_FOR_ADANA_TR_01 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0031\U000e007f" - FLAG_FOR_VAVA_U_TO_05 = "\U0001f3f4\U000e0074\U000e006f\U000e0030\U000e0035\U000e007f" - FLAG_FOR_HA_APAI_TO_02 = "\U0001f3f4\U000e0074\U000e006f\U000e0030\U000e0032\U000e007f" - FLAG_FOR_BITLIS_TR_13 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0033\U000e007f" - FLAG_FOR_AYDIN_TR_09 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0039\U000e007f" + FLAG_FOR_PHANG_NGA_TH_82 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0032\U000e007f" + FLAG_FOR_TRANG_TH_92 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0032\U000e007f" + FLAG_FOR_SONGKHLA_TH_90 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0030\U000e007f" + FLAG_FOR_DASOGUZ_TM_D = "\U0001f3f4\U000e0074\U000e006d\U000e0064\U000e007f" + KISS_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + FLAG_FOR_PATTAYA_TH_S = "\U0001f3f4\U000e0074\U000e0068\U000e0073\U000e007f" + FLAG_FOR_BLEKINGE_SE_K = "\U0001f3f4\U000e0073\U000e0065\U000e006b\U000e007f" + FLAG_FOR_MANATUTO_TL_MT = "\U0001f3f4\U000e0074\U000e006c\U000e006d\U000e0074\U000e007f" + FLAG_FOR_PATTANI_TH_94 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0034\U000e007f" + FLAG_FOR_HIROSHIMA_JP_34 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0034\U000e007f" + FLAG_FOR_JIWAKA_PG_JWK = "\U0001f3f4\U000e0070\U000e0067\U000e006a\U000e0077\U000e006b\U000e007f" + FLAG_FOR_LIQUICA_TL_LI = "\U0001f3f4\U000e0074\U000e006c\U000e006c\U000e0069\U000e007f" + FLAG_FOR_KHATLON_TJ_KT = "\U0001f3f4\U000e0074\U000e006a\U000e006b\U000e0074\U000e007f" + FLAG_FOR_SUGHD_TJ_SU = "\U0001f3f4\U000e0074\U000e006a\U000e0073\U000e0075\U000e007f" + FLAG_FOR_VIQUEQUE_TL_VI = "\U0001f3f4\U000e0074\U000e006c\U000e0076\U000e0069\U000e007f" + FLAG_FOR_BOBONARO_TL_BO = "\U0001f3f4\U000e0074\U000e006c\U000e0062\U000e006f\U000e007f" + FLAG_FOR_SURAT_THANI_TH_84 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0034\U000e007f" + FLAG_FOR_RANONG_TH_85 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0035\U000e007f" + FLAG_FOR_NORD_EST_HT_NE = "\U0001f3f4\U000e0068\U000e0074\U000e006e\U000e0065\U000e007f" + FLAG_FOR_PRACHUAP_KHIRI_KHAN_TH_77 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0037\U000e007f" + FLAG_FOR_PHETCHABURI_TH_76 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0036\U000e007f" + FLAG_FOR_NARATHIWAT_TH_96 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0036\U000e007f" FLAG_FOR_MAHDIA_TN_53 = "\U0001f3f4\U000e0074\U000e006e\U000e0035\U000e0033\U000e007f" - FLAG_FOR_BALIKESIR_TR_10 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0030\U000e007f" - FLAG_FOR_EUA_TO_01 = "\U0001f3f4\U000e0074\U000e006f\U000e0030\U000e0031\U000e007f" - FLAG_FOR_TATAOUINE_TN_83 = "\U0001f3f4\U000e0074\U000e006e\U000e0038\U000e0033\U000e007f" + FLAG_FOR_TONGATAPU_TO_04 = "\U0001f3f4\U000e0074\U000e006f\U000e0030\U000e0034\U000e007f" + FLAG_FOR_VAVA_U_TO_05 = "\U0001f3f4\U000e0074\U000e006f\U000e0030\U000e0035\U000e007f" FLAG_FOR_KAIROUAN_TN_41 = "\U0001f3f4\U000e0074\U000e006e\U000e0034\U000e0031\U000e007f" FLAG_FOR_BOLU_TR_14 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0034\U000e007f" - FLAG_FOR_ARIANA_TN_12 = "\U0001f3f4\U000e0074\U000e006e\U000e0031\U000e0032\U000e007f" - FLAG_FOR_GABES_TN_81 = "\U0001f3f4\U000e0074\U000e006e\U000e0038\U000e0031\U000e007f" - FLAG_FOR_NABEUL_TN_21 = "\U0001f3f4\U000e0074\U000e006e\U000e0032\U000e0031\U000e007f" - FLAG_FOR_KEF_TN_33 = "\U0001f3f4\U000e0074\U000e006e\U000e0033\U000e0033\U000e007f" - FLAG_FOR_JENDOUBA_TN_32 = "\U0001f3f4\U000e0074\U000e006e\U000e0033\U000e0032\U000e007f" FLAG_FOR_BINGOL_TR_12 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0032\U000e007f" - FLAG_FOR_ANTALYA_TR_07 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0037\U000e007f" - FLAG_FOR_ADIYAMAN_TR_02 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0032\U000e007f" - FLAG_FOR_BEN_AROUS_TN_13 = "\U0001f3f4\U000e0074\U000e006e\U000e0031\U000e0033\U000e007f" - FLAG_FOR_SOUSSE_TN_51 = "\U0001f3f4\U000e0074\U000e006e\U000e0035\U000e0031\U000e007f" - FLAG_FOR_ZAGHOUAN_TN_22 = "\U0001f3f4\U000e0074\U000e006e\U000e0032\U000e0032\U000e007f" FLAG_FOR_AMASYA_TR_05 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0035\U000e007f" - FLAG_FOR_MONASTIR_TN_52 = "\U0001f3f4\U000e0074\U000e006e\U000e0035\U000e0032\U000e007f" - FLAG_FOR_NIUAS_TO_03 = "\U0001f3f4\U000e0074\U000e006f\U000e0030\U000e0033\U000e007f" - FLAG_FOR_TOZEUR_TN_72 = "\U0001f3f4\U000e0074\U000e006e\U000e0037\U000e0032\U000e007f" - FLAG_FOR_ANKARA_TR_06 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0036\U000e007f" - FLAG_FOR_AGRI_TR_04 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0034\U000e007f" - FLAG_FOR_MANOUBA_TN_14 = "\U0001f3f4\U000e0074\U000e006e\U000e0031\U000e0034\U000e007f" - FLAG_FOR_BIZERTE_TN_23 = "\U0001f3f4\U000e0074\U000e006e\U000e0032\U000e0033\U000e007f" - FLAG_FOR_SILIANA_TN_34 = "\U0001f3f4\U000e0074\U000e006e\U000e0033\U000e0034\U000e007f" - FLAG_FOR_SFAX_TN_61 = "\U0001f3f4\U000e0074\U000e006e\U000e0036\U000e0031\U000e007f" - FLAG_FOR_TONGATAPU_TO_04 = "\U0001f3f4\U000e0074\U000e006f\U000e0030\U000e0034\U000e007f" - FLAG_FOR_SIDI_BOUZID_TN_43 = "\U0001f3f4\U000e0074\U000e006e\U000e0034\U000e0033\U000e007f" - FLAG_FOR_ARTVIN_TR_08 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0038\U000e007f" - FLAG_FOR_KEBILI_TN_73 = "\U0001f3f4\U000e0074\U000e006e\U000e0037\U000e0033\U000e007f" + FLAG_FOR_BEJA_TN_31 = "\U0001f3f4\U000e0074\U000e006e\U000e0033\U000e0031\U000e007f" + FLAG_FOR_ZAGHOUAN_TN_22 = "\U0001f3f4\U000e0074\U000e006e\U000e0032\U000e0032\U000e007f" FLAG_FOR_BILECIK_TR_11 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0031\U000e007f" - FLAG_FOR_BURDUR_TR_15 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0035\U000e007f" - FLAG_FOR_KAYSERI_TR_38 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0038\U000e007f" - FLAG_FOR_ISTANBUL_TR_34 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0034\U000e007f" - FLAG_FOR_SAKARYA_TR_54 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0034\U000e007f" - FLAG_FOR_GAZIANTEP_TR_27 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0037\U000e007f" - FLAG_FOR_MERSIN_TR_33 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0033\U000e007f" - FLAG_FOR_KASTAMONU_TR_37 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0037\U000e007f" - FLAG_FOR_ESKISEHIR_TR_26 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0036\U000e007f" - FLAG_FOR_MUGLA_TR_48 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0038\U000e007f" - FLAG_FOR_ELAZIG_TR_23 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0033\U000e007f" - FLAG_FOR_RIZE_TR_53 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0033\U000e007f" - FLAG_FOR_EDIRNE_TR_22 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0032\U000e007f" - FLAG_FOR_GIRESUN_TR_28 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0038\U000e007f" + FLAG_FOR_AGRI_TR_04 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0034\U000e007f" + FLAG_FOR_KEF_TN_33 = "\U0001f3f4\U000e0074\U000e006e\U000e0033\U000e0033\U000e007f" + FLAG_FOR_MANOUBA_TN_14 = "\U0001f3f4\U000e0074\U000e006e\U000e0031\U000e0034\U000e007f" + FLAG_FOR_MEDENINE_TN_82 = "\U0001f3f4\U000e0074\U000e006e\U000e0038\U000e0032\U000e007f" + FLAG_FOR_BALIKESIR_TR_10 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0030\U000e007f" + FLAG_FOR_EWA_NR_09 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0039\U000e007f" + FLAG_FOR_TOZEUR_TN_72 = "\U0001f3f4\U000e0074\U000e006e\U000e0037\U000e0032\U000e007f" + FLAG_FOR_EUA_TO_01 = "\U0001f3f4\U000e0074\U000e006f\U000e0030\U000e0031\U000e007f" + FLAG_FOR_KASSERINE_TN_42 = "\U0001f3f4\U000e0074\U000e006e\U000e0034\U000e0032\U000e007f" + FLAG_FOR_GABES_TN_81 = "\U0001f3f4\U000e0074\U000e006e\U000e0038\U000e0031\U000e007f" + FLAG_FOR_KAUNAS_LT_16 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0036\U000e007f" + FLAG_FOR_SILIANA_TN_34 = "\U0001f3f4\U000e0074\U000e006e\U000e0033\U000e0034\U000e007f" + FLAG_FOR_JENDOUBA_TN_32 = "\U0001f3f4\U000e0074\U000e006e\U000e0033\U000e0032\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_BIZERTE_TN_23 = "\U0001f3f4\U000e0074\U000e006e\U000e0032\U000e0033\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469" + FLAG_FOR_NIUAS_TO_03 = "\U0001f3f4\U000e0074\U000e006f\U000e0030\U000e0033\U000e007f" + FLAG_FOR_AYDIN_TR_09 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0039\U000e007f" + FLAG_FOR_SIDI_BOUZID_TN_43 = "\U0001f3f4\U000e0074\U000e006e\U000e0034\U000e0033\U000e007f" + FLAG_FOR_JOHOR_MY_01 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0031\U000e007f" + FLAG_FOR_KEBILI_TN_73 = "\U0001f3f4\U000e0074\U000e006e\U000e0037\U000e0033\U000e007f" + FLAG_FOR_TATAOUINE_TN_83 = "\U0001f3f4\U000e0074\U000e006e\U000e0038\U000e0033\U000e007f" + FLAG_FOR_MONASTIR_TN_52 = "\U0001f3f4\U000e0074\U000e006e\U000e0035\U000e0032\U000e007f" + FLAG_FOR_ARTVIN_TR_08 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0038\U000e007f" + FLAG_FOR_GRAUBUNDEN_CH_GR = "\U0001f3f4\U000e0063\U000e0068\U000e0067\U000e0072\U000e007f" FLAG_FOR_MALATYA_TR_44 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0034\U000e007f" - FLAG_FOR_KONYA_TR_42 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0032\U000e007f" - FLAG_FOR_DIYARBAKIR_TR_21 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0031\U000e007f" - FLAG_FOR_KOCAELI_TR_41 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0031\U000e007f" - FLAG_FOR_SIIRT_TR_56 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0036\U000e007f" - FLAG_FOR_ERZURUM_TR_25 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0035\U000e007f" - FLAG_FOR_HATAY_TR_31 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0031\U000e007f" - FLAG_FOR_ERZINCAN_TR_24 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0034\U000e007f" - FLAG_FOR_MUS_TR_49 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0039\U000e007f" - FLAG_FOR_HAKKARI_TR_30 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0030\U000e007f" - FLAG_FOR_GUMUSHANE_TR_29 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0039\U000e007f" - FLAG_FOR_CANAKKALE_TR_17 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0037\U000e007f" - FLAG_FOR_KIRKLARELI_TR_39 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0039\U000e007f" - FLAG_FOR_KIRSEHIR_TR_40 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0030\U000e007f" - FLAG_FOR_ORDU_TR_52 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0032\U000e007f" - FLAG_FOR_NEVSEHIR_TR_50 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0030\U000e007f" - FLAG_FOR_MARDIN_TR_47 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0037\U000e007f" - FLAG_FOR_KAHRAMANMARAS_TR_46 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0036\U000e007f" - FLAG_FOR_ISPARTA_TR_32 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0032\U000e007f" - FLAG_FOR_CANKIRI_TR_18 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0038\U000e007f" FLAG_FOR_DENIZLI_TR_20 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0030\U000e007f" + FLAG_FOR_RIZE_TR_53 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0033\U000e007f" + FLAG_FOR_DIYARBAKIR_TR_21 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0031\U000e007f" + FLAG_FOR_EDIRNE_TR_22 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0032\U000e007f" FLAG_FOR_BURSA_TR_16 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0036\U000e007f" - FLAG_FOR_CORUM_TR_19 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0039\U000e007f" - FLAG_FOR_SAMSUN_TR_55 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0035\U000e007f" + FLAG_FOR_SIIRT_TR_56 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0036\U000e007f" + FLAG_FOR_BOKE_REGION_GN_B = "\U0001f3f4\U000e0067\U000e006e\U000e0062\U000e007f" + FLAG_FOR_KAHRAMANMARAS_TR_46 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0036\U000e007f" + FLAG_FOR_MARDIN_TR_47 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0037\U000e007f" + FLAG_FOR_ERZURUM_TR_25 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0035\U000e007f" + FLAG_FOR_ORO_PG_NPP = "\U0001f3f4\U000e0070\U000e0067\U000e006e\U000e0070\U000e0070\U000e007f" FLAG_FOR_NIGDE_TR_51 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0031\U000e007f" + FLAG_FOR_ORDU_TR_52 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0032\U000e007f" + FLAG_FOR_NGOBE_BUGLE_PA_NB = "\U0001f3f4\U000e0070\U000e0061\U000e006e\U000e0062\U000e007f" + FLAG_FOR_HAKKARI_TR_30 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0030\U000e007f" + FLAG_FOR_SAMSUN_TR_55 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0035\U000e007f" + FLAG_FOR_HATAY_TR_31 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0031\U000e007f" + FLAG_FOR_SAKARYA_TR_54 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0034\U000e007f" + FLAG_FOR_KIRKLARELI_TR_39 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0039\U000e007f" + FLAG_FOR_VICTORIA_MT_45 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0035\U000e007f" + FLAG_FOR_KIRSEHIR_TR_40 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0030\U000e007f" + FLAG_FOR_ISPARTA_TR_32 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0032\U000e007f" + FLAG_FOR_ESKISEHIR_TR_26 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0036\U000e007f" + FLAG_FOR_BURDUR_TR_15 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0035\U000e007f" FLAG_FOR_MANISA_TR_45 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0035\U000e007f" - FLAG_FOR_SANLIURFA_TR_63 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0033\U000e007f" - FLAG_FOR_COUVA_TABAQUITE_TALPARO_TT_CTT = "\U0001f3f4\U000e0074\U000e0074\U000e0063\U000e0074\U000e0074\U000e007f" - FLAG_FOR_SIPARIA_TT_SIP = "\U0001f3f4\U000e0074\U000e0074\U000e0073\U000e0069\U000e0070\U000e007f" - FLAG_FOR_TEKIRDAG_TR_59 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0039\U000e007f" + FLAG_FOR_PRAHA_HLAVNI_MESTO_CZ_10 = "\U0001f3f4\U000e0063\U000e007a\U000e0031\U000e0030\U000e007f" + FLAG_FOR_ELAZIG_TR_23 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0033\U000e007f" + FLAG_FOR_CANAKKALE_TR_17 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0037\U000e007f" FLAG_FOR_MAYARO_RIO_CLARO_TT_MRC = "\U0001f3f4\U000e0074\U000e0074\U000e006d\U000e0072\U000e0063\U000e007f" - FLAG_FOR_TOBAGO_TT_TOB = "\U0001f3f4\U000e0074\U000e0074\U000e0074\U000e006f\U000e0062\U000e007f" - FLAG_FOR_OSMANIYE_TR_80 = "\U0001f3f4\U000e0074\U000e0072\U000e0038\U000e0030\U000e007f" - FLAG_FOR_BARTIN_TR_74 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0034\U000e007f" - FLAG_FOR_TRABZON_TR_61 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0031\U000e007f" FLAG_FOR_TOKAT_TR_60 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0030\U000e007f" - FLAG_FOR_SAN_JUAN_LAVENTILLE_TT_SJL = "\U0001f3f4\U000e0074\U000e0074\U000e0073\U000e006a\U000e006c\U000e007f" + FLAG_FOR_TOBAGO_TT_TOB = "\U0001f3f4\U000e0074\U000e0074\U000e0074\U000e006f\U000e0062\U000e007f" FLAG_FOR_DIEGO_MARTIN_TT_DMN = "\U0001f3f4\U000e0074\U000e0074\U000e0064\U000e006d\U000e006e\U000e007f" - FLAG_FOR_VAN_TR_65 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0035\U000e007f" - FLAG_FOR_ARDAHAN_TR_75 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0035\U000e007f" - FLAG_FOR_PORT_OF_SPAIN_TT_POS = "\U0001f3f4\U000e0074\U000e0074\U000e0070\U000e006f\U000e0073\U000e007f" - FLAG_FOR_CHAGUANAS_TT_CHA = "\U0001f3f4\U000e0074\U000e0074\U000e0063\U000e0068\U000e0061\U000e007f" - FLAG_FOR_SIVAS_TR_58 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0038\U000e007f" - FLAG_FOR_SIRNAK_TR_73 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0033\U000e007f" - FLAG_FOR_YALOVA_TR_77 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0037\U000e007f" FLAG_FOR_SAN_FERNANDO_TT_SFO = "\U0001f3f4\U000e0074\U000e0074\U000e0073\U000e0066\U000e006f\U000e007f" - FLAG_FOR_ARIMA_TT_ARI = "\U0001f3f4\U000e0074\U000e0074\U000e0061\U000e0072\U000e0069\U000e007f" FLAG_FOR_KILIS_TR_79 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0039\U000e007f" - FLAG_FOR_USAK_TR_64 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0034\U000e007f" - FLAG_FOR_TUNAPUNA_PIARCO_TT_TUP = "\U0001f3f4\U000e0074\U000e0074\U000e0074\U000e0075\U000e0070\U000e007f" - FLAG_FOR_ZONGULDAK_TR_67 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0037\U000e007f" - FLAG_FOR_PENAL_DEBE_TT_PED = "\U0001f3f4\U000e0074\U000e0074\U000e0070\U000e0065\U000e0064\U000e007f" - FLAG_FOR_KARABUK_TR_78 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0038\U000e007f" - FLAG_FOR_PRINCES_TOWN_TT_PRT = "\U0001f3f4\U000e0074\U000e0074\U000e0070\U000e0072\U000e0074\U000e007f" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" + FLAG_FOR_PENZA_RU_PNZ = "\U0001f3f4\U000e0072\U000e0075\U000e0070\U000e006e\U000e007a\U000e007f" + FLAG_FOR_SANLIURFA_TR_63 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0033\U000e007f" + FLAG_FOR_ERZINCAN_TR_24 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0034\U000e007f" + FLAG_FOR_TEKIRDAG_TR_59 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0039\U000e007f" FLAG_FOR_KIRIKKALE_TR_71 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0031\U000e007f" - FLAG_FOR_POINT_FORTIN_TT_PTF = "\U0001f3f4\U000e0074\U000e0074\U000e0070\U000e0074\U000e0066\U000e007f" - FLAG_FOR_TUNCELI_TR_62 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0032\U000e007f" - FLAG_FOR_KARAMAN_TR_70 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0030\U000e007f" FLAG_FOR_IGDIR_TR_76 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0036\U000e007f" + FLAG_FOR_COUVA_TABAQUITE_TALPARO_TT_CTT = "\U0001f3f4\U000e0074\U000e0074\U000e0063\U000e0074\U000e0074\U000e007f" + FLAG_FOR_KARAMAN_TR_70 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0030\U000e007f" + FLAG_FOR_ZONGULDAK_TR_67 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0037\U000e007f" + FLAG_FOR_TUNCELI_TR_62 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0032\U000e007f" + FLAG_FOR_POINT_FORTIN_TT_PTF = "\U0001f3f4\U000e0074\U000e0074\U000e0070\U000e0074\U000e0066\U000e007f" + FLAG_FOR_PENAL_DEBE_TT_PED = "\U0001f3f4\U000e0074\U000e0074\U000e0070\U000e0065\U000e0064\U000e007f" + FLAG_FOR_SAN_JUAN_LAVENTILLE_TT_SJL = "\U0001f3f4\U000e0074\U000e0074\U000e0073\U000e006a\U000e006c\U000e007f" + FLAG_FOR_PRINCES_TOWN_TT_PRT = "\U0001f3f4\U000e0074\U000e0074\U000e0070\U000e0072\U000e0074\U000e007f" + FLAG_FOR_YALOVA_TR_77 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0037\U000e007f" FLAG_FOR_BAYBURT_TR_69 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0039\U000e007f" + FLAG_FOR_BAIE_LAZARE_SC_06 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0036\U000e007f" + FLAG_FOR_CHAGUANAS_TT_CHA = "\U0001f3f4\U000e0074\U000e0074\U000e0063\U000e0068\U000e0061\U000e007f" + FLAG_FOR_BARTIN_TR_74 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0034\U000e007f" + FLAG_FOR_SIPARIA_TT_SIP = "\U0001f3f4\U000e0074\U000e0074\U000e0073\U000e0069\U000e0070\U000e007f" FLAG_FOR_SINOP_TR_57 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0037\U000e007f" - FLAG_FOR_AKSARAY_TR_68 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0038\U000e007f" - FLAG_FOR_YOZGAT_TR_66 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0036\U000e007f" - FLAG_FOR_KEELUNG_TW_KEE = "\U0001f3f4\U000e0074\U000e0077\U000e006b\U000e0065\U000e0065\U000e007f" - FLAG_FOR_TAITUNG_TW_TTT = "\U0001f3f4\U000e0074\U000e0077\U000e0074\U000e0074\U000e0074\U000e007f" - FLAG_FOR_TAINAN_TW_TNN = "\U0001f3f4\U000e0074\U000e0077\U000e0074\U000e006e\U000e006e\U000e007f" - FLAG_FOR_NANUMANGA_TV_NMG = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e006d\U000e0067\U000e007f" - FLAG_FOR_NUI_TV_NUI = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e0075\U000e0069\U000e007f" - FLAG_FOR_LIENCHIANG_TW_LIE = "\U0001f3f4\U000e0074\U000e0077\U000e006c\U000e0069\U000e0065\U000e007f" - FLAG_FOR_HUALIEN_TW_HUA = "\U0001f3f4\U000e0074\U000e0077\U000e0068\U000e0075\U000e0061\U000e007f" - FLAG_FOR_NUKUFETAU_TV_NKF = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e006b\U000e0066\U000e007f" - FLAG_FOR_TAICHUNG_TW_TXG = "\U0001f3f4\U000e0074\U000e0077\U000e0074\U000e0078\U000e0067\U000e007f" - FLAG_FOR_TAOYUAN_TW_TAO = "\U0001f3f4\U000e0074\U000e0077\U000e0074\U000e0061\U000e006f\U000e007f" - FLAG_FOR_PINGTUNG_TW_PIF = "\U0001f3f4\U000e0074\U000e0077\U000e0070\U000e0069\U000e0066\U000e007f" - FLAG_FOR_YILAN_TW_ILA = "\U0001f3f4\U000e0074\U000e0077\U000e0069\U000e006c\U000e0061\U000e007f" - FLAG_FOR_DAR_ES_SALAAM_TZ_02 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0032\U000e007f" - FLAG_FOR_DODOMA_TZ_03 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0033\U000e007f" - FLAG_FOR_NORTH_PEMBA_TZ_06 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0036\U000e007f" - FLAG_FOR_KIGOMA_TZ_08 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0038\U000e007f" - FLAG_FOR_IRINGA_TZ_04 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0034\U000e007f" - FLAG_FOR_SANNAT_MT_52 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0032\U000e007f" - FLAG_FOR_YUNLIN_TW_YUN = "\U0001f3f4\U000e0074\U000e0077\U000e0079\U000e0075\U000e006e\U000e007f" - FLAG_FOR_KINMEN_TW_KIN = "\U0001f3f4\U000e0074\U000e0077\U000e006b\U000e0069\U000e006e\U000e007f" - FLAG_FOR_NANUMEA_TV_NMA = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e006d\U000e0061\U000e007f" - FLAG_FOR_ZANZIBAR_NORTH_TZ_07 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0037\U000e007f" + FLAG_FOR_GAZIANTEP_TR_27 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0037\U000e007f" + FLAG_FOR_KARABUK_TR_78 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0038\U000e007f" + FLAG_FOR_SANTA_BARBARA_HN_SB = "\U0001f3f4\U000e0068\U000e006e\U000e0073\U000e0062\U000e007f" FLAG_FOR_CHIAYI_COUNTY_TW_CYI = "\U0001f3f4\U000e0074\U000e0077\U000e0063\U000e0079\U000e0069\U000e007f" FLAG_FOR_KAGERA_TZ_05 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0035\U000e007f" - FLAG_FOR_CHANGHUA_TW_CHA = "\U0001f3f4\U000e0074\U000e0077\U000e0063\U000e0068\U000e0061\U000e007f" - FLAG_FOR_VAITUPU_TV_VAI = "\U0001f3f4\U000e0074\U000e0076\U000e0076\U000e0061\U000e0069\U000e007f" - FLAG_FOR_KILIMANJARO_TZ_09 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0039\U000e007f" - FLAG_FOR_NEW_TAIPEI_TW_NWT = "\U0001f3f4\U000e0074\U000e0077\U000e006e\U000e0077\U000e0074\U000e007f" + FLAG_FOR_NANUMEA_TV_NMA = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e006d\U000e0061\U000e007f" + FLAG_FOR_TAINAN_TW_TNN = "\U0001f3f4\U000e0074\U000e0077\U000e0074\U000e006e\U000e006e\U000e007f" + FLAG_FOR_DODOMA_TZ_03 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0033\U000e007f" FLAG_FOR_CHIAYI_TW_CYQ = "\U0001f3f4\U000e0074\U000e0077\U000e0063\U000e0079\U000e0071\U000e007f" + FLAG_FOR_YUNLIN_TW_YUN = "\U0001f3f4\U000e0074\U000e0077\U000e0079\U000e0075\U000e006e\U000e007f" + FLAG_FOR_NEW_TAIPEI_TW_NWT = "\U0001f3f4\U000e0074\U000e0077\U000e006e\U000e0077\U000e0074\U000e007f" + FLAG_FOR_KINMEN_TW_KIN = "\U0001f3f4\U000e0074\U000e0077\U000e006b\U000e0069\U000e006e\U000e007f" + FLAG_FOR_HUALIEN_TW_HUA = "\U0001f3f4\U000e0074\U000e0077\U000e0068\U000e0075\U000e0061\U000e007f" + FLAG_FOR_TAICHUNG_TW_TXG = "\U0001f3f4\U000e0074\U000e0077\U000e0074\U000e0078\U000e0067\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_PINGTUNG_TW_PIF = "\U0001f3f4\U000e0074\U000e0077\U000e0070\U000e0069\U000e0066\U000e007f" + FLAG_FOR_IRINGA_TZ_04 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0034\U000e007f" + FLAG_FOR_KEELUNG_TW_KEE = "\U0001f3f4\U000e0074\U000e0077\U000e006b\U000e0065\U000e0065\U000e007f" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" + FLAG_FOR_AGLONA_LV_001 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0031\U000e007f" + FLAG_FOR_CANKOVA_SI_152 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0032\U000e007f" FLAG_FOR_ARUSHA_TZ_01 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0031\U000e007f" - FLAG_FOR_MIAOLI_TW_MIA = "\U0001f3f4\U000e0074\U000e0077\U000e006d\U000e0069\U000e0061\U000e007f" - FLAG_FOR_LINDI_TZ_12 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0032\U000e007f" - FLAG_FOR_SOUTH_PEMBA_TZ_10 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0030\U000e007f" - FLAG_FOR_MANYARA_TZ_26 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0036\U000e007f" - FLAG_FOR_LUHANSHCHYNA_UA_09 = "\U0001f3f4\U000e0075\U000e0061\U000e0030\U000e0039\U000e007f" - FLAG_FOR_RUKWA_TZ_20 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0030\U000e007f" - FLAG_FOR_DNIPROPETROVSHCHYNA_UA_12 = "\U0001f3f4\U000e0075\U000e0061\U000e0031\U000e0032\U000e007f" + FLAG_FOR_NUI_TV_NUI = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e0075\U000e0069\U000e007f" + FLAG_FOR_YILAN_TW_ILA = "\U0001f3f4\U000e0074\U000e0077\U000e0069\U000e006c\U000e0061\U000e007f" + FLAG_FOR_VERACRUZ_MX_VER = "\U0001f3f4\U000e006d\U000e0078\U000e0076\U000e0065\U000e0072\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_LIENCHIANG_TW_LIE = "\U0001f3f4\U000e0074\U000e0077\U000e006c\U000e0069\U000e0065\U000e007f" + FLAG_FOR_NUKUFETAU_TV_NKF = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e006b\U000e0066\U000e007f" + FLAG_FOR_VAITUPU_TV_VAI = "\U0001f3f4\U000e0074\U000e0076\U000e0076\U000e0061\U000e0069\U000e007f" FLAG_FOR_VOLYN_UA_07 = "\U0001f3f4\U000e0075\U000e0061\U000e0030\U000e0037\U000e007f" - FLAG_FOR_SHINYANGA_TZ_22 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0032\U000e007f" - FLAG_FOR_LVIVSHCHYNA_UA_46 = "\U0001f3f4\U000e0075\U000e0061\U000e0034\U000e0036\U000e007f" - FLAG_FOR_RUVUMA_TZ_21 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0031\U000e007f" - FLAG_FOR_KATAVI_TZ_28 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0038\U000e007f" - FLAG_FOR_ZAPORIZHZHYA_UA_23 = "\U0001f3f4\U000e0075\U000e0061\U000e0032\U000e0033\U000e007f" - FLAG_FOR_CRIMEA_UA_43 = "\U0001f3f4\U000e0075\U000e0061\U000e0034\U000e0033\U000e007f" - FLAG_FOR_KYIVSHCHYNA_UA_32 = "\U0001f3f4\U000e0075\U000e0061\U000e0033\U000e0032\U000e007f" - FLAG_FOR_SINGIDA_TZ_23 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0033\U000e007f" - FLAG_FOR_TABORA_TZ_24 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0034\U000e007f" - FLAG_FOR_PRYKARPATTIA_UA_26 = "\U0001f3f4\U000e0075\U000e0061\U000e0032\U000e0036\U000e007f" - FLAG_FOR_PWANI_TZ_19 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0039\U000e007f" - FLAG_FOR_KIROVOHRADSCHYNA_UA_35 = "\U0001f3f4\U000e0075\U000e0061\U000e0033\U000e0035\U000e007f" - FLAG_FOR_SIMIYU_TZ_30 = "\U0001f3f4\U000e0074\U000e007a\U000e0033\U000e0030\U000e007f" - FLAG_FOR_MYKOLAYIVSCHYNA_UA_48 = "\U0001f3f4\U000e0075\U000e0061\U000e0034\U000e0038\U000e007f" - FLAG_FOR_ZANZIBAR_URBAN_WEST_TZ_15 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0035\U000e007f" - FLAG_FOR_POLTAVSHCHYNA_UA_53 = "\U0001f3f4\U000e0075\U000e0061\U000e0035\U000e0033\U000e007f" - FLAG_FOR_MBEYA_TZ_14 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0034\U000e007f" - FLAG_FOR_MARA_TZ_13 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0033\U000e007f" - FLAG_FOR_ZAKARPATTIA_UA_21 = "\U0001f3f4\U000e0075\U000e0061\U000e0032\U000e0031\U000e007f" - FLAG_FOR_MWANZA_TZ_18 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0038\U000e007f" FLAG_FOR_MTWARA_TZ_17 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0037\U000e007f" + FLAG_FOR_TAMBOV_RU_TAM = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0061\U000e006d\U000e007f" + FLAG_FOR_KATAVI_TZ_28 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0038\U000e007f" + FLAG_FOR_SOUTH_PEMBA_TZ_10 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0030\U000e007f" + FLAG_FOR_RUKWA_TZ_20 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0030\U000e007f" + FLAG_FOR_PORT_LOUIS_DISTRICT_MU_PL = "\U0001f3f4\U000e006d\U000e0075\U000e0070\U000e006c\U000e007f" + FLAG_FOR_MANYARA_TZ_26 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0036\U000e007f" FLAG_FOR_SEVASTOPOL_UA_40 = "\U0001f3f4\U000e0075\U000e0061\U000e0034\U000e0030\U000e007f" - FLAG_FOR_VINNYCHCHYNA_UA_05 = "\U0001f3f4\U000e0075\U000e0061\U000e0030\U000e0035\U000e007f" - FLAG_FOR_ODESHCHYNA_UA_51 = "\U0001f3f4\U000e0075\U000e0061\U000e0035\U000e0031\U000e007f" - FLAG_FOR_SELENGE_MN_049 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0034\U000e0039\U000e007f" - FLAG_FOR_RIVNENSHCHYNA_UA_56 = "\U0001f3f4\U000e0075\U000e0061\U000e0035\U000e0036\U000e007f" - FLAG_FOR_MOROGORO_TZ_16 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0036\U000e007f" - FLAG_FOR_BAYQONGYR_KZ_BAY = "\U0001f3f4\U000e006b\U000e007a\U000e0062\U000e0061\U000e0079\U000e007f" FLAG_FOR_NJOMBE_TZ_29 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0039\U000e007f" - FLAG_FOR_MOHELI_KM_M = "\U0001f3f4\U000e006b\U000e006d\U000e006d\U000e007f" - FLAG_FOR_ABRUZZO_IT_65 = "\U0001f3f4\U000e0069\U000e0074\U000e0036\U000e0035\U000e007f" + FLAG_FOR_ZAPORIZHZHYA_UA_23 = "\U0001f3f4\U000e0075\U000e0061\U000e0032\U000e0033\U000e007f" + FLAG_FOR_MBEYA_TZ_14 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0034\U000e007f" + FLAG_FOR_KYIVSHCHYNA_UA_32 = "\U0001f3f4\U000e0075\U000e0061\U000e0033\U000e0032\U000e007f" + FLAG_FOR_RUVUMA_TZ_21 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0031\U000e007f" + FLAG_FOR_SHINYANGA_TZ_22 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0032\U000e007f" + FLAG_FOR_ZAKARPATTIA_UA_21 = "\U0001f3f4\U000e0075\U000e0061\U000e0032\U000e0031\U000e007f" + FLAG_FOR_NORTE_GW_N = "\U0001f3f4\U000e0067\U000e0077\U000e006e\U000e007f" + FLAG_FOR_RIVNENSHCHYNA_UA_56 = "\U0001f3f4\U000e0075\U000e0061\U000e0035\U000e0036\U000e007f" + FLAG_FOR_SAINT_GEORGE_DM_04 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0034\U000e007f" + FLAG_FOR_ODESHCHYNA_UA_51 = "\U0001f3f4\U000e0075\U000e0061\U000e0035\U000e0031\U000e007f" + FLAG_FOR_SIMIYU_TZ_30 = "\U0001f3f4\U000e0074\U000e007a\U000e0033\U000e0030\U000e007f" FLAG_FOR_GEITA_TZ_27 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0037\U000e007f" - FLAG_FOR_GEORGIA_US_GA = "\U0001f3f4\U000e0075\U000e0073\U000e0067\U000e0061\U000e007f" - FLAG_FOR_WESTERN_UG_W = "\U0001f3f4\U000e0075\U000e0067\U000e0077\U000e007f" - FLAG_FOR_HAWAII_US_HI = "\U0001f3f4\U000e0075\U000e0073\U000e0068\U000e0069\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" - FLAG_FOR_WAKE_ISLAND_UM_79 = "\U0001f3f4\U000e0075\U000e006d\U000e0037\U000e0039\U000e007f" - FLAG_FOR_BAKER_ISLAND_UM_81 = "\U0001f3f4\U000e0075\U000e006d\U000e0038\U000e0031\U000e007f" - FLAG_FOR_HOWLAND_ISLAND_UM_84 = "\U0001f3f4\U000e0075\U000e006d\U000e0038\U000e0034\U000e007f" - FLAG_FOR_GUAM_US_GU = "\U0001f3f4\U000e0075\U000e0073\U000e0067\U000e0075\U000e007f" - FLAG_FOR_SUMSHCHYNA_UA_59 = "\U0001f3f4\U000e0075\U000e0061\U000e0035\U000e0039\U000e007f" - FLAG_FOR_TERNOPILSHCHYNA_UA_61 = "\U0001f3f4\U000e0075\U000e0061\U000e0036\U000e0031\U000e007f" - FLAG_FOR_ILLINOIS_US_IL = "\U0001f3f4\U000e0075\U000e0073\U000e0069\U000e006c\U000e007f" - FLAG_FOR_ALABAMA_US_AL = "\U0001f3f4\U000e0075\U000e0073\U000e0061\U000e006c\U000e007f" - FLAG_FOR_CHERKASHCHYNA_UA_71 = "\U0001f3f4\U000e0075\U000e0061\U000e0037\U000e0031\U000e007f" - FLAG_FOR_KHERSONSHCHYNA_UA_65 = "\U0001f3f4\U000e0075\U000e0061\U000e0036\U000e0035\U000e007f" - FLAG_FOR_PALMYRA_ATOLL_UM_95 = "\U0001f3f4\U000e0075\U000e006d\U000e0039\U000e0035\U000e007f" - FLAG_FOR_EASTERN_UG_E = "\U0001f3f4\U000e0075\U000e0067\U000e0065\U000e007f" - FLAG_FOR_JOHNSTON_ATOLL_UM_67 = "\U0001f3f4\U000e0075\U000e006d\U000e0036\U000e0037\U000e007f" - FLAG_FOR_MIDWAY_ATOLL_UM_71 = "\U0001f3f4\U000e0075\U000e006d\U000e0037\U000e0031\U000e007f" - FLAG_FOR_CONNECTICUT_US_CT = "\U0001f3f4\U000e0075\U000e0073\U000e0063\U000e0074\U000e007f" - FLAG_FOR_DELAWARE_US_DE = "\U0001f3f4\U000e0075\U000e0073\U000e0064\U000e0065\U000e007f" - FLAG_FOR_KHMELNYCHCHYNA_UA_68 = "\U0001f3f4\U000e0075\U000e0061\U000e0036\U000e0038\U000e007f" - FLAG_FOR_ARIZONA_US_AZ = "\U0001f3f4\U000e0075\U000e0073\U000e0061\U000e007a\U000e007f" - FLAG_FOR_NAVASSA_ISLAND_UM_76 = "\U0001f3f4\U000e0075\U000e006d\U000e0037\U000e0036\U000e007f" - FLAG_FOR_IOWA_US_IA = "\U0001f3f4\U000e0075\U000e0073\U000e0069\U000e0061\U000e007f" - FLAG_FOR_KHARKIVSHCHYNA_UA_63 = "\U0001f3f4\U000e0075\U000e0061\U000e0036\U000e0033\U000e007f" - FLAG_FOR_CHERNIHIVSHCHYNA_UA_74 = "\U0001f3f4\U000e0075\U000e0061\U000e0037\U000e0034\U000e007f" + FLAG_FOR_POLTAVSHCHYNA_UA_53 = "\U0001f3f4\U000e0075\U000e0061\U000e0035\U000e0033\U000e007f" + FLAG_FOR_TABORA_TZ_24 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0034\U000e007f" + FLAG_FOR_SINGIDA_TZ_23 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0033\U000e007f" + FLAG_FOR_MWANZA_TZ_18 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0038\U000e007f" + FLAG_FOR_SELENGE_MN_049 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0034\U000e0039\U000e007f" + FLAG_FOR_VINNYCHCHYNA_UA_05 = "\U0001f3f4\U000e0075\U000e0061\U000e0030\U000e0035\U000e007f" FLAG_FOR_FLORIDA_US_FL = "\U0001f3f4\U000e0075\U000e0073\U000e0066\U000e006c\U000e007f" - FLAG_FOR_WASHINGTON_DC_US_DC = "\U0001f3f4\U000e0075\U000e0073\U000e0064\U000e0063\U000e007f" + FLAG_FOR_LOFA_LR_LO = "\U0001f3f4\U000e006c\U000e0072\U000e006c\U000e006f\U000e007f" + RECYCLING_SYMBOL_FOR_TYPE_7_PLASTICS = "\u2679" + FLAG_FOR_BAKER_ISLAND_UM_81 = "\U0001f3f4\U000e0075\U000e006d\U000e0038\U000e0031\U000e007f" FLAG_FOR_NORTHERN_UG_N = "\U0001f3f4\U000e0075\U000e0067\U000e006e\U000e007f" + FLAG_FOR_INGUSHETIA_RU_IN = "\U0001f3f4\U000e0072\U000e0075\U000e0069\U000e006e\U000e007f" + FLAG_FOR_KHERSONSHCHYNA_UA_65 = "\U0001f3f4\U000e0075\U000e0061\U000e0036\U000e0035\U000e007f" + FLAG_FOR_WAKE_ISLAND_UM_79 = "\U0001f3f4\U000e0075\U000e006d\U000e0037\U000e0039\U000e007f" + FLAG_FOR_PALMYRA_ATOLL_UM_95 = "\U0001f3f4\U000e0075\U000e006d\U000e0039\U000e0035\U000e007f" + FLAG_FOR_KHARKIVSHCHYNA_UA_63 = "\U0001f3f4\U000e0075\U000e0061\U000e0036\U000e0033\U000e007f" + FLAG_FOR_KHMELNYCHCHYNA_UA_68 = "\U0001f3f4\U000e0075\U000e0061\U000e0036\U000e0038\U000e007f" + FLAG_FOR_WESTERN_UG_W = "\U0001f3f4\U000e0075\U000e0067\U000e0077\U000e007f" + FLAG_FOR_EASTERN_UG_E = "\U0001f3f4\U000e0075\U000e0067\U000e0065\U000e007f" + FLAG_FOR_IDLIB_SY_ID = "\U0001f3f4\U000e0073\U000e0079\U000e0069\U000e0064\U000e007f" + FLAG_FOR_TERNOPILSHCHYNA_UA_61 = "\U0001f3f4\U000e0075\U000e0061\U000e0036\U000e0031\U000e007f" FLAG_FOR_CHERNIVTSI_OBLAST_UA_77 = "\U0001f3f4\U000e0075\U000e0061\U000e0037\U000e0037\U000e007f" - FLAG_FOR_INDIANA_US_IN = "\U0001f3f4\U000e0075\U000e0073\U000e0069\U000e006e\U000e007f" - FLAG_FOR_IDAHO_US_ID = "\U0001f3f4\U000e0075\U000e0073\U000e0069\U000e0064\U000e007f" - FLAG_FOR_JARVIS_ISLAND_UM_86 = "\U0001f3f4\U000e0075\U000e006d\U000e0038\U000e0036\U000e007f" - FAMILY_MAN_WOMAN_BOY_GIRL = "\U0001f468\u200d\U0001f469\u200d\U0001f466\u200d\U0001f467" - FLAG_FOR_UTAH_US_UT = "\U0001f3f4\U000e0075\U000e0073\U000e0075\U000e0074\U000e007f" - FLAG_FOR_PENNSYLVANIA_US_PA = "\U0001f3f4\U000e0075\U000e0073\U000e0070\U000e0061\U000e007f" - FLAG_FOR_KINGMAN_REEF_UM_89 = "\U0001f3f4\U000e0075\U000e006d\U000e0038\U000e0039\U000e007f" - FLAG_FOR_OKLAHOMA_US_OK = "\U0001f3f4\U000e0075\U000e0073\U000e006f\U000e006b\U000e007f" - FLAG_FOR_MARYLAND_US_MD = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0064\U000e007f" - FLAG_FOR_WASHINGTON_US_WA = "\U0001f3f4\U000e0075\U000e0073\U000e0077\U000e0061\U000e007f" - FLAG_FOR_VIRGINIA_US_VA = "\U0001f3f4\U000e0075\U000e0073\U000e0076\U000e0061\U000e007f" - FLAG_FOR_OREGON_US_OR = "\U0001f3f4\U000e0075\U000e0073\U000e006f\U000e0072\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" - FLAG_FOR_U_S_VIRGIN_ISLANDS_US_VI = "\U0001f3f4\U000e0075\U000e0073\U000e0076\U000e0069\U000e007f" - FLAG_FOR_MAINE_US_ME = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0065\U000e007f" + FLAG_FOR_PARA_SR_PR = "\U0001f3f4\U000e0073\U000e0072\U000e0070\U000e0072\U000e007f" + FLAG_FOR_SUMSHCHYNA_UA_59 = "\U0001f3f4\U000e0075\U000e0061\U000e0035\U000e0039\U000e007f" + FAMILY_WOMAN_WOMAN_BABY_BOY = "\U0001f469\u200d\U0001f469\u200d\U0001f476\u200d\U0001f466" + FLAG_FOR_JERICHO_PS_JRH = "\U0001f3f4\U000e0070\U000e0073\U000e006a\U000e0072\U000e0068\U000e007f" + FLAG_FOR_MIDWAY_ATOLL_UM_71 = "\U0001f3f4\U000e0075\U000e006d\U000e0037\U000e0031\U000e007f" + FLAG_FOR_JOHNSTON_ATOLL_UM_67 = "\U0001f3f4\U000e0075\U000e006d\U000e0036\U000e0037\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" FLAG_FOR_CANELONES_UY_CA = "\U0001f3f4\U000e0075\U000e0079\U000e0063\U000e0061\U000e007f" - FLAG_FOR_SOUTH_CAROLINA_US_SC = "\U0001f3f4\U000e0075\U000e0073\U000e0073\U000e0063\U000e007f" - FLAG_FOR_MICHIGAN_US_MI = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0069\U000e007f" - FLAG_FOR_ARTIGAS_UY_AR = "\U0001f3f4\U000e0075\U000e0079\U000e0061\U000e0072\U000e007f" - FLAG_FOR_CENTRAL_MACEDONIA_GR_B = "\U0001f3f4\U000e0067\U000e0072\U000e0062\U000e007f" - FLAG_FOR_WYOMING_US_WY = "\U0001f3f4\U000e0075\U000e0073\U000e0077\U000e0079\U000e007f" + FLAG_FOR_KOSTROMA_RU_KOS = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e006f\U000e0073\U000e007f" + FLAG_FOR_JARVIS_ISLAND_UM_86 = "\U0001f3f4\U000e0075\U000e006d\U000e0038\U000e0036\U000e007f" + FLAG_FOR_PENNSYLVANIA_US_PA = "\U0001f3f4\U000e0075\U000e0073\U000e0070\U000e0061\U000e007f" FLAG_FOR_PUEBLA_MX_PUE = "\U0001f3f4\U000e006d\U000e0078\U000e0070\U000e0075\U000e0065\U000e007f" - FLAG_FOR_NEW_JERSEY_US_NJ = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e006a\U000e007f" - FLAG_FOR_NEW_HAMPSHIRE_US_NH = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0068\U000e007f" - FLAG_FOR_SAMARQAND_UZ_SA = "\U0001f3f4\U000e0075\U000e007a\U000e0073\U000e0061\U000e007f" - FLAG_FOR_MALDONADO_UY_MA = "\U0001f3f4\U000e0075\U000e0079\U000e006d\U000e0061\U000e007f" - FLAG_FOR_NAMANGAN_UZ_NG = "\U0001f3f4\U000e0075\U000e007a\U000e006e\U000e0067\U000e007f" - FLAG_FOR_KARAKALPAKSTAN_UZ_QR = "\U0001f3f4\U000e0075\U000e007a\U000e0071\U000e0072\U000e007f" - FLAG_FOR_FLORES_UY_FS = "\U0001f3f4\U000e0075\U000e0079\U000e0066\U000e0073\U000e007f" - FLAG_FOR_ANZOATEGUI_VE_B = "\U0001f3f4\U000e0076\U000e0065\U000e0062\U000e007f" - FLAG_FOR_SAINT_PATRICK_VC_05 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0035\U000e007f" - FLAG_FOR_SORIANO_UY_SO = "\U0001f3f4\U000e0075\U000e0079\U000e0073\U000e006f\U000e007f" - FLAG_FOR_FERGANA_UZ_FA = "\U0001f3f4\U000e0075\U000e007a\U000e0066\U000e0061\U000e007f" - FLAG_FOR_DURAZNO_UY_DU = "\U0001f3f4\U000e0075\U000e0079\U000e0064\U000e0075\U000e007f" - FLAG_FOR_ROCHA_UY_RO = "\U0001f3f4\U000e0075\U000e0079\U000e0072\U000e006f\U000e007f" - FLAG_FOR_SAINT_ANDREW_VC_02 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0032\U000e007f" - FLAG_FOR_ARAGUA_VE_D = "\U0001f3f4\U000e0076\U000e0065\U000e0064\U000e007f" + FLAG_FOR_SVETA_TROJICA_V_SLOVENSKIH_GORICAH_SI_204 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0034\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_CHERKASHCHYNA_UA_71 = "\U0001f3f4\U000e0075\U000e0061\U000e0037\U000e0031\U000e007f" + FLAG_FOR_ALEXANDRIA_EG_ALX = "\U0001f3f4\U000e0065\U000e0067\U000e0061\U000e006c\U000e0078\U000e007f" + FLAG_FOR_CENTRAL_MACEDONIA_GR_B = "\U0001f3f4\U000e0067\U000e0072\U000e0062\U000e007f" + FLAG_FOR_ARTIGAS_UY_AR = "\U0001f3f4\U000e0075\U000e0079\U000e0061\U000e0072\U000e007f" + FLAG_FOR_OSLO_NO_03 = "\U0001f3f4\U000e006e\U000e006f\U000e0030\U000e0033\U000e007f" + FLAG_FOR_LOGONE_ORIENTAL_TD_LR = "\U0001f3f4\U000e0074\U000e0064\U000e006c\U000e0072\U000e007f" + FLAG_FOR_SINT_EUSTATIUS_NL_BQ3 = "\U0001f3f4\U000e006e\U000e006c\U000e0062\U000e0071\U000e0033\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_KINGMAN_REEF_UM_89 = "\U0001f3f4\U000e0075\U000e006d\U000e0038\U000e0039\U000e007f" + FLAG_FOR_DNIPROPETROVSHCHYNA_UA_12 = "\U0001f3f4\U000e0075\U000e0061\U000e0031\U000e0032\U000e007f" + FLAG_FOR_VRANCEA_RO_VN = "\U0001f3f4\U000e0072\U000e006f\U000e0076\U000e006e\U000e007f" + FLAG_FOR_NORTH_PEMBA_TZ_06 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0036\U000e007f" FLAG_FOR_MONTEVIDEO_UY_MO = "\U0001f3f4\U000e0075\U000e0079\U000e006d\U000e006f\U000e007f" - FLAG_FOR_TACUAREMBO_UY_TA = "\U0001f3f4\U000e0075\U000e0079\U000e0074\U000e0061\U000e007f" - FLAG_FOR_GRENADINES_VC_06 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0036\U000e007f" - FLAG_FOR_TELENESTI_MD_TE = "\U0001f3f4\U000e006d\U000e0064\U000e0074\U000e0065\U000e007f" + FLAG_FOR_COLONIA_UY_CO = "\U0001f3f4\U000e0075\U000e0079\U000e0063\U000e006f\U000e007f" + FLAG_FOR_JIZZAKH_UZ_JI = "\U0001f3f4\U000e0075\U000e007a\U000e006a\U000e0069\U000e007f" + FLAG_FOR_OKLAHOMA_US_OK = "\U0001f3f4\U000e0075\U000e0073\U000e006f\U000e006b\U000e007f" + FLAG_FOR_TREINTA_Y_TRES_UY_TT = "\U0001f3f4\U000e0075\U000e0079\U000e0074\U000e0074\U000e007f" + FLAG_FOR_SOUTH_CAROLINA_US_SC = "\U0001f3f4\U000e0075\U000e0073\U000e0073\U000e0063\U000e007f" + FLAG_FOR_PAYSANDU_UY_PA = "\U0001f3f4\U000e0075\U000e0079\U000e0070\U000e0061\U000e007f" + FLAG_FOR_TASHKENT_PROVINCE_UZ_TO = "\U0001f3f4\U000e0075\U000e007a\U000e0074\U000e006f\U000e007f" + FLAG_FOR_NAMANGAN_UZ_NG = "\U0001f3f4\U000e0075\U000e007a\U000e006e\U000e0067\U000e007f" + FLAG_FOR_DURAZNO_UY_DU = "\U0001f3f4\U000e0075\U000e0079\U000e0064\U000e0075\U000e007f" + FLAG_FOR_ARAGUA_VE_D = "\U0001f3f4\U000e0076\U000e0065\U000e0064\U000e007f" + FLAG_FOR_KARAKALPAKSTAN_UZ_QR = "\U0001f3f4\U000e0075\U000e007a\U000e0071\U000e0072\U000e007f" + FLAG_FOR_CERRO_LARGO_UY_CL = "\U0001f3f4\U000e0075\U000e0079\U000e0063\U000e006c\U000e007f" + FLAG_FOR_KELANTAN_MY_03 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0033\U000e007f" + FLAG_FOR_FLORES_UY_FS = "\U0001f3f4\U000e0075\U000e0079\U000e0066\U000e0073\U000e007f" + FLAG_FOR_FERGANA_UZ_FA = "\U0001f3f4\U000e0075\U000e007a\U000e0066\U000e0061\U000e007f" + FLAG_FOR_MARYLAND_US_MD = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0064\U000e007f" + FLAG_FOR_ANZOATEGUI_VE_B = "\U0001f3f4\U000e0076\U000e0065\U000e0062\U000e007f" + FLAG_FOR_SAINT_ANDREW_VC_02 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0032\U000e007f" + FLAG_FOR_BUKHARA_UZ_BU = "\U0001f3f4\U000e0075\U000e007a\U000e0062\U000e0075\U000e007f" FLAG_FOR_MELEKEOK_PW_212 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0031\U000e0032\U000e007f" + FLAG_FOR_TELENESTI_MD_TE = "\U0001f3f4\U000e006d\U000e0064\U000e0074\U000e0065\U000e007f" FLAG_FOR_CHARLOTTE_VC_01 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0031\U000e007f" FLAG_FOR_ANDIJAN_UZ_AN = "\U0001f3f4\U000e0075\U000e007a\U000e0061\U000e006e\U000e007f" - FLAG_FOR_JIZZAKH_UZ_JI = "\U0001f3f4\U000e0075\U000e007a\U000e006a\U000e0069\U000e007f" FLAG_FOR_SALTO_UY_SA = "\U0001f3f4\U000e0075\U000e0079\U000e0073\U000e0061\U000e007f" - FLAG_FOR_FLORIDA_UY_FD = "\U0001f3f4\U000e0075\U000e0079\U000e0066\U000e0064\U000e007f" - FLAG_FOR_LAVALLEJA_UY_LA = "\U0001f3f4\U000e0075\U000e0079\U000e006c\U000e0061\U000e007f" - FLAG_FOR_WISCONSIN_US_WI = "\U0001f3f4\U000e0075\U000e0073\U000e0077\U000e0069\U000e007f" - FLAG_FOR_TREINTA_Y_TRES_UY_TT = "\U0001f3f4\U000e0075\U000e0079\U000e0074\U000e0074\U000e007f" - FLAG_FOR_SURXONDARYO_UZ_SU = "\U0001f3f4\U000e0075\U000e007a\U000e0073\U000e0075\U000e007f" - FLAG_FOR_COLONIA_UY_CO = "\U0001f3f4\U000e0075\U000e0079\U000e0063\U000e006f\U000e007f" - FLAG_FOR_RIO_NEGRO_UY_RN = "\U0001f3f4\U000e0075\U000e0079\U000e0072\U000e006e\U000e007f" - FLAG_FOR_QASHQADARYO_UZ_QA = "\U0001f3f4\U000e0075\U000e007a\U000e0071\U000e0061\U000e007f" + FLAG_FOR_SORIANO_UY_SO = "\U0001f3f4\U000e0075\U000e0079\U000e0073\U000e006f\U000e007f" FLAG_FOR_SIRDARYO_UZ_SI = "\U0001f3f4\U000e0075\U000e007a\U000e0073\U000e0069\U000e007f" - FLAG_FOR_SAINT_DAVID_VC_03 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0033\U000e007f" - FLAG_FOR_TASHKENT_PROVINCE_UZ_TO = "\U0001f3f4\U000e0075\U000e007a\U000e0074\U000e006f\U000e007f" - FLAG_FOR_CAPITAL_VE_A = "\U0001f3f4\U000e0076\U000e0065\U000e0061\U000e007f" - FLAG_FOR_PAYSANDU_UY_PA = "\U0001f3f4\U000e0075\U000e0079\U000e0070\U000e0061\U000e007f" FLAG_FOR_TASHKENT_UZ_TK = "\U0001f3f4\U000e0075\U000e007a\U000e0074\U000e006b\U000e007f" - FLAG_FOR_BUKHARA_UZ_BU = "\U0001f3f4\U000e0075\U000e007a\U000e0062\U000e0075\U000e007f" + FLAG_FOR_CAPITAL_VE_A = "\U0001f3f4\U000e0076\U000e0065\U000e0061\U000e007f" + FLAG_FOR_SAINT_DAVID_VC_03 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0033\U000e007f" + FLAG_FOR_MALDONADO_UY_MA = "\U0001f3f4\U000e0075\U000e0079\U000e006d\U000e0061\U000e007f" + FLAG_FOR_RIO_NEGRO_UY_RN = "\U0001f3f4\U000e0075\U000e0079\U000e0072\U000e006e\U000e007f" + FLAG_FOR_LAVALLEJA_UY_LA = "\U0001f3f4\U000e0075\U000e0079\U000e006c\U000e0061\U000e007f" FLAG_FOR_NAVOIY_UZ_NW = "\U0001f3f4\U000e0075\U000e007a\U000e006e\U000e0077\U000e007f" - FLAG_FOR_CERRO_LARGO_UY_CL = "\U0001f3f4\U000e0075\U000e0079\U000e0063\U000e006c\U000e007f" - FLAG_FOR_THAI_BINH_VN_20 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0030\U000e007f" - FLAG_FOR_PORTUGUESA_VE_P = "\U0001f3f4\U000e0076\U000e0065\U000e0070\U000e007f" + FLAG_FOR_SAMARQAND_UZ_SA = "\U0001f3f4\U000e0075\U000e007a\U000e0073\U000e0061\U000e007f" + FLAG_FOR_SURXONDARYO_UZ_SU = "\U0001f3f4\U000e0075\U000e007a\U000e0073\U000e0075\U000e007f" + FLAG_FOR_QASHQADARYO_UZ_QA = "\U0001f3f4\U000e0075\U000e007a\U000e0071\U000e0061\U000e007f" + FLAG_FOR_TACUAREMBO_UY_TA = "\U0001f3f4\U000e0075\U000e0079\U000e0074\U000e0061\U000e007f" + FLAG_FOR_SON_LA_VN_05 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0035\U000e007f" + FLAG_FOR_LANG_SON_VN_09 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0039\U000e007f" + FLAG_FOR_HA_GIANG_VN_03 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0033\U000e007f" + FLAG_FOR_MIRANDA_VE_M = "\U0001f3f4\U000e0076\U000e0065\U000e006d\U000e007f" + FLAG_FOR_TUYEN_QUANG_VN_07 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0037\U000e007f" FLAG_FOR_THANH_HOA_VN_21 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0031\U000e007f" FLAG_FOR_NGHE_AN_VN_22 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0032\U000e007f" - FLAG_FOR_NUEVA_ESPARTA_VE_O = "\U0001f3f4\U000e0076\U000e0065\U000e006f\U000e007f" - FLAG_FOR_KON_TUM_VN_28 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0038\U000e007f" - FLAG_FOR_TACHIRA_VE_S = "\U0001f3f4\U000e0076\U000e0065\U000e0073\U000e007f" - FLAG_FOR_HOA_BINH_VN_14 = "\U0001f3f4\U000e0076\U000e006e\U000e0031\U000e0034\U000e007f" - FLAG_FOR_BOLIVAR_VE_F = "\U0001f3f4\U000e0076\U000e0065\U000e0066\U000e007f" - FLAG_FOR_MIRANDA_VE_M = "\U0001f3f4\U000e0076\U000e0065\U000e006d\U000e007f" - FLAG_FOR_THUA_THIEN_HUE_VN_26 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0036\U000e007f" - FLAG_FOR_BARINAS_VE_E = "\U0001f3f4\U000e0076\U000e0065\U000e0065\U000e007f" - FLAG_FOR_QUANG_NGAI_VN_29 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0039\U000e007f" - FLAG_FOR_NINH_BINH_VN_18 = "\U0001f3f4\U000e0076\U000e006e\U000e0031\U000e0038\U000e007f" - FLAG_FOR_LANG_SON_VN_09 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0039\U000e007f" - FLAG_FOR_LAO_CAI_VN_02 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0032\U000e007f" - FLAG_FOR_FEDERAL_DEPENDENCIES_VE_W = "\U0001f3f4\U000e0076\U000e0065\U000e0077\U000e007f" - FLAG_FOR_QUANG_NAM_VN_27 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0037\U000e007f" - FLAG_FOR_LARA_VE_K = "\U0001f3f4\U000e0076\U000e0065\U000e006b\U000e007f" - FLAG_FOR_TLEMCEN_DZ_13 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0033\U000e007f" - FLAG_FOR_TUYEN_QUANG_VN_07 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0037\U000e007f" - FLAG_FOR_AMAZONAS_VE_Z = "\U0001f3f4\U000e0076\U000e0065\U000e007a\U000e007f" - FLAG_FOR_SON_LA_VN_05 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0035\U000e007f" - FLAG_FOR_LAI_CHAU_VN_01 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0031\U000e007f" FLAG_FOR_COJEDES_VE_H = "\U0001f3f4\U000e0076\U000e0065\U000e0068\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff" FLAG_FOR_CAO_BANG_VN_04 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0034\U000e007f" + FLAG_FOR_QUANG_NGAI_VN_29 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0039\U000e007f" + FLAG_FOR_SANTANDER_CO_SAN = "\U0001f3f4\U000e0063\U000e006f\U000e0073\U000e0061\U000e006e\U000e007f" + FLAG_FOR_NINH_BINH_VN_18 = "\U0001f3f4\U000e0076\U000e006e\U000e0031\U000e0038\U000e007f" FLAG_FOR_YEN_BAI_VN_06 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0036\U000e007f" + FLAG_FOR_THAI_BINH_VN_20 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0030\U000e007f" + FLAG_FOR_BARINAS_VE_E = "\U0001f3f4\U000e0076\U000e0065\U000e0065\U000e007f" FLAG_FOR_HA_TINH_VN_23 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0033\U000e007f" - FLAG_FOR_YARACUY_VE_U = "\U0001f3f4\U000e0076\U000e0065\U000e0075\U000e007f" + FLAG_FOR_LOWER_RIVER_DIVISION_GM_L = "\U0001f3f4\U000e0067\U000e006d\U000e006c\U000e007f" + FLAG_FOR_IG_SI_037 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0033\U000e0037\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_LARA_VE_K = "\U0001f3f4\U000e0076\U000e0065\U000e006b\U000e007f" FLAG_FOR_QUANG_NINH_VN_13 = "\U0001f3f4\U000e0076\U000e006e\U000e0031\U000e0033\U000e007f" - FLAG_FOR_HA_GIANG_VN_03 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0033\U000e007f" - FLAG_FOR_LAM_ONG_VN_35 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0035\U000e007f" - FLAG_FOR_NINH_THUAN_VN_36 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0036\U000e007f" - FLAG_FOR_NAM_INH_VN_67 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0037\U000e007f" - FLAG_FOR_BA_RIA_VUNG_TAU_VN_43 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0033\U000e007f" - FLAG_FOR_HAI_DUONG_VN_61 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0031\U000e007f" - FLAG_FOR_AK_LAK_VN_33 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0033\U000e007f" - FLAG_FOR_SOC_TRANG_VN_52 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0032\U000e007f" - FLAG_FOR_HAU_GIANG_VN_73 = "\U0001f3f4\U000e0076\U000e006e\U000e0037\U000e0033\U000e007f" - FLAG_FOR_VINH_PHUC_VN_70 = "\U0001f3f4\U000e0076\U000e006e\U000e0037\U000e0030\U000e007f" - FLAG_FOR_BAC_NINH_VN_56 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0036\U000e007f" - FLAG_FOR_BAC_GIANG_VN_54 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0034\U000e007f" - FLAG_FOR_CAN_THO_VN_CT = "\U0001f3f4\U000e0076\U000e006e\U000e0063\U000e0074\U000e007f" - FLAG_FOR_VINH_LONG_VN_49 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0039\U000e007f" - FLAG_FOR_TIEN_GIANG_VN_46 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0036\U000e007f" - FLAG_FOR_ONG_NAI_VN_39 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0039\U000e007f" - FLAG_FOR_IEN_BIEN_VN_71 = "\U0001f3f4\U000e0076\U000e006e\U000e0037\U000e0031\U000e007f" + FLAG_FOR_AU_CAP_SC_04 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0034\U000e007f" + FLAG_FOR_HOA_BINH_VN_14 = "\U0001f3f4\U000e0076\U000e006e\U000e0031\U000e0034\U000e007f" + FLAG_FOR_KON_TUM_VN_28 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0038\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_ZANZIBAR_URBAN_WEST_TZ_15 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0035\U000e007f" + FLAG_FOR_OECUSSE_TL_OE = "\U0001f3f4\U000e0074\U000e006c\U000e006f\U000e0065\U000e007f" + FLAG_FOR_YARACUY_VE_U = "\U0001f3f4\U000e0076\U000e0065\U000e0075\U000e007f" FLAG_FOR_BINH_PHUOC_VN_58 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0038\U000e007f" + FLAG_FOR_NINH_THUAN_VN_36 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0036\U000e007f" + FLAG_FOR_OSHIKOTO_NA_OT = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e0074\U000e007f" FLAG_FOR_CARGADOS_CARAJOS_MU_CC = "\U0001f3f4\U000e006d\U000e0075\U000e0063\U000e0063\U000e007f" - FLAG_FOR_BEN_TRE_VN_50 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0030\U000e007f" - FLAG_FOR_BAC_LIEU_VN_55 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0035\U000e007f" - FLAG_FOR_LONG_AN_VN_41 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0031\U000e007f" FLAG_FOR_PHU_YEN_VN_32 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0032\U000e007f" - FLAG_FOR_AN_GIANG_VN_44 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0034\U000e007f" - FLAG_FOR_HA_NAM_VN_63 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0033\U000e007f" - FLAG_FOR_CA_MAU_VN_59 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0039\U000e007f" - FLAG_FOR_KIEN_GIANG_VN_47 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0037\U000e007f" - FLAG_FOR_KHANH_HOA_VN_34 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0034\U000e007f" - FLAG_FOR_ONG_THAP_VN_45 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0035\U000e007f" - FLAG_FOR_DA_NANG_VN_DN = "\U0001f3f4\U000e0076\U000e006e\U000e0064\U000e006e\U000e007f" - FLAG_FOR_PHU_THO_VN_68 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0038\U000e007f" - FLAG_FOR_TAY_NINH_VN_37 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0037\U000e007f" - FLAG_FOR_GIA_LAI_VN_30 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0030\U000e007f" - FLAG_FOR_AK_NONG_VN_72 = "\U0001f3f4\U000e0076\U000e006e\U000e0037\U000e0032\U000e007f" + FLAG_FOR_NAM_INH_VN_67 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0037\U000e007f" + FLAG_FOR_BAC_GIANG_VN_54 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0034\U000e007f" + FLAG_FOR_TIEN_GIANG_VN_46 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0036\U000e007f" + FLAG_FOR_NORTHERN_MW_N = "\U0001f3f4\U000e006d\U000e0077\U000e006e\U000e007f" + FLAG_FOR_CAN_THO_VN_CT = "\U0001f3f4\U000e0076\U000e006e\U000e0063\U000e0074\U000e007f" FLAG_FOR_BINH_THUAN_VN_40 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0030\U000e007f" - FLAG_FOR_THAI_NGUYEN_VN_69 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0039\U000e007f" + FLAG_FOR_AK_LAK_VN_33 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0033\U000e007f" + FLAG_FOR_LAM_ONG_VN_35 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0035\U000e007f" + FLAG_FOR_BEN_TRE_VN_50 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0030\U000e007f" + FLAG_FOR_TAY_NINH_VN_37 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0037\U000e007f" FLAG_FOR_BINH_INH_VN_31 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0031\U000e007f" + FLAG_FOR_BAC_LIEU_VN_55 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0035\U000e007f" + FLAG_FOR_ONG_THAP_VN_45 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0035\U000e007f" + FLAG_FOR_KIEN_GIANG_VN_47 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0037\U000e007f" + FLAG_FOR_ONG_NAI_VN_39 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0039\U000e007f" + FLAG_FOR_BA_RIA_VUNG_TAU_VN_43 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0033\U000e007f" + FLAG_FOR_UTAH_US_UT = "\U0001f3f4\U000e0075\U000e0073\U000e0075\U000e0074\U000e007f" + FLAG_FOR_VINH_PHUC_VN_70 = "\U0001f3f4\U000e0076\U000e006e\U000e0037\U000e0030\U000e007f" + FLAG_FOR_IEN_BIEN_VN_71 = "\U0001f3f4\U000e0076\U000e006e\U000e0037\U000e0031\U000e007f" FLAG_FOR_BAC_KAN_VN_53 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0033\U000e007f" - FLAG_FOR_BINH_DUONG_VN_57 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0037\U000e007f" - FLAG_FOR_AL_MAHRAH_YE_MR = "\U0001f3f4\U000e0079\U000e0065\U000e006d\U000e0072\U000e007f" + FLAG_FOR_DA_NANG_VN_DN = "\U0001f3f4\U000e0076\U000e006e\U000e0064\U000e006e\U000e007f" + FLAG_FOR_HA_NAM_VN_63 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0033\U000e007f" + FLAG_FOR_AK_NONG_VN_72 = "\U0001f3f4\U000e0076\U000e006e\U000e0037\U000e0032\U000e007f" + FLAG_FOR_SOC_TRANG_VN_52 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0032\U000e007f" + FLAG_FOR_GIA_LAI_VN_30 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0030\U000e007f" + FLAG_FOR_CA_MAU_VN_59 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0039\U000e007f" + FLAG_FOR_BOLIVAR_VE_F = "\U0001f3f4\U000e0076\U000e0065\U000e0066\U000e007f" + FLAG_FOR_KHANH_HOA_VN_34 = "\U0001f3f4\U000e0076\U000e006e\U000e0033\U000e0034\U000e007f" + FLAG_FOR_LONG_AN_VN_41 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0031\U000e007f" FLAG_FOR_SHEFA_VU_SEE = "\U0001f3f4\U000e0076\U000e0075\U000e0073\U000e0065\U000e0065\U000e007f" - FLAG_FOR_LAHIJ_YE_LA = "\U0001f3f4\U000e0079\U000e0065\U000e006c\U000e0061\U000e007f" - FLAG_FOR_TORBA_VU_TOB = "\U0001f3f4\U000e0076\U000e0075\U000e0074\U000e006f\U000e0062\U000e007f" - FLAG_FOR_ATUA_WS_AT = "\U0001f3f4\U000e0077\U000e0073\U000e0061\U000e0074\U000e007f" - FLAG_FOR_DHALE_YE_DA = "\U0001f3f4\U000e0079\U000e0065\U000e0064\U000e0061\U000e007f" - FLAG_FOR_VA_A_O_FONOTI_WS_VF = "\U0001f3f4\U000e0077\U000e0073\U000e0076\U000e0066\U000e007f" FLAG_FOR_AMRAN_YE_AM = "\U0001f3f4\U000e0079\U000e0065\U000e0061\U000e006d\U000e007f" - FLAG_FOR_HADRAMAUT_YE_HD = "\U0001f3f4\U000e0079\U000e0065\U000e0068\U000e0064\U000e007f" - FLAG_FOR_DHAMAR_YE_DH = "\U0001f3f4\U000e0079\U000e0065\U000e0064\U000e0068\U000e007f" - FLAG_FOR_SATUPA_ITEA_WS_SA = "\U0001f3f4\U000e0077\U000e0073\U000e0073\U000e0061\U000e007f" - FLAG_FOR_IBB_YE_IB = "\U0001f3f4\U000e0079\U000e0065\U000e0069\U000e0062\U000e007f" - FLAG_FOR_UVEA_WF_UV = "\U0001f3f4\U000e0077\U000e0066\U000e0075\U000e0076\U000e007f" - FLAG_FOR_GAGA_IFOMAUGA_WS_GI = "\U0001f3f4\U000e0077\U000e0073\U000e0067\U000e0069\U000e007f" - FLAG_FOR_MA_RIB_YE_MA = "\U0001f3f4\U000e0079\U000e0065\U000e006d\U000e0061\U000e007f" - FLAG_FOR_ADAN_YE_AD = "\U0001f3f4\U000e0079\U000e0065\U000e0061\U000e0064\U000e007f" - FLAG_FOR_AL_JAWF_YE_JA = "\U0001f3f4\U000e0079\U000e0065\U000e006a\U000e0061\U000e007f" - FLAG_FOR_SANMA_VU_SAM = "\U0001f3f4\U000e0076\U000e0075\U000e0073\U000e0061\U000e006d\U000e007f" - FLAG_FOR_HAJJAH_YE_HJ = "\U0001f3f4\U000e0079\U000e0065\U000e0068\U000e006a\U000e007f" FLAG_FOR_RAYMAH_YE_RA = "\U0001f3f4\U000e0079\U000e0065\U000e0072\U000e0061\U000e007f" - FLAG_FOR_TAFEA_VU_TAE = "\U0001f3f4\U000e0076\U000e0075\U000e0074\U000e0061\U000e0065\U000e007f" - FLAG_FOR_PENAMA_VU_PAM = "\U0001f3f4\U000e0076\U000e0075\U000e0070\U000e0061\U000e006d\U000e007f" + FLAG_FOR_MAE_HONG_SON_TH_58 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0038\U000e007f" + FLAG_FOR_AL_MAHRAH_YE_MR = "\U0001f3f4\U000e0079\U000e0065\U000e006d\U000e0072\U000e007f" FLAG_FOR_AL_MAHWIT_YE_MW = "\U0001f3f4\U000e0079\U000e0065\U000e006d\U000e0077\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_SATUPA_ITEA_WS_SA = "\U0001f3f4\U000e0077\U000e0073\U000e0073\U000e0061\U000e007f" FLAG_FOR_GAGA_EMAUGA_WS_GE = "\U0001f3f4\U000e0077\U000e0073\U000e0067\U000e0065\U000e007f" - FLAG_FOR_SHABWAH_YE_SH = "\U0001f3f4\U000e0079\U000e0065\U000e0073\U000e0068\U000e007f" - FLAG_FOR_AL_BAYDA_YE_BA = "\U0001f3f4\U000e0079\U000e0065\U000e0062\U000e0061\U000e007f" - FLAG_FOR_ABYAN_YE_AB = "\U0001f3f4\U000e0079\U000e0065\U000e0061\U000e0062\U000e007f" - FLAG_FOR_SIGAVE_WF_SG = "\U0001f3f4\U000e0077\U000e0066\U000e0073\U000e0067\U000e007f" - FLAG_FOR_A_ANA_WS_AA = "\U0001f3f4\U000e0077\U000e0073\U000e0061\U000e0061\U000e007f" FLAG_FOR_HAIPHONG_VN_HP = "\U0001f3f4\U000e0076\U000e006e\U000e0068\U000e0070\U000e007f" - FLAG_FOR_PALAULI_WS_PA = "\U0001f3f4\U000e0077\U000e0073\U000e0070\U000e0061\U000e007f" - FLAG_FOR_ALO_WF_AL = "\U0001f3f4\U000e0077\U000e0066\U000e0061\U000e006c\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_DHALE_YE_DA = "\U0001f3f4\U000e0079\U000e0065\U000e0064\U000e0061\U000e007f" + FLAG_FOR_DHAMAR_YE_DH = "\U0001f3f4\U000e0079\U000e0065\U000e0064\U000e0068\U000e007f" FLAG_FOR_TUAMASAGA_WS_TU = "\U0001f3f4\U000e0077\U000e0073\U000e0074\U000e0075\U000e007f" - FLAG_FOR_AL_HUDAYDAH_YE_HU = "\U0001f3f4\U000e0079\U000e0065\U000e0068\U000e0075\U000e007f" - FLAG_FOR_MASVINGO_ZW_MV = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0076\U000e007f" - FLAG_FOR_NORTH_WESTERN_ZM_06 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0036\U000e007f" - FLAG_FOR_FREE_ZA_FS = "\U0001f3f4\U000e007a\U000e0061\U000e0066\U000e0073\U000e007f" - FLAG_FOR_MUCHINGA_ZM_10 = "\U0001f3f4\U000e007a\U000e006d\U000e0031\U000e0030\U000e007f" - FLAG_FOR_LIMPOPO_ZA_LP = "\U0001f3f4\U000e007a\U000e0061\U000e006c\U000e0070\U000e007f" - FLAG_FOR_MASHONALAND_WEST_ZW_MW = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0077\U000e007f" - FLAG_FOR_WESTERN_CAPE_ZA_WC = "\U0001f3f4\U000e007a\U000e0061\U000e0077\U000e0063\U000e007f" - FLAG_FOR_NORTHERN_ZM_05 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0035\U000e007f" - FLAG_FOR_MIDLANDS_ZW_MI = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0069\U000e007f" - FLAG_FOR_EASTERN_ZM_03 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0033\U000e007f" - FLAG_FOR_HARARE_ZW_HA = "\U0001f3f4\U000e007a\U000e0077\U000e0068\U000e0061\U000e007f" - FLAG_FOR_MASHONALAND_EAST_ZW_ME = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0065\U000e007f" - FLAG_FOR_SOUTHERN_ZM_07 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0037\U000e007f" - FLAG_FOR_LUSAKA_ZM_09 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0039\U000e007f" - FLAG_FOR_MATABELELAND_SOUTH_ZW_MS = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0073\U000e007f" - FLAG_FOR_COPPERBELT_ZM_08 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0038\U000e007f" - FLAG_FOR_EASTERN_CAPE_ZA_EC = "\U0001f3f4\U000e007a\U000e0061\U000e0065\U000e0063\U000e007f" - FLAG_FOR_TAIZ_YE_TA = "\U0001f3f4\U000e0079\U000e0065\U000e0074\U000e0061\U000e007f" + FLAG_FOR_AL_BAYDA_YE_BA = "\U0001f3f4\U000e0079\U000e0065\U000e0062\U000e0061\U000e007f" + FLAG_FOR_HAJJAH_YE_HJ = "\U0001f3f4\U000e0079\U000e0065\U000e0068\U000e006a\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_SHABWAH_YE_SH = "\U0001f3f4\U000e0079\U000e0065\U000e0073\U000e0068\U000e007f" + FAMILY_WOMAN_MAN_GIRL_BOY = "\U0001f469\u200d\U0001f468\u200d\U0001f467\u200d\U0001f466" + FLAG_FOR_ATUA_WS_AT = "\U0001f3f4\U000e0077\U000e0073\U000e0061\U000e0074\U000e007f" + FLAG_FOR_UVEA_WF_UV = "\U0001f3f4\U000e0077\U000e0066\U000e0075\U000e0076\U000e007f" + FLAG_FOR_PENAMA_VU_PAM = "\U0001f3f4\U000e0076\U000e0075\U000e0070\U000e0061\U000e006d\U000e007f" + FLAG_FOR_CRNA_NA_KOROSKEM_SI_016 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0036\U000e007f" + FLAG_FOR_ADAN_YE_AD = "\U0001f3f4\U000e0079\U000e0065\U000e0061\U000e0064\U000e007f" + FLAG_FOR_ABYAN_YE_AB = "\U0001f3f4\U000e0079\U000e0065\U000e0061\U000e0062\U000e007f" + FLAG_FOR_PALAULI_WS_PA = "\U0001f3f4\U000e0077\U000e0073\U000e0070\U000e0061\U000e007f" FLAG_FOR_CENTAR_ZUPA_MK_78 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0038\U000e007f" + FLAG_FOR_VA_A_O_FONOTI_WS_VF = "\U0001f3f4\U000e0077\U000e0073\U000e0076\U000e0066\U000e007f" FLAG_FOR_BULAWAYO_ZW_BU = "\U0001f3f4\U000e007a\U000e0077\U000e0062\U000e0075\U000e007f" - FLAG_FOR_MATABELELAND_NORTH_ZW_MN = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e006e\U000e007f" - FLAG_FOR_MPUMALANGA_ZA_MP = "\U0001f3f4\U000e007a\U000e0061\U000e006d\U000e0070\U000e007f" - FLAG_FOR_NORTHERN_CAPE_ZA_NC = "\U0001f3f4\U000e007a\U000e0061\U000e006e\U000e0063\U000e007f" + FLAG_FOR_HARARE_ZW_HA = "\U0001f3f4\U000e007a\U000e0077\U000e0068\U000e0061\U000e007f" FLAG_FOR_GAUTENG_ZA_GT = "\U0001f3f4\U000e007a\U000e0061\U000e0067\U000e0074\U000e007f" - FLAG_FOR_WESTERN_ZM_01 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0031\U000e007f" - FLAG_FOR_CENTRAL_ZM_02 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0032\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_MANICALAND_ZW_MA = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0061\U000e007f" + FLAG_FOR_TAIZ_YE_TA = "\U0001f3f4\U000e0079\U000e0065\U000e0074\U000e0061\U000e007f" + FLAG_FOR_NEAMT_RO_NT = "\U0001f3f4\U000e0072\U000e006f\U000e006e\U000e0074\U000e007f" + FLAG_FOR_NORTHERN_ZM_05 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0035\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" + FLAG_FOR_MUCHINGA_ZM_10 = "\U0001f3f4\U000e007a\U000e006d\U000e0031\U000e0030\U000e007f" + FLAG_FOR_COPPERBELT_ZM_08 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0038\U000e007f" + FLAG_FOR_NORTH_WESTERN_ZM_06 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0036\U000e007f" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" FLAG_FOR_LUAPULA_ZM_04 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0034\U000e007f" - FLAG_FOR_KRASNODAR_KRAI_RU_KDA = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0064\U000e0061\U000e007f" - FLAG_FOR_MANITOBA_CA_MB = "\U0001f3f4\U000e0063\U000e0061\U000e006d\U000e0062\U000e007f" - FLAG_FOR_SAN_JOSE_UY_SJ = "\U0001f3f4\U000e0075\U000e0079\U000e0073\U000e006a\U000e007f" - FLAG_FOR_GUERRERO_MX_GRO = "\U0001f3f4\U000e006d\U000e0078\U000e0067\U000e0072\U000e006f\U000e007f" - FLAG_FOR_KLAIPEDOS_MUNICIPALITY_LT_20 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0030\U000e007f" - FLAG_FOR_EASTERN_HIGHLANDS_PG_EHG = "\U0001f3f4\U000e0070\U000e0067\U000e0065\U000e0068\U000e0067\U000e007f" - FLAG_FOR_DJIBOUTI_DJ_DJ = "\U0001f3f4\U000e0064\U000e006a\U000e0064\U000e006a\U000e007f" - FLAG_FOR_MAZANDARAN_IR_21 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0031\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_PRIMORSKY_KRAI_RU_PRI = "\U0001f3f4\U000e0072\U000e0075\U000e0070\U000e0072\U000e0069\U000e007f" - FLAG_FOR_FUKUSHIMA_JP_07 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0037\U000e007f" - FLAG_FOR_AUSTRALIAN_CAPITAL_TERRITORY_AU_ACT = "\U0001f3f4\U000e0061\U000e0075\U000e0061\U000e0063\U000e0074\U000e007f" - FLAG_FOR_HANOI_VN_HN = "\U0001f3f4\U000e0076\U000e006e\U000e0068\U000e006e\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" - FLAG_FOR_NIUTAO_TV_NIT = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e0069\U000e0074\U000e007f" + FLAG_FOR_LIMPOPO_ZA_LP = "\U0001f3f4\U000e007a\U000e0061\U000e006c\U000e0070\U000e007f" + FLAG_FOR_KOCAELI_TR_41 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0031\U000e007f" + FLAG_FOR_LUSAKA_ZM_09 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0039\U000e007f" + FLAG_FOR_WESTERN_ZM_01 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0031\U000e007f" + FLAG_FOR_REPUBLIKA_SRPSKA_BA_SRP = "\U0001f3f4\U000e0062\U000e0061\U000e0073\U000e0072\U000e0070\U000e007f" + FLAG_FOR_NORTHERN_CAPE_ZA_NC = "\U0001f3f4\U000e007a\U000e0061\U000e006e\U000e0063\U000e007f" + FLAG_FOR_SOUTHLAND_NZ_STL = "\U0001f3f4\U000e006e\U000e007a\U000e0073\U000e0074\U000e006c\U000e007f" + FLAG_FOR_MPUMALANGA_ZA_MP = "\U0001f3f4\U000e007a\U000e0061\U000e006d\U000e0070\U000e007f" + FLAG_FOR_EASTERN_ZM_03 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0033\U000e007f" + FLAG_FOR_MATABELELAND_NORTH_ZW_MN = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e006e\U000e007f" + FLAG_FOR_MASHONALAND_EAST_ZW_ME = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0065\U000e007f" + FLAG_FOR_CENTRAL_ZM_02 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0032\U000e007f" + FLAG_FOR_MASHONALAND_WEST_ZW_MW = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0077\U000e007f" + FLAG_FOR_SOUTHERN_ZM_07 = "\U0001f3f4\U000e007a\U000e006d\U000e0030\U000e0037\U000e007f" + FLAG_FOR_MASVINGO_ZW_MV = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0076\U000e007f" + FLAG_FOR_MATABELELAND_SOUTH_ZW_MS = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0073\U000e007f" + FLAG_FOR_EASTERN_CAPE_ZA_EC = "\U0001f3f4\U000e007a\U000e0061\U000e0065\U000e0063\U000e007f" + FLAG_FOR_NEW_VALLEY_EG_WAD = "\U0001f3f4\U000e0065\U000e0067\U000e0077\U000e0061\U000e0064\U000e007f" + FLAG_FOR_BOLIVAR_EC_B = "\U0001f3f4\U000e0065\U000e0063\U000e0062\U000e007f" + FLAG_FOR_CHANTHABURI_TH_22 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0032\U000e007f" FLAG_FOR_ARTA_DJ_AR = "\U0001f3f4\U000e0064\U000e006a\U000e0061\U000e0072\U000e007f" TAG_COLON = "\U000e003a" - FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_NIUTAO_TV_NIT = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e0069\U000e0074\U000e007f" + TAG_HYPHEN_MINUS = "\U000e002d" + FLAG_FOR_PRIMORSKY_KRAI_RU_PRI = "\U0001f3f4\U000e0072\U000e0075\U000e0070\U000e0072\U000e0069\U000e007f" + FLAG_FOR_MANICALAND_ZW_MA = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0061\U000e007f" + FLAG_FOR_CHUY_KG_C = "\U0001f3f4\U000e006b\U000e0067\U000e0063\U000e007f" + FLAG_FOR_MAINE_US_ME = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0065\U000e007f" + FLAG_FOR_LOWER_JUBA_SO_JH = "\U0001f3f4\U000e0073\U000e006f\U000e006a\U000e0068\U000e007f" + FLAG_FOR_FUKUSHIMA_JP_07 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0037\U000e007f" + FLAG_FOR_PUDUCHERRY_IN_PY = "\U0001f3f4\U000e0069\U000e006e\U000e0070\U000e0079\U000e007f" + FLAG_FOR_KRABI_TH_81 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0031\U000e007f" + FLAG_FOR_UTRECHT_NL_UT = "\U0001f3f4\U000e006e\U000e006c\U000e0075\U000e0074\U000e007f" + FLAG_FOR_MANITOBA_CA_MB = "\U0001f3f4\U000e0063\U000e0061\U000e006d\U000e0062\U000e007f" + FLAG_FOR_GAGA_IFOMAUGA_WS_GI = "\U0001f3f4\U000e0077\U000e0073\U000e0067\U000e0069\U000e007f" FLAG_FOR_NORTH_KHORASAN_IR_31 = "\U0001f3f4\U000e0069\U000e0072\U000e0033\U000e0031\U000e007f" - COUPLE_WITH_HEART_WOMAN_WOMAN_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - FLAG_FOR_UUSIMAA_FI_18 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0038\U000e007f" + KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" + FLAG_FOR_IOWA_US_IA = "\U0001f3f4\U000e0075\U000e0073\U000e0069\U000e0061\U000e007f" FLAG_FOR_LARNACA_CY_03 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0033\U000e007f" - FLAG_FOR_DEIR_AL_BALAH_PS_DEB = "\U0001f3f4\U000e0070\U000e0073\U000e0064\U000e0065\U000e0062\U000e007f" - COUPLE_WITH_HEART_MAN_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - FLAG_FOR_PORT_MORESBY_PG_NCD = "\U0001f3f4\U000e0070\U000e0067\U000e006e\U000e0063\U000e0064\U000e007f" - FLAG_FOR_POOL_CG_12 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0032\U000e007f" - FLAG_FOR_NEVADA_US_NV = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0076\U000e007f" - FLAG_FOR_KAVANGO_EAST_NA_KE = "\U0001f3f4\U000e006e\U000e0061\U000e006b\U000e0065\U000e007f" + RESTRICTED_LEFT_ENTRY_2 = "\u26e1" + FLAG_FOR_NORMANDIE_FR_NOR = "\U0001f3f4\U000e0066\U000e0072\U000e006e\U000e006f\U000e0072\U000e007f" + FLAG_FOR_HAWAII_US_HI = "\U0001f3f4\U000e0075\U000e0073\U000e0068\U000e0069\U000e007f" + FLAG_FOR_ZAMBEZIA_MZ_Q = "\U0001f3f4\U000e006d\U000e007a\U000e0071\U000e007f" + FLAG_FOR_MURMANSK_RU_MUR = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e0075\U000e0072\U000e007f" + FLAG_FOR_CANARIES_LC_12 = "\U0001f3f4\U000e006c\U000e0063\U000e0031\U000e0032\U000e007f" + FLAG_FOR_NEW_HAMPSHIRE_US_NH = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0068\U000e007f" + FLAG_FOR_DJIBOUTI_DJ_DJ = "\U0001f3f4\U000e0064\U000e006a\U000e0064\U000e006a\U000e007f" + FLAG_FOR_JIZAN_SA_09 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0039\U000e007f" + FLAG_FOR_MARSA_MT_26 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0036\U000e007f" + FLAG_FOR_MUGLA_TR_48 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0038\U000e007f" + TAG_LATIN_CAPITAL_LETTER_G = "\U000e0047" FLAG_FOR_LAANE_VIRU_EE_59 = "\U0001f3f4\U000e0065\U000e0065\U000e0035\U000e0039\U000e007f" - TAG_LATIN_SMALL_LETTER_X = "\U000e0078" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" - FLAG_FOR_SAN_LUIS_POTOSI_MX_SLP = "\U0001f3f4\U000e006d\U000e0078\U000e0073\U000e006c\U000e0070\U000e007f" - FLAG_FOR_CRETE_GR_M = "\U0001f3f4\U000e0067\U000e0072\U000e006d\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" - FLAG_FOR_DEMIR_HISAR_MK_25 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0035\U000e007f" - FLAG_FOR_RIO_SAN_JUAN_NI_SJ = "\U0001f3f4\U000e006e\U000e0069\U000e0073\U000e006a\U000e007f" - FLAG_FOR_KAYANGEL_PW_100 = "\U0001f3f4\U000e0070\U000e0077\U000e0031\U000e0030\U000e0030\U000e007f" - KISS_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - FLAG_FOR_HARJU_EE_37 = "\U0001f3f4\U000e0065\U000e0065\U000e0033\U000e0037\U000e007f" - FLAG_FOR_YAREN_NR_14 = "\U0001f3f4\U000e006e\U000e0072\U000e0031\U000e0034\U000e007f" - FLAG_FOR_BONG_LR_BG = "\U0001f3f4\U000e006c\U000e0072\U000e0062\U000e0067\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_SAN_JOSE_UY_SJ = "\U0001f3f4\U000e0075\U000e0079\U000e0073\U000e006a\U000e007f" + FLAG_FOR_NORTH_GAZA_PS_NGZ = "\U0001f3f4\U000e0070\U000e0073\U000e006e\U000e0067\U000e007a\U000e007f" + FLAG_FOR_MANUS_PG_MRL = "\U0001f3f4\U000e0070\U000e0067\U000e006d\U000e0072\U000e006c\U000e007f" + FLAG_FOR_SIVAS_TR_58 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0038\U000e007f" + WOMAN_IN_TUXEDO_MEDIUM_LIGHT_SKIN_TONE = "\U0001f935\U0001f3fc\u200d\u2640\ufe0f" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" + FLAG_FOR_LESSER_POLAND_PL_MA = "\U0001f3f4\U000e0070\U000e006c\U000e006d\U000e0061\U000e007f" FLAG_FOR_WEST_MACEDONIA_GR_C = "\U0001f3f4\U000e0067\U000e0072\U000e0063\U000e007f" - FLAG_FOR_CEARA_BR_CE = "\U0001f3f4\U000e0062\U000e0072\U000e0063\U000e0065\U000e007f" - COUPLE_WITH_HEART_WOMAN_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + FLAG_FOR_DEMIR_HISAR_MK_25 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0035\U000e007f" FLAG_FOR_ARKHABIL_SUQUTRA_YE_SU = "\U0001f3f4\U000e0079\U000e0065\U000e0073\U000e0075\U000e007f" - FLAG_FOR_SAINT_THOMAS_JM_03 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0033\U000e007f" - FLAG_FOR_APURIMAC_PE_APU = "\U0001f3f4\U000e0070\U000e0065\U000e0061\U000e0070\U000e0075\U000e007f" - FLAG_FOR_SONORA_MX_SON = "\U0001f3f4\U000e006d\U000e0078\U000e0073\U000e006f\U000e006e\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe" - FLAG_FOR_KERMANSHAH_IR_17 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0037\U000e007f" - FLAG_FOR_MISSISSIPPI_US_MS = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0073\U000e007f" - FLAG_FOR_HAWALLI_KW_HA = "\U0001f3f4\U000e006b\U000e0077\U000e0068\U000e0061\U000e007f" - FAMILY_WOMAN_MAN_BABY_BOY = "\U0001f469\u200d\U0001f468\u200d\U0001f476\u200d\U0001f466" - FLAG_FOR_KISUMU_KE_17 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0037\U000e007f" - FLAG_FOR_U_S_OUTLYING_ISLANDS_US_UM = "\U0001f3f4\U000e0075\U000e0073\U000e0075\U000e006d\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" - FLAG_FOR_DUZCE_TR_81 = "\U0001f3f4\U000e0074\U000e0072\U000e0038\U000e0031\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_ADRAR_MR_07 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0037\U000e007f" - FLAG_FOR_SASSANDRA_MARAHOUE_CI_SM = "\U0001f3f4\U000e0063\U000e0069\U000e0073\U000e006d\U000e007f" + FLAG_FOR_COMMEWIJNE_SR_CM = "\U0001f3f4\U000e0073\U000e0072\U000e0063\U000e006d\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" + COUPLE_WITH_HEART_WOMAN_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + FLAG_FOR_PRYKARPATTIA_UA_26 = "\U0001f3f4\U000e0075\U000e0061\U000e0032\U000e0036\U000e007f" + FLAG_FOR_NUEVA_ESPARTA_VE_O = "\U0001f3f4\U000e0076\U000e0065\U000e006f\U000e007f" + FLAG_FOR_HARJU_EE_37 = "\U0001f3f4\U000e0065\U000e0065\U000e0033\U000e0037\U000e007f" + FLAG_FOR_GUJARAT_IN_GJ = "\U0001f3f4\U000e0069\U000e006e\U000e0067\U000e006a\U000e007f" + FLAG_FOR_JEKABPILS_MUNICIPALITY_LV_042 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0032\U000e007f" + FLAG_FOR_NAVASSA_ISLAND_UM_76 = "\U0001f3f4\U000e0075\U000e006d\U000e0037\U000e0036\U000e007f" + KISS_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + FLAG_FOR_OGRE_LV_067 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0037\U000e007f" + FLAG_FOR_YAREN_NR_14 = "\U0001f3f4\U000e006e\U000e0072\U000e0031\U000e0034\U000e007f" FLAG_FOR_SCHELLENBERG_LI_08 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0038\U000e007f" - FLAG_FOR_CHOCO_CO_CHO = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0068\U000e006f\U000e007f" - FLAG_FOR_OROMIA_ET_OR = "\U0001f3f4\U000e0065\U000e0074\U000e006f\U000e0072\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe" FLAG_FOR_TELANGANA_IN_TG = "\U0001f3f4\U000e0069\U000e006e\U000e0074\U000e0067\U000e007f" + FLAG_FOR_OROMIA_ET_OR = "\U0001f3f4\U000e0065\U000e0074\U000e006f\U000e0072\U000e007f" + FLAG_FOR_UUSIMAA_FI_18 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0038\U000e007f" + FLAG_FOR_SASSANDRA_MARAHOUE_CI_SM = "\U0001f3f4\U000e0063\U000e0069\U000e0073\U000e006d\U000e007f" + FLAG_FOR_HA_APAI_TO_02 = "\U0001f3f4\U000e0074\U000e006f\U000e0030\U000e0032\U000e007f" FLAG_FOR_GUAYAS_EC_G = "\U0001f3f4\U000e0065\U000e0063\U000e0067\U000e007f" - FLAG_FOR_SOKOTO_NG_SO = "\U0001f3f4\U000e006e\U000e0067\U000e0073\U000e006f\U000e007f" - FLAG_FOR_MEXICO_STATE_MX_MEX = "\U0001f3f4\U000e006d\U000e0078\U000e006d\U000e0065\U000e0078\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - FLAG_FOR_HSINCHU_TW_HSZ = "\U0001f3f4\U000e0074\U000e0077\U000e0068\U000e0073\U000e007a\U000e007f" - FLAG_FOR_SKOFJA_LOKA_SI_122 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0032\U000e007f" - FLAG_FOR_QUEBEC_CA_QC = "\U0001f3f4\U000e0063\U000e0061\U000e0071\U000e0063\U000e007f" - FLAG_FOR_ANDAMAN_AND_NICOBAR_ISLANDS_IN_AN = "\U0001f3f4\U000e0069\U000e006e\U000e0061\U000e006e\U000e007f" - FLAG_FOR_BOKEO_LA_BK = "\U0001f3f4\U000e006c\U000e0061\U000e0062\U000e006b\U000e007f" - FLAG_FOR_GUARICO_VE_J = "\U0001f3f4\U000e0076\U000e0065\U000e006a\U000e007f" - FLAG_FOR_AREQUIPA_PE_ARE = "\U0001f3f4\U000e0070\U000e0065\U000e0061\U000e0072\U000e0065\U000e007f" - KISS_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" - FLAG_FOR_WEST_COAST_NZ_WTC = "\U0001f3f4\U000e006e\U000e007a\U000e0077\U000e0074\U000e0063\U000e007f" - FLAG_FOR_BAY_ISLANDS_HN_IB = "\U0001f3f4\U000e0068\U000e006e\U000e0069\U000e0062\U000e007f" - FLAG_FOR_VAKAGA_CF_VK = "\U0001f3f4\U000e0063\U000e0066\U000e0076\U000e006b\U000e007f" - FLAG_FOR_SAINT_CATHERINE_JM_14 = "\U0001f3f4\U000e006a\U000e006d\U000e0031\U000e0034\U000e007f" + FLAG_FOR_DUZCE_TR_81 = "\U0001f3f4\U000e0074\U000e0072\U000e0038\U000e0031\U000e007f" + FLAG_FOR_APURIMAC_PE_APU = "\U0001f3f4\U000e0070\U000e0065\U000e0061\U000e0070\U000e0075\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" + FAMILY_WOMAN_MAN_BABY_BOY = "\U0001f469\u200d\U0001f468\u200d\U0001f476\u200d\U0001f466" + FLAG_FOR_SOUTHERN_NATIONS_NATIONALITIES_AND_PEOPLES_ET_SN = "\U0001f3f4\U000e0065\U000e0074\U000e0073\U000e006e\U000e007f" + FLAG_FOR_CHOCO_CO_CHO = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0068\U000e006f\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_SAINT_PATRICK_VC_05 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0035\U000e007f" + FLAG_FOR_HAWALLI_KW_HA = "\U0001f3f4\U000e006b\U000e0077\U000e0068\U000e0061\U000e007f" + FLAG_FOR_ADRAR_MR_07 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0037\U000e007f" FLAG_FOR_BOUENZA_CG_11 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0031\U000e007f" - FLAG_FOR_ANTIOQUIA_CO_ANT = "\U0001f3f4\U000e0063\U000e006f\U000e0061\U000e006e\U000e0074\U000e007f" - FLAG_FOR_SUCRE_VE_R = "\U0001f3f4\U000e0076\U000e0065\U000e0072\U000e007f" - COUPLE_WITH_HEART_MAN_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" - FLAG_FOR_SOUTHERN_LK_3 = "\U0001f3f4\U000e006c\U000e006b\U000e0033\U000e007f" - FLAG_FOR_VARAZDIN_HR_05 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0035\U000e007f" - FLAG_FOR_PAYS_DE_LA_LOIRE_FR_PDL = "\U0001f3f4\U000e0066\U000e0072\U000e0070\U000e0064\U000e006c\U000e007f" + FLAG_FOR_WYOMING_US_WY = "\U0001f3f4\U000e0075\U000e0073\U000e0077\U000e0079\U000e007f" + FLAG_FOR_BAY_ISLANDS_HN_IB = "\U0001f3f4\U000e0068\U000e006e\U000e0069\U000e0062\U000e007f" + FLAG_FOR_HSINCHU_TW_HSZ = "\U0001f3f4\U000e0074\U000e0077\U000e0068\U000e0073\U000e007a\U000e007f" + TAG_FULL_STOP = "\U000e002e" + FLAG_FOR_VAKAGA_CF_VK = "\U0001f3f4\U000e0063\U000e0066\U000e0076\U000e006b\U000e007f" + FLAG_FOR_ALBERTA_CA_AB = "\U0001f3f4\U000e0063\U000e0061\U000e0061\U000e0062\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_PORTUGUESA_VE_P = "\U0001f3f4\U000e0076\U000e0065\U000e0070\U000e007f" + FLAG_FOR_ILE_DE_FRANCE_FR_IDF = "\U0001f3f4\U000e0066\U000e0072\U000e0069\U000e0064\U000e0066\U000e007f" + FLAG_FOR_MISSISSIPPI_US_MS = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0073\U000e007f" + FLAG_FOR_SKOFJA_LOKA_SI_122 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0032\U000e007f" + FLAG_FOR_VAINODE_LV_100 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0030\U000e007f" + FLAG_FOR_AUSTRALIAN_CAPITAL_TERRITORY_AU_ACT = "\U0001f3f4\U000e0061\U000e0075\U000e0061\U000e0063\U000e0074\U000e007f" + FLAG_FOR_GUARICO_VE_J = "\U0001f3f4\U000e0076\U000e0065\U000e006a\U000e007f" + FLAG_FOR_SAINT_CATHERINE_JM_14 = "\U0001f3f4\U000e006a\U000e006d\U000e0031\U000e0034\U000e007f" + FLAG_FOR_SOKOTO_NG_SO = "\U0001f3f4\U000e006e\U000e0067\U000e0073\U000e006f\U000e007f" + FLAG_FOR_AREQUIPA_PE_ARE = "\U0001f3f4\U000e0070\U000e0065\U000e0061\U000e0072\U000e0065\U000e007f" + FLAG_FOR_SONORA_MX_SON = "\U0001f3f4\U000e006d\U000e0078\U000e0073\U000e006f\U000e006e\U000e007f" + FLAG_FOR_CHANGHUA_TW_CHA = "\U0001f3f4\U000e0074\U000e0077\U000e0063\U000e0068\U000e0061\U000e007f" + FLAG_FOR_LERIBE_LS_C = "\U0001f3f4\U000e006c\U000e0073\U000e0063\U000e007f" + FLAG_FOR_SAINTE_DEVOTE_CHAPEL_MC_SD = "\U0001f3f4\U000e006d\U000e0063\U000e0073\U000e0064\U000e007f" + FLAG_FOR_ISSYK_KUL_KG_Y = "\U0001f3f4\U000e006b\U000e0067\U000e0079\U000e007f" + FLAG_FOR_CHANDIGARH_IN_CH = "\U0001f3f4\U000e0069\U000e006e\U000e0063\U000e0068\U000e007f" FAMILY_MAN_MAN_BOY_BABY = "\U0001f468\u200d\U0001f468\u200d\U0001f466\u200d\U0001f476" - FLAG_FOR_LEON_NI_LE = "\U0001f3f4\U000e006e\U000e0069\U000e006c\U000e0065\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_ARAGON_ES_AR = "\U0001f3f4\U000e0065\U000e0073\U000e0061\U000e0072\U000e007f" KISS_MAN_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" FLAG_FOR_PLASNICA_MK_61 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0031\U000e007f" - FLAG_FOR_SAINTE_DEVOTE_CHAPEL_MC_SD = "\U0001f3f4\U000e006d\U000e0063\U000e0073\U000e0064\U000e007f" + FLAG_FOR_ANTALYA_TR_07 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0037\U000e007f" + FLAG_FOR_VARAZDIN_HR_05 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0035\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_TAFEA_VU_TAE = "\U0001f3f4\U000e0076\U000e0075\U000e0074\U000e0061\U000e0065\U000e007f" + FLAG_FOR_VELIKE_LASCE_SI_134 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0034\U000e007f" + FLAG_FOR_QUERETARO_MX_QUE = "\U0001f3f4\U000e006d\U000e0078\U000e0071\U000e0075\U000e0065\U000e007f" + FLAG_FOR_DEIR_AL_BALAH_PS_DEB = "\U0001f3f4\U000e0070\U000e0073\U000e0064\U000e0065\U000e0062\U000e007f" + FLAG_FOR_MEXICO_STATE_MX_MEX = "\U0001f3f4\U000e006d\U000e0078\U000e006d\U000e0065\U000e0078\U000e007f" + FLAG_FOR_LEON_NI_LE = "\U0001f3f4\U000e006e\U000e0069\U000e006c\U000e0065\U000e007f" FLAG_FOR_NORTH_PROVINCE_MV_NO = "\U0001f3f4\U000e006d\U000e0076\U000e006e\U000e006f\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_HORDALAND_NO_12 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0032\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" - FLAG_FOR_APURE_VE_C = "\U0001f3f4\U000e0076\U000e0065\U000e0063\U000e007f" - FLAG_FOR_OUAKA_CF_UK = "\U0001f3f4\U000e0063\U000e0066\U000e0075\U000e006b\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - FLAG_FOR_EGER_HU_EG = "\U0001f3f4\U000e0068\U000e0075\U000e0065\U000e0067\U000e007f" - FLAG_FOR_RIO_GRANDE_DO_SUL_BR_RS = "\U0001f3f4\U000e0062\U000e0072\U000e0072\U000e0073\U000e007f" - FLAG_FOR_TABASCO_MX_TAB = "\U0001f3f4\U000e006d\U000e0078\U000e0074\U000e0061\U000e0062\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_VELENJE_SI_133 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0033\U000e007f" - FLAG_FOR_MALAMPA_VU_MAP = "\U0001f3f4\U000e0076\U000e0075\U000e006d\U000e0061\U000e0070\U000e007f" - FLAG_FOR_MACAU_SAR_CHINA_CN_92 = "\U0001f3f4\U000e0063\U000e006e\U000e0039\U000e0032\U000e007f" - FLAG_FOR_MONTANA_US_MT = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0074\U000e007f" FLAG_FOR_ST_BARTHELEMY_FR_BL = "\U0001f3f4\U000e0066\U000e0072\U000e0062\U000e006c\U000e007f" - FLAG_FOR_NORTH_HOLLAND_NL_NH = "\U0001f3f4\U000e006e\U000e006c\U000e006e\U000e0068\U000e007f" - FLAG_FOR_AUCKLAND_NZ_AUK = "\U0001f3f4\U000e006e\U000e007a\U000e0061\U000e0075\U000e006b\U000e007f" + FLAG_FOR_HORDALAND_NO_12 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0032\U000e007f" + FLAG_FOR_PLZENSKY_KRAJ_CZ_32 = "\U0001f3f4\U000e0063\U000e007a\U000e0033\U000e0032\U000e007f" + FLAG_FOR_EGER_HU_EG = "\U0001f3f4\U000e0068\U000e0075\U000e0065\U000e0067\U000e007f" + FLAG_FOR_TABASCO_MX_TAB = "\U0001f3f4\U000e006d\U000e0078\U000e0074\U000e0061\U000e0062\U000e007f" + FLAG_FOR_FLANDERS_BE_VLG = "\U0001f3f4\U000e0062\U000e0065\U000e0076\U000e006c\U000e0067\U000e007f" + FLAG_FOR_KERMANSHAH_IR_17 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0037\U000e007f" + FLAG_FOR_APURE_VE_C = "\U0001f3f4\U000e0076\U000e0065\U000e0063\U000e007f" + FLAG_FOR_SILA_TD_SI = "\U0001f3f4\U000e0074\U000e0064\U000e0073\U000e0069\U000e007f" + FLAG_FOR_DURANGO_MX_DUR = "\U0001f3f4\U000e006d\U000e0078\U000e0064\U000e0075\U000e0072\U000e007f" + FLAG_FOR_MARAMURES_RO_MM = "\U0001f3f4\U000e0072\U000e006f\U000e006d\U000e006d\U000e007f" + FLAG_FOR_VELENJE_SI_133 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0033\U000e0033\U000e007f" FLAG_FOR_SAINT_JOHN_DM_05 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0035\U000e007f" + FLAG_FOR_NORTH_GYEONGSANG_KR_47 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0037\U000e007f" + FLAG_FOR_MOROGORO_TZ_16 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0036\U000e007f" + FLAG_FOR_NORTH_HOLLAND_NL_NH = "\U0001f3f4\U000e006e\U000e006c\U000e006e\U000e0068\U000e007f" FLAG_FOR_MERIDA_VE_L = "\U0001f3f4\U000e0076\U000e0065\U000e006c\U000e007f" - FLAG_FOR_NORTH_OSSETIA_ALANIA_RU_SE = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0065\U000e007f" - FLAG_FOR_DOBJE_SI_154 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0034\U000e007f" - FAMILY_MAN_WOMAN_BOY_BABY = "\U0001f468\u200d\U0001f469\u200d\U0001f466\u200d\U0001f476" - KISS_MAN_MEDIUM_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - FLAG_FOR_TAVASTIA_PROPER_FI_06 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0036\U000e007f" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - FLAG_FOR_OHIO_US_OH = "\U0001f3f4\U000e0075\U000e0073\U000e006f\U000e0068\U000e007f" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_RETALHULEU_GT_RE = "\U0001f3f4\U000e0067\U000e0074\U000e0072\U000e0065\U000e007f" - FLAG_FOR_RIVER_GEE_LR_RG = "\U0001f3f4\U000e006c\U000e0072\U000e0072\U000e0067\U000e007f" - FLAG_FOR_SABAH_MY_12 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0032\U000e007f" - FLAG_FOR_MASHONALAND_CENTRAL_ZW_MC = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0063\U000e007f" - FLAG_FOR_ANKARAN_SI_213 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0031\U000e0033\U000e007f" + FLAG_FOR_AUCKLAND_NZ_AUK = "\U0001f3f4\U000e006e\U000e007a\U000e0061\U000e0075\U000e006b\U000e007f" + FLAG_FOR_RIO_GRANDE_DO_SUL_BR_RS = "\U0001f3f4\U000e0062\U000e0072\U000e0072\U000e0073\U000e007f" + FLAG_FOR_RYAZAN_RU_RYA = "\U0001f3f4\U000e0072\U000e0075\U000e0072\U000e0079\U000e0061\U000e007f" + FLAG_FOR_DAR_ES_SALAAM_TZ_02 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0032\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" FLAG_FOR_GAFSA_TN_71 = "\U0001f3f4\U000e0074\U000e006e\U000e0037\U000e0031\U000e007f" - FLAG_FOR_WEST_AZARBAIJAN_IR_02 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0032\U000e007f" - FLAG_FOR_BASQUE_COUNTRY_ES_PV = "\U0001f3f4\U000e0065\U000e0073\U000e0070\U000e0076\U000e007f" + FLAG_FOR_MASHONALAND_CENTRAL_ZW_MC = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0063\U000e007f" + FLAG_FOR_BOVEC_SI_006 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0036\U000e007f" + FLAG_FOR_ANKARAN_SI_213 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0031\U000e0033\U000e007f" + KISS_MAN_MEDIUM_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" + TAG_LATIN_CAPITAL_LETTER_O = "\U000e004f" + FLAG_FOR_GUERRERO_MX_GRO = "\U0001f3f4\U000e006d\U000e0078\U000e0067\U000e0072\U000e006f\U000e007f" + FLAG_FOR_DOBJE_SI_154 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0034\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_RETALHULEU_GT_RE = "\U0001f3f4\U000e0067\U000e0074\U000e0072\U000e0065\U000e007f" FLAG_FOR_NARINO_CO_NAR = "\U0001f3f4\U000e0063\U000e006f\U000e006e\U000e0061\U000e0072\U000e007f" + FLAG_FOR_TUNIS_TN_11 = "\U0001f3f4\U000e0074\U000e006e\U000e0031\U000e0031\U000e007f" + FLAG_FOR_TIBET_CN_54 = "\U0001f3f4\U000e0063\U000e006e\U000e0035\U000e0034\U000e007f" + FLAG_FOR_MALAMPA_VU_MAP = "\U0001f3f4\U000e0076\U000e0075\U000e006d\U000e0061\U000e0070\U000e007f" + FLAG_FOR_PIEDMONT_IT_21 = "\U0001f3f4\U000e0069\U000e0074\U000e0032\U000e0031\U000e007f" + FLAG_FOR_KAYSERI_TR_38 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0038\U000e007f" FLAG_FOR_EQUATEUR_CD_EQ = "\U0001f3f4\U000e0063\U000e0064\U000e0065\U000e0071\U000e007f" - FLAG_FOR_LINE_ISLANDS_KI_L = "\U0001f3f4\U000e006b\U000e0069\U000e006c\U000e007f" - FLAG_FOR_SOUTHERN_RED_SEA_ER_DK = "\U0001f3f4\U000e0065\U000e0072\U000e0064\U000e006b\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_ZANZAN_CI_ZZ = "\U0001f3f4\U000e0063\U000e0069\U000e007a\U000e007a\U000e007f" - FLAG_FOR_NEW_MEXICO_US_NM = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e006d\U000e007f" - FLAG_FOR_SAMUT_SONGKHRAM_TH_75 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0035\U000e007f" - FLAG_FOR_NORD_UBANGI_CD_NU = "\U0001f3f4\U000e0063\U000e0064\U000e006e\U000e0075\U000e007f" - FLAG_FOR_VALENCIAN_COMMUNITY_ES_VC = "\U0001f3f4\U000e0065\U000e0073\U000e0076\U000e0063\U000e007f" - FLAG_FOR_MARSABIT_KE_25 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0035\U000e007f" + FLAG_FOR_SABAH_MY_12 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0032\U000e007f" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + FLAG_FOR_NYANGA_GA_5 = "\U0001f3f4\U000e0067\U000e0061\U000e0035\U000e007f" + FLAG_FOR_TAVASTIA_PROPER_FI_06 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0036\U000e007f" + FLAG_FOR_CARAS_SEVERIN_RO_CS = "\U0001f3f4\U000e0072\U000e006f\U000e0063\U000e0073\U000e007f" FLAG_FOR_CENTRAL_VISAYAS_PH_07 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0037\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" - FLAG_FOR_MAZSALACA_LV_060 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0030\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" - KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" - FLAG_FOR_CASTILE_AND_LEON_ES_CL = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e006c\U000e007f" - FLAG_FOR_CHUMPHON_TH_86 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0036\U000e007f" - TAG_LATIN_CAPITAL_LETTER_H = "\U000e0048" - FLAG_FOR_USULUTAN_SV_US = "\U0001f3f4\U000e0073\U000e0076\U000e0075\U000e0073\U000e007f" - FLAG_FOR_FRIESLAND_NL_FR = "\U0001f3f4\U000e006e\U000e006c\U000e0066\U000e0072\U000e007f" - FLAG_FOR_CHAIYAPHUM_TH_36 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0036\U000e007f" FLAG_FOR_MASERU_LS_A = "\U0001f3f4\U000e006c\U000e0073\U000e0061\U000e007f" - FLAG_FOR_ADRAR_DZ_01 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0031\U000e007f" - FLAG_FOR_EMILIA_ROMAGNA_IT_45 = "\U0001f3f4\U000e0069\U000e0074\U000e0034\U000e0035\U000e007f" - FLAG_FOR_FALCON_VE_I = "\U0001f3f4\U000e0076\U000e0065\U000e0069\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_SAINT_ANDREW_GD_01 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0031\U000e007f" + FLAG_FOR_LAI_CHAU_VN_01 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0031\U000e007f" + FLAG_FOR_CHAIYAPHUM_TH_36 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0036\U000e007f" FLAG_FOR_ESMERALDAS_EC_E = "\U0001f3f4\U000e0065\U000e0063\U000e0065\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_ZULIA_VE_V = "\U0001f3f4\U000e0076\U000e0065\U000e0076\U000e007f" + FLAG_FOR_DILI_TL_DI = "\U0001f3f4\U000e0074\U000e006c\U000e0064\U000e0069\U000e007f" + FLAG_FOR_USULUTAN_SV_US = "\U0001f3f4\U000e0073\U000e0076\U000e0075\U000e0073\U000e007f" + FLAG_FOR_MARSABIT_KE_25 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0035\U000e007f" + FLAG_FOR_FALCON_VE_I = "\U0001f3f4\U000e0076\U000e0065\U000e0069\U000e007f" + FLAG_FOR_ZANZAN_CI_ZZ = "\U0001f3f4\U000e0063\U000e0069\U000e007a\U000e007a\U000e007f" + FLAG_FOR_NORD_UBANGI_CD_NU = "\U0001f3f4\U000e0063\U000e0064\U000e006e\U000e0075\U000e007f" + FLAG_FOR_PAILIN_KH_24 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0034\U000e007f" + FLAG_FOR_CASTILE_AND_LEON_ES_CL = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e006c\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_SAMUT_SONGKHRAM_TH_75 = "\U0001f3f4\U000e0074\U000e0068\U000e0037\U000e0035\U000e007f" + FLAG_FOR_ADRAR_DZ_01 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0031\U000e007f" + FLAG_FOR_EAST_SEPIK_PG_ESW = "\U0001f3f4\U000e0070\U000e0067\U000e0065\U000e0073\U000e0077\U000e007f" + FLAG_FOR_EMILIA_ROMAGNA_IT_45 = "\U0001f3f4\U000e0069\U000e0074\U000e0034\U000e0035\U000e007f" + FLAG_FOR_CHUMPHON_TH_86 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0036\U000e007f" + FLAG_FOR_MAZSALACA_LV_060 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0030\U000e007f" + FLAG_FOR_BARI_SO_BR = "\U0001f3f4\U000e0073\U000e006f\U000e0062\U000e0072\U000e007f" FLAG_FOR_ALAND_ISLANDS_FI_01 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0031\U000e007f" - FLAG_FOR_VAISIGANO_WS_VS = "\U0001f3f4\U000e0077\U000e0073\U000e0076\U000e0073\U000e007f" - FLAG_FOR_XORAZM_UZ_XO = "\U0001f3f4\U000e0075\U000e007a\U000e0078\U000e006f\U000e007f" - FLAG_FOR_SINT_EUSTATIUS_BQ_SE = "\U0001f3f4\U000e0062\U000e0071\U000e0073\U000e0065\U000e007f" - FLAG_FOR_CAPELLEN_LU_CA = "\U0001f3f4\U000e006c\U000e0075\U000e0063\U000e0061\U000e007f" - KISS_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" - FLAG_FOR_GWANGJU_CITY_KR_29 = "\U0001f3f4\U000e006b\U000e0072\U000e0032\U000e0039\U000e007f" - FLAG_FOR_KRANJ_SI_052 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0032\U000e007f" - KISS_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" - FLAG_FOR_DONECHCHYNA_UA_14 = "\U0001f3f4\U000e0075\U000e0061\U000e0031\U000e0034\U000e007f" - FLAG_FOR_AL_BAHAH_SA_11 = "\U0001f3f4\U000e0073\U000e0061\U000e0031\U000e0031\U000e007f" + FLAG_FOR_QUANG_NAM_VN_27 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0037\U000e007f" + FLAG_FOR_LINE_ISLANDS_KI_L = "\U0001f3f4\U000e006b\U000e0069\U000e006c\U000e007f" + FLAG_FOR_KAGOSHIMA_JP_46 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0036\U000e007f" + FLAG_FOR_CAIRO_EG_C = "\U0001f3f4\U000e0065\U000e0067\U000e0063\U000e007f" FLAG_FOR_KUTAHYA_TR_43 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0033\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" - FLAG_FOR_LUQA_MT_25 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0035\U000e007f" + FAMILY_MAN_WOMAN_BOY_BABY = "\U0001f468\u200d\U0001f469\u200d\U0001f466\u200d\U0001f476" + FLAG_FOR_AL_BAHAH_SA_11 = "\U0001f3f4\U000e0073\U000e0061\U000e0031\U000e0031\U000e007f" + FLAG_FOR_GREATER_POLAND_PL_WP = "\U0001f3f4\U000e0070\U000e006c\U000e0077\U000e0070\U000e007f" + FLAG_FOR_WEST_AZARBAIJAN_IR_02 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0032\U000e007f" + FLAG_FOR_YAMALO_NENETS_OKRUG_RU_YAN = "\U0001f3f4\U000e0072\U000e0075\U000e0079\U000e0061\U000e006e\U000e007f" + FLAG_FOR_MONTANA_US_MT = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0074\U000e007f" + KISS_WOMAN_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + FLAG_FOR_POMEROON_SUPENAAM_GY_PM = "\U0001f3f4\U000e0067\U000e0079\U000e0070\U000e006d\U000e007f" + FLAG_FOR_GWANGJU_CITY_KR_29 = "\U0001f3f4\U000e006b\U000e0072\U000e0032\U000e0039\U000e007f" + FLAG_FOR_DONECHCHYNA_UA_14 = "\U0001f3f4\U000e0075\U000e0061\U000e0031\U000e0034\U000e007f" + FLAG_FOR_SAFI_MT_47 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0037\U000e007f" + COUPLE_WITH_HEART_MAN_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + KISS_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" + FLAG_FOR_ANTIOQUIA_CO_ANT = "\U0001f3f4\U000e0063\U000e006f\U000e0061\U000e006e\U000e0074\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_KRANJ_SI_052 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0032\U000e007f" + FLAG_FOR_MIYAGI_JP_04 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0034\U000e007f" + FLAG_FOR_MARGIBI_LR_MG = "\U0001f3f4\U000e006c\U000e0072\U000e006d\U000e0067\U000e007f" + FLAG_FOR_ZULIA_VE_V = "\U0001f3f4\U000e0076\U000e0065\U000e0076\U000e007f" + FLAG_FOR_VAISIGANO_WS_VS = "\U0001f3f4\U000e0077\U000e0073\U000e0076\U000e0073\U000e007f" + FLAG_FOR_GLARUS_CH_GL = "\U0001f3f4\U000e0063\U000e0068\U000e0067\U000e006c\U000e007f" FLAG_FOR_BECHAR_DZ_08 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0038\U000e007f" - FLAG_FOR_KARA_TG_K = "\U0001f3f4\U000e0074\U000e0067\U000e006b\U000e007f" - FLAG_FOR_PHATTHALUNG_TH_93 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0033\U000e007f" - FLAG_FOR_HIMACHAL_PRADESH_IN_HP = "\U0001f3f4\U000e0069\U000e006e\U000e0068\U000e0070\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_NORTH_SINAI_EG_SIN = "\U0001f3f4\U000e0065\U000e0067\U000e0073\U000e0069\U000e006e\U000e007f" - FLAG_FOR_ORIENTAL_MA_04 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0034\U000e007f" - FLAG_FOR_BENI_SUEF_EG_BNS = "\U0001f3f4\U000e0065\U000e0067\U000e0062\U000e006e\U000e0073\U000e007f" + FLAG_FOR_EMBERA_PA_EM = "\U0001f3f4\U000e0070\U000e0061\U000e0065\U000e006d\U000e007f" + FLAG_FOR_LUQA_MT_25 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0035\U000e007f" + FLAG_FOR_IBB_YE_IB = "\U0001f3f4\U000e0079\U000e0065\U000e0069\U000e0062\U000e007f" FLAG_FOR_EAST_BERBICE_CORENTYNE_GY_EB = "\U0001f3f4\U000e0067\U000e0079\U000e0065\U000e0062\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" - FLAG_FOR_GORENJA_VAS_POLJANE_SI_027 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0037\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" - FLAG_FOR_TERENGGANU_MY_11 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0031\U000e007f" - FLAG_FOR_KOKNESE_LV_046 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0036\U000e007f" - FLAG_FOR_SVETI_JURIJ_V_SLOVENSKIH_GORICAH_SI_210 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0031\U000e0030\U000e007f" - FLAG_FOR_DELTA_NG_DE = "\U0001f3f4\U000e006e\U000e0067\U000e0064\U000e0065\U000e007f" - FLAG_FOR_BURYAT_RU_BU = "\U0001f3f4\U000e0072\U000e0075\U000e0062\U000e0075\U000e007f" - FLAG_FOR_ODRANCI_SI_086 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0036\U000e007f" - KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + FLAG_FOR_U_S_VIRGIN_ISLANDS_US_VI = "\U0001f3f4\U000e0075\U000e0073\U000e0076\U000e0069\U000e007f" + FLAG_FOR_PHATTHALUNG_TH_93 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0033\U000e007f" + FLAG_FOR_YUCATAN_MX_YUC = "\U0001f3f4\U000e006d\U000e0078\U000e0079\U000e0075\U000e0063\U000e007f" + FLAG_FOR_KALMYKIA_RU_KL = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e006c\U000e007f" + FLAG_FOR_ANDALUSIA_ES_AN = "\U0001f3f4\U000e0065\U000e0073\U000e0061\U000e006e\U000e007f" + FLAG_FOR_CAPELLEN_LU_CA = "\U0001f3f4\U000e006c\U000e0075\U000e0063\U000e0061\U000e007f" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + FLAG_FOR_POOL_CG_12 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0032\U000e007f" FLAG_FOR_CAUSENI_MD_CS = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e0073\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" FLAG_FOR_SZABOLCS_SZATMAR_BEREG_HU_SZ = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e007a\U000e007f" + FLAG_FOR_ZANZIBAR_NORTH_TZ_07 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0037\U000e007f" + FLAG_FOR_AL_JAWF_YE_JA = "\U0001f3f4\U000e0079\U000e0065\U000e006a\U000e0061\U000e007f" + FLAG_FOR_KOKNESE_LV_046 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0036\U000e007f" + FLAG_FOR_DELTA_NG_DE = "\U0001f3f4\U000e006e\U000e0067\U000e0064\U000e0065\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff" + SALTIRE = "\u2613" + FLAG_FOR_NORTH_SINAI_EG_SIN = "\U0001f3f4\U000e0065\U000e0067\U000e0073\U000e0069\U000e006e\U000e007f" + KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" FAMILY_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_LOG_DRAGOMER_SI_208 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0038\U000e007f" - FLAG_FOR_SVAY_RIENG_KH_20 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0030\U000e007f" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" - FLAG_FOR_FRIULI_VENEZIA_GIULIA_IT_36 = "\U0001f3f4\U000e0069\U000e0074\U000e0033\U000e0036\U000e007f" - FLAG_FOR_ARACINOVO_MK_02 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0032\U000e007f" - FLAG_FOR_HADJER_LAMIS_TD_HL = "\U0001f3f4\U000e0074\U000e0064\U000e0068\U000e006c\U000e007f" - FLAG_FOR_CONSTANTINE_DZ_25 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0035\U000e007f" - FLAG_FOR_GIFU_JP_21 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0031\U000e007f" - FLAG_FOR_JELGAVA_MUNICIPALITY_LV_041 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0031\U000e007f" + FLAG_FOR_GORENJA_VAS_POLJANE_SI_027 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0037\U000e007f" + WHITE_FLAG_WITH_HORIZONTAL_MIDDLE_BLACK_STRIPE = "\u26ff" FLAG_FOR_XEWKIJA_MT_62 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0032\U000e007f" - FLAG_FOR_SAITAMA_JP_11 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0031\U000e007f" - FLAG_FOR_GUIDIMAKA_MR_10 = "\U0001f3f4\U000e006d\U000e0072\U000e0031\U000e0030\U000e007f" - FLAG_FOR_BALKAN_TM_B = "\U0001f3f4\U000e0074\U000e006d\U000e0062\U000e007f" + FLAG_FOR_BAC_NINH_VN_56 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0036\U000e007f" + FLAG_FOR_HADJER_LAMIS_TD_HL = "\U0001f3f4\U000e0074\U000e0064\U000e0068\U000e006c\U000e007f" + FLAG_FOR_SAINT_MICHAEL_BB_08 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0038\U000e007f" FLAG_FOR_MAPUTO_PROVINCE_MZ_L = "\U0001f3f4\U000e006d\U000e007a\U000e006c\U000e007f" - FLAG_FOR_FEDERALLY_ADMINISTERED_TRIBAL_AREAS_PK_TA = "\U0001f3f4\U000e0070\U000e006b\U000e0074\U000e0061\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" - FLAG_FOR_SAINT_ANDREW_JM_02 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0032\U000e007f" + FLAG_FOR_GUIDIMAKA_MR_10 = "\U0001f3f4\U000e006d\U000e0072\U000e0031\U000e0030\U000e007f" + FLAG_FOR_ARACINOVO_MK_02 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0032\U000e007f" + FLAG_FOR_PAHANG_MY_06 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0036\U000e007f" + FLAG_FOR_SVAY_RIENG_KH_20 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0030\U000e007f" + FLAG_FOR_JELGAVA_MUNICIPALITY_LV_041 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0031\U000e007f" + FLAG_FOR_NORTHERN_OSTROBOTHNIA_FI_14 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0034\U000e007f" + FLAG_FOR_SOUSSE_TN_51 = "\U0001f3f4\U000e0074\U000e006e\U000e0035\U000e0031\U000e007f" + FLAG_FOR_ODRANCI_SI_086 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0036\U000e007f" + FLAG_FOR_ALTO_PARANA_PY_10 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0030\U000e007f" + FLAG_FOR_WASHINGTON_US_WA = "\U0001f3f4\U000e0075\U000e0073\U000e0077\U000e0061\U000e007f" + FLAG_FOR_TAOYUAN_TW_TAO = "\U0001f3f4\U000e0074\U000e0077\U000e0074\U000e0061\U000e006f\U000e007f" + FLAG_FOR_OMSK_RU_OMS = "\U0001f3f4\U000e0072\U000e0075\U000e006f\U000e006d\U000e0073\U000e007f" + FLAG_FOR_BRATISLAVA_SK_BL = "\U0001f3f4\U000e0073\U000e006b\U000e0062\U000e006c\U000e007f" + FLAG_FOR_GIFU_JP_21 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0031\U000e007f" + FLAG_FOR_CHIRIQUI_PA_4 = "\U0001f3f4\U000e0070\U000e0061\U000e0034\U000e007f" + FLAG_FOR_HESSE_DE_HE = "\U0001f3f4\U000e0064\U000e0065\U000e0068\U000e0065\U000e007f" + FLAG_FOR_AIWO_NR_01 = "\U0001f3f4\U000e006e\U000e0072\U000e0030\U000e0031\U000e007f" + FLAG_FOR_MA_RIB_YE_MA = "\U0001f3f4\U000e0079\U000e0065\U000e006d\U000e0061\U000e007f" + FLAG_FOR_SINT_EUSTATIUS_BQ_SE = "\U0001f3f4\U000e0062\U000e0071\U000e0073\U000e0065\U000e007f" FLAG_FOR_ASSAM_IN_AS = "\U0001f3f4\U000e0069\U000e006e\U000e0061\U000e0073\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" - FLAG_FOR_SMARTNO_OB_PAKI_SI_125 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0035\U000e007f" - FLAG_FOR_ALYTUS_MUNICIPALITY_LT_02 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0032\U000e007f" - FLAG_FOR_CAPITAL_DISTRICT_CO_DC = "\U0001f3f4\U000e0063\U000e006f\U000e0064\U000e0063\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - FLAG_FOR_LOWER_SAXONY_DE_NI = "\U0001f3f4\U000e0064\U000e0065\U000e006e\U000e0069\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - FLAG_FOR_SOUTH_CENTRAL_PROVINCE_MV_SC = "\U0001f3f4\U000e006d\U000e0076\U000e0073\U000e0063\U000e007f" - FLAG_FOR_SOUTHWEST_FINLAND_FI_19 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0039\U000e007f" + FLAG_FOR_HUNEDOARA_RO_HD = "\U0001f3f4\U000e0072\U000e006f\U000e0068\U000e0064\U000e007f" FLAG_FOR_VENTSPILS_MUNICIPALITY_LV_106 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0036\U000e007f" - FLAG_FOR_ISLA_DE_LA_JUVENTUD_CU_99 = "\U0001f3f4\U000e0063\U000e0075\U000e0039\U000e0039\U000e007f" + FLAG_FOR_SAITAMA_JP_11 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0031\U000e007f" + FLAG_FOR_CAPITAL_DISTRICT_CO_DC = "\U0001f3f4\U000e0063\U000e006f\U000e0064\U000e0063\U000e007f" + FLAG_FOR_SOUTH_CENTRAL_PROVINCE_MV_SC = "\U0001f3f4\U000e006d\U000e0076\U000e0073\U000e0063\U000e007f" + FLAG_FOR_CHARI_BAGUIRMI_TD_CB = "\U0001f3f4\U000e0074\U000e0064\U000e0063\U000e0062\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_ALYTUS_MUNICIPALITY_LT_02 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0032\U000e007f" + FLAG_FOR_HANOI_VN_HN = "\U0001f3f4\U000e0076\U000e006e\U000e0068\U000e006e\U000e007f" + FLAG_FOR_CRIMEA_UA_43 = "\U0001f3f4\U000e0075\U000e0061\U000e0034\U000e0033\U000e007f" + FLAG_FOR_SAINT_ANDREW_JM_02 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0032\U000e007f" + FLAG_FOR_SANMA_VU_SAM = "\U0001f3f4\U000e0076\U000e0075\U000e0073\U000e0061\U000e006d\U000e007f" FLAG_FOR_KHOJAVEND_AZ_XVD = "\U0001f3f4\U000e0061\U000e007a\U000e0078\U000e0076\U000e0064\U000e007f" - FLAG_FOR_BETHLEHEM_PS_BTH = "\U0001f3f4\U000e0070\U000e0073\U000e0062\U000e0074\U000e0068\U000e007f" - FLAG_FOR_HUNG_YEN_VN_66 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0036\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" - FLAG_FOR_SOUTH_KAZAKHSTAN_KZ_YUZ = "\U0001f3f4\U000e006b\U000e007a\U000e0079\U000e0075\U000e007a\U000e007f" - FLAG_FOR_KHAKASSIA_RU_KK = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e006b\U000e007f" - FLAG_FOR_SCHLESWIG_HOLSTEIN_DE_SH = "\U0001f3f4\U000e0064\U000e0065\U000e0073\U000e0068\U000e007f" - FLAG_FOR_TASMANIA_AU_TAS = "\U0001f3f4\U000e0061\U000e0075\U000e0074\U000e0061\U000e0073\U000e007f" + FLAG_FOR_LOWER_SAXONY_DE_NI = "\U0001f3f4\U000e0064\U000e0065\U000e006e\U000e0069\U000e007f" FLAG_FOR_SAN_MARCOS_GT_SM = "\U0001f3f4\U000e0067\U000e0074\U000e0073\U000e006d\U000e007f" - FLAG_FOR_GUSINJE_ME_22 = "\U0001f3f4\U000e006d\U000e0065\U000e0032\U000e0032\U000e007f" - FLAG_FOR_PHUKET_TH_83 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0033\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" - FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" - FLAG_FOR_BUENOS_AIRES_AR_C = "\U0001f3f4\U000e0061\U000e0072\U000e0063\U000e007f" - FLAG_FOR_NORTH_RHINE_WESTPHALIA_DE_NW = "\U0001f3f4\U000e0064\U000e0065\U000e006e\U000e0077\U000e007f" + FLAG_FOR_HUNG_YEN_VN_66 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0036\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_SINALOA_MX_SIN = "\U0001f3f4\U000e006d\U000e0078\U000e0073\U000e0069\U000e006e\U000e007f" + FLAG_FOR_MICHIGAN_US_MI = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0069\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_BURYAT_RU_BU = "\U0001f3f4\U000e0072\U000e0075\U000e0062\U000e0075\U000e007f" + FLAG_FOR_PODUNAVLJE_RS_10 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0030\U000e007f" + FLAG_FOR_CURACAO_NL_CW = "\U0001f3f4\U000e006e\U000e006c\U000e0063\U000e0077\U000e007f" + FLAG_FOR_GUANGDONG_CN_44 = "\U0001f3f4\U000e0063\U000e006e\U000e0034\U000e0034\U000e007f" + FLAG_FOR_VASTRA_GOTALAND_SE_O = "\U0001f3f4\U000e0073\U000e0065\U000e006f\U000e007f" + FLAG_FOR_XORAZM_UZ_XO = "\U0001f3f4\U000e0075\U000e007a\U000e0078\U000e006f\U000e007f" + FLAG_FOR_CENTRALE_TG_C = "\U0001f3f4\U000e0074\U000e0067\U000e0063\U000e007f" + FLAG_FOR_BUCHAREST_RO_B = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e007f" FLAG_FOR_SREDISCE_OB_DRAVI_SI_202 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0032\U000e007f" - FLAG_FOR_SANGRE_GRANDE_TT_SGE = "\U0001f3f4\U000e0074\U000e0074\U000e0073\U000e0067\U000e0065\U000e007f" - FLAG_FOR_NAIROBI_COUNTY_KE_30 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0030\U000e007f" - FLAG_FOR_BRETAGNE_FR_BRE = "\U0001f3f4\U000e0066\U000e0072\U000e0062\U000e0072\U000e0065\U000e007f" + FLAG_FOR_HODMEZOVASARHELY_HU_HV = "\U0001f3f4\U000e0068\U000e0075\U000e0068\U000e0076\U000e007f" + FLAG_FOR_BUENOS_AIRES_AR_C = "\U0001f3f4\U000e0061\U000e0072\U000e0063\U000e007f" + FLAG_FOR_KERALA_IN_KL = "\U0001f3f4\U000e0069\U000e006e\U000e006b\U000e006c\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_PHUKET_TH_83 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0033\U000e007f" + FLAG_FOR_SOUTH_KAZAKHSTAN_KZ_YUZ = "\U0001f3f4\U000e006b\U000e007a\U000e0079\U000e0075\U000e007a\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd" - FAMILY_WOMAN_MAN_BOY = "\U0001f469\u200d\U0001f468\u200d\U0001f466" - FLAG_FOR_MONAGAS_VE_N = "\U0001f3f4\U000e0076\U000e0065\U000e006e\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_OSH_KG_GO = "\U0001f3f4\U000e006b\U000e0067\U000e0067\U000e006f\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" + KISS_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" + FLAG_FOR_BETHLEHEM_PS_BTH = "\U0001f3f4\U000e0070\U000e0073\U000e0062\U000e0074\U000e0068\U000e007f" + FLAG_FOR_OZOLNIEKI_LV_069 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0039\U000e007f" + FLAG_FOR_BUZAU_RO_BZ = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e007a\U000e007f" + FLAG_FOR_OUAKA_CF_UK = "\U0001f3f4\U000e0063\U000e0066\U000e0075\U000e006b\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_BONG_LR_BG = "\U0001f3f4\U000e006c\U000e0072\U000e0062\U000e0067\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_LEBAP_TM_L = "\U0001f3f4\U000e0074\U000e006d\U000e006c\U000e007f" + FLAG_FOR_VORONEZH_RU_VOR = "\U0001f3f4\U000e0072\U000e0075\U000e0076\U000e006f\U000e0072\U000e007f" KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe" - FLAG_FOR_LAGUNES_CI_LG = "\U0001f3f4\U000e0063\U000e0069\U000e006c\U000e0067\U000e007f" - COUPLE_WITH_HEART_WOMAN_MAN_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" - FLAG_FOR_UNITY_SS_UY = "\U0001f3f4\U000e0073\U000e0073\U000e0075\U000e0079\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_SAN_JOSE_CR_SJ = "\U0001f3f4\U000e0063\U000e0072\U000e0073\U000e006a\U000e007f" + FLAG_FOR_KISUMU_KE_17 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0037\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_LAHIJ_YE_LA = "\U0001f3f4\U000e0079\U000e0065\U000e006c\U000e0061\U000e007f" + FLAG_FOR_RACHA_LECHKHUMI_AND_KVEMO_SVANETI_GE_RL = "\U0001f3f4\U000e0067\U000e0065\U000e0072\U000e006c\U000e007f" + FLAG_FOR_ULCINJ_ME_20 = "\U0001f3f4\U000e006d\U000e0065\U000e0032\U000e0030\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_OSH_KG_GO = "\U0001f3f4\U000e006b\U000e0067\U000e0067\U000e006f\U000e007f" + FLAG_FOR_AMAZONAS_VE_Z = "\U0001f3f4\U000e0076\U000e0065\U000e007a\U000e007f" + FLAG_FOR_NORTH_RHINE_WESTPHALIA_DE_NW = "\U0001f3f4\U000e0064\U000e0065\U000e006e\U000e0077\U000e007f" + FLAG_FOR_MONAGAS_VE_N = "\U0001f3f4\U000e0076\U000e0065\U000e006e\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" FLAG_FOR_CANTABRIA_ES_CB = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e0062\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe" FLAG_FOR_M_SILA_DZ_28 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0038\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" + FAMILY_WOMAN_MAN_BOY = "\U0001f469\u200d\U0001f468\u200d\U0001f466" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_EASTERN_HIGHLANDS_PG_EHG = "\U0001f3f4\U000e0070\U000e0067\U000e0065\U000e0068\U000e0067\U000e007f" + FLAG_FOR_OHRID_MK_58 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0038\U000e007f" + FLAG_FOR_SATU_MARE_RO_SM = "\U0001f3f4\U000e0072\U000e006f\U000e0073\U000e006d\U000e007f" + TAG_LATIN_CAPITAL_LETTER_Y = "\U000e0059" + FLAG_FOR_CHERNIHIVSHCHYNA_UA_74 = "\U0001f3f4\U000e0075\U000e0061\U000e0037\U000e0034\U000e007f" + TAG_DIGIT_TWO = "\U000e0032" + FLAG_FOR_RODRIGUES_MU_RO = "\U0001f3f4\U000e006d\U000e0075\U000e0072\U000e006f\U000e007f" + COUPLE_WITH_HEART_WOMAN_MAN_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff" FLAG_FOR_HAWKE_S_BAY_NZ_HKB = "\U0001f3f4\U000e006e\U000e007a\U000e0068\U000e006b\U000e0062\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_SANT_JULIA_DE_LORIA_AD_06 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0036\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_AN_GIANG_VN_44 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0034\U000e007f" + FLAG_FOR_UPPSALA_SE_C = "\U0001f3f4\U000e0073\U000e0065\U000e0063\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_UDMURT_RU_UD = "\U0001f3f4\U000e0072\U000e0075\U000e0075\U000e0064\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_ERMERA_TL_ER = "\U0001f3f4\U000e0074\U000e006c\U000e0065\U000e0072\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_PRIMORJE_GORSKI_KOTAR_HR_08 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0038\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_MUS_TR_49 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0039\U000e007f" FLAG_FOR_AD_DAKHILIYAH_OM_DA = "\U0001f3f4\U000e006f\U000e006d\U000e0064\U000e0061\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_ORIENTAL_MA_04 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0034\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_MAYO_KEBBI_OUEST_TD_MO = "\U0001f3f4\U000e0074\U000e0064\U000e006d\U000e006f\U000e007f" + FLAG_FOR_TBILISI_GE_TB = "\U0001f3f4\U000e0067\U000e0065\U000e0074\U000e0062\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb" - FLAG_FOR_ST_MARTIN_FR_MF = "\U0001f3f4\U000e0066\U000e0072\U000e006d\U000e0066\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_PHU_THO_VN_68 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0038\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_FREE_ZA_FS = "\U0001f3f4\U000e007a\U000e0061\U000e0066\U000e0073\U000e007f" FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_SUCRE_VE_R = "\U0001f3f4\U000e0076\U000e0065\U000e0072\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" FLAG_FOR_SALGOTARJAN_HU_ST = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e0074\U000e007f" FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_BALEARIC_ISLANDS_ES_IB = "\U0001f3f4\U000e0065\U000e0073\U000e0069\U000e0062\U000e007f" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f467\U0001f3fc" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f476\U0001f3fd" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_SUD_EST_HT_SE = "\U0001f3f4\U000e0068\U000e0074\U000e0073\U000e0065\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" - FLAG_FOR_CETINJE_ME_06 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0036\U000e007f" + FLAG_FOR_RAYONG_TH_21 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0031\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" FAMILY_MAN_MAN_BABY_GIRL = "\U0001f468\u200d\U0001f468\u200d\U0001f476\u200d\U0001f467" - FLAG_FOR_SAINT_PETERSBURG_RU_SPE = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0070\U000e0065\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f476\U0001f3ff" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_SUD_EST_HT_SE = "\U0001f3f4\U000e0068\U000e0074\U000e0073\U000e0065\U000e007f" + FLAG_FOR_CETINJE_ME_06 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0036\U000e007f" + KISS_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" + FLAG_FOR_OVERIJSSEL_NL_OV = "\U0001f3f4\U000e006e\U000e006c\U000e006f\U000e0076\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_SMARTNO_OB_PAKI_SI_125 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0032\U000e0035\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_CENTRAL_ANDROS_BS_CS = "\U0001f3f4\U000e0062\U000e0073\U000e0063\U000e0073\U000e007f" + FLAG_FOR_GAZA_PS_GZA = "\U0001f3f4\U000e0070\U000e0073\U000e0067\U000e007a\U000e0061\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_TASMANIA_AU_TAS = "\U0001f3f4\U000e0061\U000e0075\U000e0074\U000e0061\U000e0073\U000e007f" FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_GAMBELA_ET_GA = "\U0001f3f4\U000e0065\U000e0074\U000e0067\U000e0061\U000e007f" + FLAG_FOR_SAINT_PETERSBURG_RU_SPE = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0070\U000e0065\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_NORTH_OSSETIA_ALANIA_RU_SE = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0065\U000e007f" FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f476\U0001f3ff" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" - FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_GAZA_PS_GZA = "\U0001f3f4\U000e0070\U000e0073\U000e0067\U000e007a\U000e0061\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" - FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb" - FLAG_FOR_SAN_ANDRES_ANDAMP_PROVIDENCIA_CO_SAP = "\U0001f3f4\U000e0063\U000e006f\U000e0073\U000e0061\U000e0070\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" - FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" - FLAG_FOR_KEBBI_NG_KE = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e0065\U000e007f" + FLAG_FOR_GALICIA_ES_GA = "\U0001f3f4\U000e0065\U000e0073\U000e0067\U000e0061\U000e007f" + TAG_REVERSE_SOLIDUS = "\U000e005c" KISS_MAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" - FLAG_FOR_GASH_BARKA_ER_GB = "\U0001f3f4\U000e0065\U000e0072\U000e0067\U000e0062\U000e007f" - COUPLE_WITH_HEART_MAN_MAN_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe" - FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" - FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_WESTERN_AUSTRALIA_AU_WA = "\U0001f3f4\U000e0061\U000e0075\U000e0077\U000e0061\U000e007f" + FLAG_FOR_KILIMANJARO_TZ_09 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0039\U000e007f" + FLAG_FOR_GIRESUN_TR_28 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0038\U000e007f" + FLAG_FOR_KEBBI_NG_KE = "\U0001f3f4\U000e006e\U000e0067\U000e006b\U000e0065\U000e007f" + FLAG_FOR_MAROWIJNE_SR_MA = "\U0001f3f4\U000e0073\U000e0072\U000e006d\U000e0061\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" + FAMILY_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_SOUTHWEST_FINLAND_FI_19 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0039\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" + FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_BOKEO_LA_BK = "\U0001f3f4\U000e006c\U000e0061\U000e0062\U000e006b\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f476\U0001f3fd" + FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff" FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_CANARY_ISLANDS_ES_CN = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e006e\U000e007f" + FLAG_FOR_GASH_BARKA_ER_GB = "\U0001f3f4\U000e0065\U000e0072\U000e0067\U000e0062\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_ARUNACHAL_PRADESH_IN_AR = "\U0001f3f4\U000e0069\U000e006e\U000e0061\U000e0072\U000e007f" + COUPLE_WITH_HEART_MAN_MAN_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" FLAG_FOR_MINNESOTA_US_MN = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e006e\U000e007f" + FLAG_FOR_ROZAJE_ME_17 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0037\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_TANGA_TZ_25 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0035\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" FLAG_FOR_EL_OUED_DZ_39 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0039\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_OMNOGOVI_MN_053 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0035\U000e0033\U000e007f" FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_SOUTHERN_DENMARK_DK_83 = "\U0001f3f4\U000e0064\U000e006b\U000e0038\U000e0033\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_WEST_COAST_DIVISION_GM_W = "\U0001f3f4\U000e0067\U000e006d\U000e0077\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" FLAG_FOR_MALUKU_ISLANDS_ID_ML = "\U0001f3f4\U000e0069\U000e0064\U000e006d\U000e006c\U000e007f" - FLAG_FOR_KENTUCKY_US_KY = "\U0001f3f4\U000e0075\U000e0073\U000e006b\U000e0079\U000e007f" + FLAG_FOR_SVETI_JURIJ_V_SLOVENSKIH_GORICAH_SI_210 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0031\U000e0030\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_TANGA_TZ_25 = "\U0001f3f4\U000e0074\U000e007a\U000e0032\U000e0035\U000e007f" + FLAG_FOR_FAR_NORTH_CM_EN = "\U0001f3f4\U000e0063\U000e006d\U000e0065\U000e006e\U000e007f" + FLAG_FOR_SANNAT_MT_52 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0032\U000e007f" FLAG_FOR_INNER_MONGOLIA_CN_15 = "\U0001f3f4\U000e0063\U000e006e\U000e0031\U000e0035\U000e007f" - FLAG_FOR_AZAD_KASHMIR_PK_JK = "\U0001f3f4\U000e0070\U000e006b\U000e006a\U000e006b\U000e007f" + FLAG_FOR_ST_PIERRE_ANDAMP_MIQUELON_FR_PM = "\U0001f3f4\U000e0066\U000e0072\U000e0070\U000e006d\U000e007f" + NKO_SYMBOL_GBAKURUNEN = "\u07f7" + FLAG_FOR_RIVER_GEE_LR_RG = "\U0001f3f4\U000e006c\U000e0072\U000e0072\U000e0067\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_NAIROBI_COUNTY_KE_30 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0030\U000e007f" + FLAG_FOR_ORYOL_RU_ORL = "\U0001f3f4\U000e0072\U000e0075\U000e006f\U000e0072\U000e006c\U000e007f" FLAG_FOR_BEJA_PT_02 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0032\U000e007f" FLAG_FOR_SKOPJE_MK_85 = "\U0001f3f4\U000e006d\U000e006b\U000e0038\U000e0035\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" - FLAG_FOR_TAMIL_NADU_IN_TN = "\U0001f3f4\U000e0069\U000e006e\U000e0074\U000e006e\U000e007f" - FLAG_FOR_FAR_NORTH_CM_EN = "\U0001f3f4\U000e0063\U000e006d\U000e0065\U000e006e\U000e007f" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - FLAG_FOR_BOURGOGNE_FRANCHE_COMTE_FR_BFC = "\U0001f3f4\U000e0066\U000e0072\U000e0062\U000e0066\U000e0063\U000e007f" - FLAG_FOR_TRENTINO_SOUTH_TYROL_IT_32 = "\U0001f3f4\U000e0069\U000e0074\U000e0033\U000e0032\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" - TAG_LATIN_CAPITAL_LETTER_T = "\U000e0054" FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_RIO_DE_JANEIRO_BR_RJ = "\U0001f3f4\U000e0062\U000e0072\U000e0072\U000e006a\U000e007f" - FLAG_FOR_EAST_NEW_BRITAIN_PG_EBR = "\U0001f3f4\U000e0070\U000e0067\U000e0065\U000e0062\U000e0072\U000e007f" - FLAG_FOR_SARDINIA_IT_88 = "\U0001f3f4\U000e0069\U000e0074\U000e0038\U000e0038\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" - FLAG_FOR_VALPARAISO_CL_VS = "\U0001f3f4\U000e0063\U000e006c\U000e0076\U000e0073\U000e007f" - FLAG_FOR_GORNO_BADAKHSHAN_TJ_GB = "\U0001f3f4\U000e0074\U000e006a\U000e0067\U000e0062\U000e007f" - FLAG_FOR_SELANGOR_MY_10 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0030\U000e007f" - FAMILY_MAN_WOMAN_BABY = "\U0001f468\u200d\U0001f469\u200d\U0001f476" - FLAG_FOR_TENNESSEE_US_TN = "\U0001f3f4\U000e0075\U000e0073\U000e0074\U000e006e\U000e007f" - FLAG_FOR_FUNAFUTI_TV_FUN = "\U0001f3f4\U000e0074\U000e0076\U000e0066\U000e0075\U000e006e\U000e007f" - FLAG_FOR_HEREDIA_CR_H = "\U0001f3f4\U000e0063\U000e0072\U000e0068\U000e007f" - FLAG_FOR_AIGA_I_LE_TAI_WS_AL = "\U0001f3f4\U000e0077\U000e0073\U000e0061\U000e006c\U000e007f" + FLAG_FOR_MOUNT_LEBANON_LB_JL = "\U0001f3f4\U000e006c\U000e0062\U000e006a\U000e006c\U000e007f" + FLAG_FOR_PERM_KRAI_RU_PER = "\U0001f3f4\U000e0072\U000e0075\U000e0070\U000e0065\U000e0072\U000e007f" + FAMILY_WOMAN_WOMAN_BABY_BABY = "\U0001f469\u200d\U0001f469\u200d\U0001f476\u200d\U0001f476" + KISS_MAN_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_ISLA_DE_LA_JUVENTUD_CU_99 = "\U0001f3f4\U000e0063\U000e0075\U000e0039\U000e0039\U000e007f" + UNMARRIED_PARTNERSHIP_SYMBOL = "\u26af" + FLAG_FOR_LAGUNES_CI_LG = "\U0001f3f4\U000e0063\U000e0069\U000e006c\U000e0067\U000e007f" + FLAG_FOR_WESTERN_AUSTRALIA_AU_WA = "\U0001f3f4\U000e0061\U000e0075\U000e0077\U000e0061\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd" FAMILY_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_BADEN_WURTTEMBERG_DE_BW = "\U0001f3f4\U000e0064\U000e0065\U000e0062\U000e0077\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_HEREDIA_CR_H = "\U0001f3f4\U000e0063\U000e0072\U000e0068\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_AIGA_I_LE_TAI_WS_AL = "\U0001f3f4\U000e0077\U000e0073\U000e0061\U000e006c\U000e007f" + KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" FLAG_FOR_BAVARIA_DE_BY = "\U0001f3f4\U000e0064\U000e0065\U000e0062\U000e0079\U000e007f" - FLAG_FOR_CARABOBO_VE_G = "\U0001f3f4\U000e0076\U000e0065\U000e0067\U000e007f" - FLAG_FOR_NAKURU_KE_31 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0031\U000e007f" - TAG_LATIN_CAPITAL_LETTER_K = "\U000e004b" + FLAG_FOR_VALPARAISO_CL_VS = "\U0001f3f4\U000e0063\U000e006c\U000e0076\U000e0073\U000e007f" + WOMAN_IN_BUSINESS_SUIT_LEVITATING_MEDIUM_LIGHT_SKIN_TONE = "\U0001f574\U0001f3fc\u200d\u2640\ufe0f" + FLAG_FOR_BAGHDAD_IQ_BG = "\U0001f3f4\U000e0069\U000e0071\U000e0062\U000e0067\U000e007f" + FLAG_FOR_TENNESSEE_US_TN = "\U0001f3f4\U000e0075\U000e0073\U000e0074\U000e006e\U000e007f" + FAMILY_MAN_WOMAN_BABY = "\U0001f468\u200d\U0001f469\u200d\U0001f476" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_LA_PAZ_SV_PA = "\U0001f3f4\U000e0073\U000e0076\U000e0070\U000e0061\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f476\U0001f3fd" FLAG_FOR_RABAT_MT_46 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0036\U000e007f" + FLAG_FOR_IMO_NG_IM = "\U0001f3f4\U000e006e\U000e0067\U000e0069\U000e006d\U000e007f" + FLAG_FOR_WELLINGTON_NZ_WGN = "\U0001f3f4\U000e006e\U000e007a\U000e0077\U000e0067\U000e006e\U000e007f" FAMILY_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f476\U0001f3fd" - FLAG_FOR_MARITIME_TG_M = "\U0001f3f4\U000e0074\U000e0067\U000e006d\U000e007f" - FLAG_FOR_RADENCI_SI_100 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0030\U000e007f" + FLAG_FOR_ZABLJAK_ME_21 = "\U0001f3f4\U000e006d\U000e0065\U000e0032\U000e0031\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff" FLAG_FOR_BORNO_NG_BO = "\U0001f3f4\U000e006e\U000e0067\U000e0062\U000e006f\U000e007f" - FLAG_FOR_AL_WUSTA_OM_WU = "\U0001f3f4\U000e006f\U000e006d\U000e0077\U000e0075\U000e007f" - FLAG_FOR_KUALA_LUMPUR_MY_14 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0034\U000e007f" - FLAG_FOR_USTECKY_KRAJ_CZ_42 = "\U0001f3f4\U000e0063\U000e007a\U000e0034\U000e0032\U000e007f" - WOMAN_IN_BUSINESS_SUIT_LEVITATING_MEDIUM_DARK_SKIN_TONE = "\U0001f574\U0001f3fe\u200d\u2640\ufe0f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" - TAG_LEFT_PARENTHESIS = "\U000e0028" - FLAG_FOR_DAGESTAN_RU_DA = "\U0001f3f4\U000e0072\U000e0075\U000e0064\U000e0061\U000e007f" - FLAG_FOR_TRANSNISTRIA_MD_SN = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e006e\U000e007f" + FLAG_FOR_NAKURU_KE_31 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0031\U000e007f" + FLAG_FOR_CARABOBO_VE_G = "\U0001f3f4\U000e0076\U000e0065\U000e0067\U000e007f" FLAG_FOR_TEHRAN_IR_07 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0037\U000e007f" - FLAG_FOR_KAMPONG_CHHNANG_KH_4 = "\U0001f3f4\U000e006b\U000e0068\U000e0034\U000e007f" - FLAG_FOR_AUVERGNE_RHONE_ALPES_FR_ARA = "\U0001f3f4\U000e0066\U000e0072\U000e0061\U000e0072\U000e0061\U000e007f" - FLAG_FOR_AYACUCHO_PE_AYA = "\U0001f3f4\U000e0070\U000e0065\U000e0061\U000e0079\U000e0061\U000e007f" - FLAG_FOR_SAINT_PHILIP_AG_08 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0038\U000e007f" - FLAG_FOR_KIEV_UA_30 = "\U0001f3f4\U000e0075\U000e0061\U000e0033\U000e0030\U000e007f" - FLAG_FOR_MDINA_MT_29 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0039\U000e007f" - FLAG_FOR_LIMBURG_NL_LI = "\U0001f3f4\U000e006e\U000e006c\U000e006c\U000e0069\U000e007f" - FLAG_FOR_NORTHERN_DENMARK_DK_81 = "\U0001f3f4\U000e0064\U000e006b\U000e0038\U000e0031\U000e007f" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_BADEN_WURTTEMBERG_DE_BW = "\U0001f3f4\U000e0064\U000e0065\U000e0062\U000e0077\U000e007f" + FLAG_FOR_YANGON_MM_06 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0036\U000e007f" + TAG_LEFT_PARENTHESIS = "\U000e0028" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_USTECKY_KRAJ_CZ_42 = "\U0001f3f4\U000e0063\U000e007a\U000e0034\U000e0032\U000e007f" + FLAG_FOR_KUALA_LUMPUR_MY_14 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0034\U000e007f" + FLAG_FOR_AL_WUSTA_OM_WU = "\U0001f3f4\U000e006f\U000e006d\U000e0077\U000e0075\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_SOUTH_JEOLLA_KR_46 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0036\U000e007f" + FLAG_FOR_KHUZESTAN_IR_10 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0030\U000e007f" FLAG_FOR_NANTOU_TW_NAN = "\U0001f3f4\U000e0074\U000e0077\U000e006e\U000e0061\U000e006e\U000e007f" - FLAG_FOR_NORTH_CAROLINA_US_NC = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0063\U000e007f" - FLAG_FOR_EASTERN_LK_5 = "\U0001f3f4\U000e006c\U000e006b\U000e0035\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_DUSHANBE_TJ_DU = "\U0001f3f4\U000e0074\U000e006a\U000e0064\U000e0075\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_LIMBURG_NL_LI = "\U0001f3f4\U000e006e\U000e006c\U000e006c\U000e0069\U000e007f" + FLAG_FOR_AYACUCHO_PE_AYA = "\U0001f3f4\U000e0070\U000e0065\U000e0061\U000e0079\U000e0061\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_SAINT_PHILIP_AG_08 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0038\U000e007f" + FLAG_FOR_VALKA_LV_101 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0031\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_MDINA_MT_29 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0039\U000e007f" + FLAG_FOR_NORTHERN_DENMARK_DK_81 = "\U0001f3f4\U000e0064\U000e006b\U000e0038\U000e0031\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_GUAM_US_GU = "\U0001f3f4\U000e0075\U000e0073\U000e0067\U000e0075\U000e007f" + FLAG_FOR_SELANGOR_MY_10 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0030\U000e007f" + FLAG_FOR_PRINCE_EDWARD_ISLAND_CA_PE = "\U0001f3f4\U000e0063\U000e0061\U000e0070\U000e0065\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_GORNO_BADAKHSHAN_TJ_GB = "\U0001f3f4\U000e0074\U000e006a\U000e0067\U000e0062\U000e007f" FLAG_FOR_OGUN_NG_OG = "\U0001f3f4\U000e006e\U000e0067\U000e006f\U000e0067\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_EASTERN_LK_5 = "\U0001f3f4\U000e006c\U000e006b\U000e0035\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe" FLAG_FOR_SANTA_ROSA_GT_SR = "\U0001f3f4\U000e0067\U000e0074\U000e0073\U000e0072\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" FLAG_FOR_JAFARA_LY_JI = "\U0001f3f4\U000e006c\U000e0079\U000e006a\U000e0069\U000e007f" + FLAG_FOR_BASILICATA_IT_77 = "\U0001f3f4\U000e0069\U000e0074\U000e0037\U000e0037\U000e007f" + FLAG_FOR_GRONINGEN_NL_GR = "\U0001f3f4\U000e006e\U000e006c\U000e0067\U000e0072\U000e007f" FLAG_FOR_MATO_GROSSO_DO_SUL_BR_MS = "\U0001f3f4\U000e0062\U000e0072\U000e006d\U000e0073\U000e007f" - FLAG_FOR_HARYANA_IN_HR = "\U0001f3f4\U000e0069\U000e006e\U000e0068\U000e0072\U000e007f" + FLAG_FOR_KANDAL_KH_8 = "\U0001f3f4\U000e006b\U000e0068\U000e0038\U000e007f" FLAG_FOR_NORTH_WEST_ZA_NW = "\U0001f3f4\U000e007a\U000e0061\U000e006e\U000e0077\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" - MERCURY = "\u263f\ufe0f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_CONNECTICUT_US_CT = "\U0001f3f4\U000e0075\U000e0073\U000e0063\U000e0074\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" FLAG_FOR_HEBEI_CN_13 = "\U0001f3f4\U000e0063\U000e006e\U000e0031\U000e0033\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb" FLAG_FOR_FA_ASALELEAGA_WS_FA = "\U0001f3f4\U000e0077\U000e0073\U000e0066\U000e0061\U000e007f" - FLAG_FOR_SAN_VICENTE_SV_SV = "\U0001f3f4\U000e0073\U000e0076\U000e0073\U000e0076\U000e007f" - FLAG_FOR_BRASLOVCE_SI_151 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0031\U000e007f" FLAG_FOR_ALBORZ_IR_32 = "\U0001f3f4\U000e0069\U000e0072\U000e0033\U000e0032\U000e007f" + FLAG_FOR_BRASLOVCE_SI_151 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0031\U000e007f" + FLAG_FOR_HARYANA_IN_HR = "\U0001f3f4\U000e0069\U000e006e\U000e0068\U000e0072\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" + FLAG_FOR_SAN_VICENTE_SV_SV = "\U0001f3f4\U000e0073\U000e0076\U000e0073\U000e0076\U000e007f" + FLAG_FOR_MATO_GROSSO_BR_MT = "\U0001f3f4\U000e0062\U000e0072\U000e006d\U000e0074\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb" FLAG_FOR_PELOPONNESE_GR_J = "\U0001f3f4\U000e0067\U000e0072\U000e006a\U000e007f" - TAG_LATIN_CAPITAL_LETTER_R = "\U000e0052" - FLAG_FOR_NEWFOUNDLAND_AND_LABRADOR_CA_NL = "\U0001f3f4\U000e0063\U000e0061\U000e006e\U000e006c\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc" - FLAG_FOR_ST_JULIAN_S_MT_48 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0038\U000e007f" FLAG_FOR_ADAMAWA_NG_AD = "\U0001f3f4\U000e006e\U000e0067\U000e0061\U000e0064\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" FLAG_FOR_KWAZULU_NATAL_ZA_NL = "\U0001f3f4\U000e007a\U000e0061\U000e006e\U000e006c\U000e007f" FLAG_FOR_SINT_MAARTEN_NL_SX = "\U0001f3f4\U000e006e\U000e006c\U000e0073\U000e0078\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_ANDHRA_PRADESH_IN_AP = "\U0001f3f4\U000e0069\U000e006e\U000e0061\U000e0070\U000e007f" - FLAG_FOR_SAO_TOME_ST_S = "\U0001f3f4\U000e0073\U000e0074\U000e0073\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" - FLAG_FOR_AUCE_LV_010 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0030\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" + TAG_SPACE = "\U000e0020" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" FLAG_FOR_CORDILLERA_ADMINISTRATIVE_PH_15 = "\U0001f3f4\U000e0070\U000e0068\U000e0031\U000e0035\U000e007f" - FLAG_FOR_FUKUI_JP_18 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0038\U000e007f" - FLAG_FOR_SOUSS_MASSA_DRAA_MA_13 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0033\U000e007f" - FLAG_FOR_KAKHETI_GE_KA = "\U0001f3f4\U000e0067\U000e0065\U000e006b\U000e0061\U000e007f" + FLAG_FOR_AUCE_LV_010 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0030\U000e007f" + FLAG_FOR_ROCHA_UY_RO = "\U0001f3f4\U000e0075\U000e0079\U000e0072\U000e006f\U000e007f" + FLAG_FOR_FRIESLAND_NL_FR = "\U0001f3f4\U000e006e\U000e006c\U000e0066\U000e0072\U000e007f" + FLAG_FOR_AUVERGNE_RHONE_ALPES_FR_ARA = "\U0001f3f4\U000e0066\U000e0072\U000e0061\U000e0072\U000e0061\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_NOHIYAHOI_TOBEI_JUMHURI_TJ_RA = "\U0001f3f4\U000e0074\U000e006a\U000e0072\U000e0061\U000e007f" + APPLE_LOGO = "\uf8ff" + FLAG_FOR_SAO_TOME_ST_S = "\U0001f3f4\U000e0073\U000e0074\U000e0073\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_ANDHRA_PRADESH_IN_AP = "\U0001f3f4\U000e0069\U000e006e\U000e0061\U000e0070\U000e007f" FLAG_FOR_INCUKALNS_LV_037 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0037\U000e007f" - FLAG_FOR_TEXAS_US_TX = "\U0001f3f4\U000e0075\U000e0073\U000e0074\U000e0078\U000e007f" + FLAG_FOR_KAKHETI_GE_KA = "\U0001f3f4\U000e0067\U000e0065\U000e006b\U000e0061\U000e007f" + FLAG_FOR_BOURGOGNE_FRANCHE_COMTE_FR_BFC = "\U0001f3f4\U000e0066\U000e0072\U000e0062\U000e0066\U000e0063\U000e007f" + KISS_WOMAN_MEDIUM_SKIN_TONE_MAN = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" + FLAG_FOR_ENNEDI_OUEST_TD_EO = "\U0001f3f4\U000e0074\U000e0064\U000e0065\U000e006f\U000e007f" + FLAG_FOR_SOUSS_MASSA_DRAA_MA_13 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0033\U000e007f" + FLAG_FOR_USAK_TR_64 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0034\U000e007f" FLAG_FOR_JEJU_KR_49 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0039\U000e007f" + FLAG_FOR_CHHATTISGARH_IN_CT = "\U0001f3f4\U000e0069\U000e006e\U000e0063\U000e0074\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" + FAMILY_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_TLEMCEN_DZ_13 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0033\U000e007f" FAMILY_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" FLAG_FOR_QUINTANA_ROO_MX_ROO = "\U0001f3f4\U000e006d\U000e0078\U000e0072\U000e006f\U000e006f\U000e007f" + FLAG_FOR_WESTERN_IS_3 = "\U0001f3f4\U000e0069\U000e0073\U000e0033\U000e007f" FLAG_FOR_BANAADIR_SO_BN = "\U0001f3f4\U000e0073\U000e006f\U000e0062\U000e006e\U000e007f" - WOMAN_IN_BUSINESS_SUIT_LEVITATING_LIGHT_SKIN_TONE = "\U0001f574\U0001f3fb\u200d\u2640\ufe0f" - FLAG_FOR_GYOR_MOSON_SOPRON_HU_GS = "\U0001f3f4\U000e0068\U000e0075\U000e0067\U000e0073\U000e007f" FLAG_FOR_RHINELAND_PALATINATE_DE_RP = "\U0001f3f4\U000e0064\U000e0065\U000e0072\U000e0070\U000e007f" + FLAG_FOR_MARITIME_TG_M = "\U0001f3f4\U000e0074\U000e0067\U000e006d\U000e007f" + FLAG_FOR_GYOR_MOSON_SOPRON_HU_GS = "\U0001f3f4\U000e0068\U000e0075\U000e0067\U000e0073\U000e007f" + FLAG_FOR_BEN_AROUS_TN_13 = "\U0001f3f4\U000e0074\U000e006e\U000e0031\U000e0033\U000e007f" + WOMAN_IN_BUSINESS_SUIT_LEVITATING_LIGHT_SKIN_TONE = "\U0001f574\U0001f3fb\u200d\u2640\ufe0f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_DADRA_AND_NAGAR_HAVELI_IN_DN = "\U0001f3f4\U000e0069\U000e006e\U000e0064\U000e006e\U000e007f" - FLAG_FOR_KHAMMOUANE_LA_KH = "\U0001f3f4\U000e006c\U000e0061\U000e006b\U000e0068\U000e007f" - FLAG_FOR_BERN_CH_BE = "\U0001f3f4\U000e0063\U000e0068\U000e0062\U000e0065\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - COUPLE_WITH_HEART_WOMAN_MAN_MEDIUM_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - TAG_GREATER_THAN_SIGN = "\U000e003e" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_PUERTO_RICO_US_PR = "\U0001f3f4\U000e0075\U000e0073\U000e0070\U000e0072\U000e007f" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" - FLAG_FOR_VARGAS_VE_X = "\U0001f3f4\U000e0076\U000e0065\U000e0078\U000e007f" - FLAG_FOR_SKANE_SE_M = "\U0001f3f4\U000e0073\U000e0065\U000e006d\U000e007f" - FLAG_FOR_THURINGIA_DE_TH = "\U0001f3f4\U000e0064\U000e0065\U000e0074\U000e0068\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" - BEATS_1_LOGO = "\uf79c" - FLAG_FOR_RAMALLAH_AND_AL_BIREH_PS_RBH = "\U0001f3f4\U000e0070\U000e0073\U000e0072\U000e0062\U000e0068\U000e007f" - FLAG_FOR_ANTOFAGASTA_CL_AN = "\U0001f3f4\U000e0063\U000e006c\U000e0061\U000e006e\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_ABKHAZIA_GE_AB = "\U0001f3f4\U000e0067\U000e0065\U000e0061\U000e0062\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_ALBERTA_CA_AB = "\U0001f3f4\U000e0063\U000e0061\U000e0061\U000e0062\U000e007f" - FLAG_FOR_CAT_ISLAND_BS_CI = "\U0001f3f4\U000e0062\U000e0073\U000e0063\U000e0069\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" - KISS_MAN_MEDIUM_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - FAMILY_WOMAN_WOMAN_BOY_GIRL = "\U0001f469\u200d\U0001f469\u200d\U0001f466\u200d\U0001f467" - FLAG_FOR_TAIPEI_TW_TPE = "\U0001f3f4\U000e0074\U000e0077\U000e0074\U000e0070\U000e0065\U000e007f" - FAMILY_MAN_BABY_BABY = "\U0001f468\u200d\U0001f476\u200d\U0001f476" - FAMILY_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_FUKUI_JP_18 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0038\U000e007f" + FLAG_FOR_EAST_NEW_BRITAIN_PG_EBR = "\U0001f3f4\U000e0070\U000e0067\U000e0065\U000e0062\U000e0072\U000e007f" VARIATION_SELECTOR_16 = "\ufe0f" - FLAG_FOR_JAMMU_AND_KASHMIR_IN_JK = "\U0001f3f4\U000e0069\U000e006e\U000e006a\U000e006b\U000e007f" - FLAG_FOR_LAGHOUAT_DZ_03 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0033\U000e007f" + FLAG_FOR_CENTRAL_EQUATORIA_SS_EC = "\U0001f3f4\U000e0073\U000e0073\U000e0065\U000e0063\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_KHAMMOUANE_LA_KH = "\U0001f3f4\U000e006c\U000e0061\U000e006b\U000e0068\U000e007f" + FLAG_FOR_DADRA_AND_NAGAR_HAVELI_IN_DN = "\U0001f3f4\U000e0069\U000e006e\U000e0064\U000e006e\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_SOUTHERN_RED_SEA_ER_DK = "\U0001f3f4\U000e0065\U000e0072\U000e0064\U000e006b\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_VOJVODINA_RS_VO = "\U0001f3f4\U000e0072\U000e0073\U000e0076\U000e006f\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_ATLANTICO_SUR_NI_AS = "\U0001f3f4\U000e006e\U000e0069\U000e0061\U000e0073\U000e007f" + COUPLE_WITH_HEART_WOMAN_MAN_MEDIUM_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" - FLAG_FOR_JILIN_CN_22 = "\U0001f3f4\U000e0063\U000e006e\U000e0032\U000e0032\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_KERMAN_IR_15 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0035\U000e007f" + KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_KALMAR_SE_H = "\U0001f3f4\U000e0073\U000e0065\U000e0068\U000e007f" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FLAG_FOR_ALMATY_REGION_KZ_ALM = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e006c\U000e006d\U000e007f" + FLAG_FOR_ZLINSKY_KRAJ_CZ_72 = "\U0001f3f4\U000e0063\U000e007a\U000e0037\U000e0032\U000e007f" + FLAG_FOR_SANGRE_GRANDE_TT_SGE = "\U0001f3f4\U000e0074\U000e0074\U000e0073\U000e0067\U000e0065\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_PUERTO_RICO_US_PR = "\U0001f3f4\U000e0075\U000e0073\U000e0070\U000e0072\U000e007f" + FLAG_FOR_ALO_WF_AL = "\U0001f3f4\U000e0077\U000e0066\U000e0061\U000e006c\U000e007f" + FLAG_FOR_WASHINGTON_DC_US_DC = "\U0001f3f4\U000e0075\U000e0073\U000e0064\U000e0063\U000e007f" + FLAG_FOR_LA_REUNION_FR_LRE = "\U0001f3f4\U000e0066\U000e0072\U000e006c\U000e0072\U000e0065\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_GRAD_SI_158 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0038\U000e007f" + FLAG_FOR_TEXAS_US_TX = "\U0001f3f4\U000e0075\U000e0073\U000e0074\U000e0078\U000e007f" + MAN_ZOMBIE_MEDIUM_DARK_SKIN_TONE = "\U0001f9df\U0001f3fe\u200d\u2642\ufe0f" + FLAG_FOR_PARAIBA_BR_PB = "\U0001f3f4\U000e0062\U000e0072\U000e0070\U000e0062\U000e007f" + FLAG_FOR_VARGAS_VE_X = "\U0001f3f4\U000e0076\U000e0065\U000e0078\U000e007f" + TAG_LATIN_CAPITAL_LETTER_H = "\U000e0048" + FLAG_FOR_BERN_CH_BE = "\U0001f3f4\U000e0063\U000e0068\U000e0062\U000e0065\U000e007f" + FLAG_FOR_MARA_TZ_13 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0033\U000e007f" + FLAG_FOR_THURINGIA_DE_TH = "\U0001f3f4\U000e0064\U000e0065\U000e0074\U000e0068\U000e007f" + COUPLE_WITH_HEART_WOMAN_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" + TAG_LATIN_CAPITAL_LETTER_R = "\U000e0052" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_GOTLAND_SE_I = "\U0001f3f4\U000e0073\U000e0065\U000e0069\U000e007f" + FLAG_FOR_ANDAMAN_AND_NICOBAR_ISLANDS_IN_AN = "\U0001f3f4\U000e0069\U000e006e\U000e0061\U000e006e\U000e007f" + FLAG_FOR_SAN_ANDRES_ANDAMP_PROVIDENCIA_CO_SAP = "\U0001f3f4\U000e0063\U000e006f\U000e0073\U000e0061\U000e0070\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_SOUTHERN_DENMARK_DK_83 = "\U0001f3f4\U000e0064\U000e006b\U000e0038\U000e0033\U000e007f" + FLAG_FOR_AMUR_RU_AMU = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e006d\U000e0075\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_NAGASAKI_JP_42 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0032\U000e007f" + FLAG_FOR_NEWFOUNDLAND_AND_LABRADOR_CA_NL = "\U0001f3f4\U000e0063\U000e0061\U000e006e\U000e006c\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" + TAG_GREATER_THAN_SIGN = "\U000e003e" + FLAG_FOR_RAMALLAH_AND_AL_BIREH_PS_RBH = "\U0001f3f4\U000e0070\U000e0073\U000e0072\U000e0062\U000e0068\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" + KISS_MAN_MAN_MEDIUM_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + FLAG_FOR_ANTOFAGASTA_CL_AN = "\U0001f3f4\U000e0063\U000e006c\U000e0061\U000e006e\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + KISS_MAN_MEDIUM_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" + FLAG_FOR_CHUVASH_RU_CU = "\U0001f3f4\U000e0072\U000e0075\U000e0063\U000e0075\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" + FAMILY_WOMAN_WOMAN_BOY_GIRL = "\U0001f469\u200d\U0001f469\u200d\U0001f466\u200d\U0001f467" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_ULSTER_IE_U = "\U0001f3f4\U000e0069\U000e0065\U000e0075\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_NABEUL_TN_21 = "\U0001f3f4\U000e0074\U000e006e\U000e0032\U000e0031\U000e007f" + FAMILY_MAN_BABY_BABY = "\U0001f468\u200d\U0001f476\u200d\U0001f476" + FLAG_FOR_TAIPEI_TW_TPE = "\U0001f3f4\U000e0074\U000e0077\U000e0074\U000e0070\U000e0065\U000e007f" + COUPLE_WITH_HEART_MAN_WOMAN_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_ZEELAND_NL_ZE = "\U0001f3f4\U000e006e\U000e006c\U000e007a\U000e0065\U000e007f" + FLAG_FOR_JAVA_ID_JW = "\U0001f3f4\U000e0069\U000e0064\U000e006a\U000e0077\U000e007f" + FLAG_FOR_AZAD_KASHMIR_PK_JK = "\U0001f3f4\U000e0070\U000e006b\U000e006a\U000e006b\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_UNITY_SS_UY = "\U0001f3f4\U000e0073\U000e0073\U000e0075\U000e0079\U000e007f" + FLAG_FOR_CENTRAL_LUZON_PH_03 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0033\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_SOUTHERN_LK_3 = "\U0001f3f4\U000e006c\U000e006b\U000e0033\U000e007f" + FLAG_FOR_SAO_PAULO_BR_SP = "\U0001f3f4\U000e0062\U000e0072\U000e0073\U000e0070\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_JAMMU_AND_KASHMIR_IN_JK = "\U0001f3f4\U000e0069\U000e006e\U000e006a\U000e006b\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_CAT_ISLAND_BS_CI = "\U0001f3f4\U000e0062\U000e0073\U000e0063\U000e0069\U000e007f" + FLAG_FOR_LAGHOUAT_DZ_03 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0033\U000e007f" FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" - SHIBUYA = "\ue50a" - KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" - FLAG_FOR_VELIKA_POLANA_SI_187 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0037\U000e007f" - FLAG_FOR_BAS_UELE_CD_BU = "\U0001f3f4\U000e0063\U000e0064\U000e0062\U000e0075\U000e007f" - RINGING_BELL = "\U0001f56d" - FLAG_FOR_CENTRAL_GREECE_GR_H = "\U0001f3f4\U000e0067\U000e0072\U000e0068\U000e007f" - FLAG_FOR_ORDINO_AD_05 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0035\U000e007f" - WHITE_SUN_WITH_RAYS = "\u263c" - BLACK_LEFT_POINTING_BACKHAND_INDEX = "\U0001f59c" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" - FLAG_FOR_BAMYAN_AF_BAM = "\U0001f3f4\U000e0061\U000e0066\U000e0062\U000e0061\U000e006d\U000e007f" + FLAG_FOR_MARJ_LY_MJ = "\U0001f3f4\U000e006c\U000e0079\U000e006d\U000e006a\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + FLAG_FOR_TRUJILLO_VE_T = "\U0001f3f4\U000e0076\U000e0065\U000e0074\U000e007f" + WOMAN_WITH_HEADSCARF_MEDIUM_DARK_SKIN_TONE = "\U0001f9d5\U0001f3fe\u200d\u2640\ufe0f" + FLAG_FOR_SAARLAND_DE_SL = "\U0001f3f4\U000e0064\U000e0065\U000e0073\U000e006c\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_TRENTINO_SOUTH_TYROL_IT_32 = "\U0001f3f4\U000e0069\U000e0074\U000e0033\U000e0032\U000e007f" + FLAG_FOR_KHARTOUM_SD_KH = "\U0001f3f4\U000e0073\U000e0064\U000e006b\U000e0068\U000e007f" + TAG_EXCLAMATION_MARK = "\U000e0021" + FAMILY_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_TRANSNISTRIA_MD_SN = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e006e\U000e007f" + FLAG_FOR_PINAR_DEL_RIO_CU_01 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0031\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" + FAMILY_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_KEDAH_MY_02 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0032\U000e007f" + FLAG_FOR_JILIN_CN_22 = "\U0001f3f4\U000e0063\U000e006e\U000e0032\U000e0032\U000e007f" + ZERO_WIDTH_JOINER = "\u200d" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_MANUFAHI_TL_MF = "\U0001f3f4\U000e0074\U000e006c\U000e006d\U000e0066\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_STUDENICANI_MK_74 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0034\U000e007f" + FLAG_FOR_ILUKSTE_LV_036 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0036\U000e007f" + FLAG_FOR_MAZANDARAN_IR_21 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0031\U000e007f" + FLAG_FOR_VISEU_PT_18 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0038\U000e007f" + FLAG_FOR_ESTUAIRE_GA_1 = "\U0001f3f4\U000e0067\U000e0061\U000e0031\U000e007f" + FLAG_FOR_GANSU_CN_62 = "\U0001f3f4\U000e0063\U000e006e\U000e0036\U000e0032\U000e007f" + FLAG_FOR_SOUTH_KHORASAN_IR_29 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0039\U000e007f" + FLAG_FOR_DIOURBEL_SN_DB = "\U0001f3f4\U000e0073\U000e006e\U000e0064\U000e0062\U000e007f" + FLAG_FOR_MORELOS_MX_MOR = "\U0001f3f4\U000e006d\U000e0078\U000e006d\U000e006f\U000e0072\U000e007f" + FLAG_FOR_DELAWARE_US_DE = "\U0001f3f4\U000e0075\U000e0073\U000e0064\U000e0065\U000e007f" + FLAG_FOR_SIGAVE_WF_SG = "\U0001f3f4\U000e0077\U000e0066\U000e0073\U000e0067\U000e007f" FLAG_FOR_RIVERA_UY_RV = "\U0001f3f4\U000e0075\U000e0079\U000e0072\U000e0076\U000e007f" FLAG_FOR_TUNGURAHUA_EC_T = "\U0001f3f4\U000e0065\U000e0063\U000e0074\U000e007f" - TAG_LATIN_CAPITAL_LETTER_V = "\U000e0056" - WHITE_RIGHT_POINTING_INDEX = "\u261e" - LIGHTNING = "\u2607" - FLAG_FOR_ARICA_Y_PARINACOTA_CL_AP = "\U0001f3f4\U000e0063\U000e006c\U000e0061\U000e0070\U000e007f" - LEFT_WRITING_HAND = "\U0001f58e" - FLAG_FOR_LONG_ISLAND_BS_LI = "\U0001f3f4\U000e0062\U000e0073\U000e006c\U000e0069\U000e007f" - FLAG_FOR_ENCAMP_AD_03 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0033\U000e007f" - UPPER_RIGHT_PENCIL = "\u2710" - FLAG_FOR_ESTUAIRE_GA_1 = "\U0001f3f4\U000e0067\U000e0061\U000e0031\U000e007f" - WHITE_SUN = "\U0001f323" - FLAG_FOR_CIBITOKE_BI_CI = "\U0001f3f4\U000e0062\U000e0069\U000e0063\U000e0069\U000e007f" - FLAG_FOR_ADJARA_GE_AJ = "\U0001f3f4\U000e0067\U000e0065\U000e0061\U000e006a\U000e007f" - FLAG_FOR_UPPER_SOUTH_PROVINCE_MV_US = "\U0001f3f4\U000e006d\U000e0076\U000e0075\U000e0073\U000e007f" - FLAG_FOR_DOUKKALA_ABDA_MA_10 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0030\U000e007f" - FLAG_FOR_PORT_SAID_EG_PTS = "\U0001f3f4\U000e0065\U000e0067\U000e0070\U000e0074\U000e0073\U000e007f" - FLAG_FOR_SALZBURG_AT_5 = "\U0001f3f4\U000e0061\U000e0074\U000e0035\U000e007f" - JAPANESE_BANK_SYMBOL = "\u26fb" - FLAG_FOR_CANILLO_AD_02 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0032\U000e007f" - TAG_LATIN_SMALL_LETTER_Y = "\U000e0079" - FLAG_FOR_PARA_BR_PA = "\U0001f3f4\U000e0062\U000e0072\U000e0070\U000e0061\U000e007f" - TAG_LATIN_SMALL_LETTER_J = "\U000e006a" - MAHJONG_TILE_SOUTH_WIND = "\U0001f001" - TAG_NUMBER_SIGN = "\U000e0023" - COMBINING_ENCLOSING_KEYCAP = "\u20e3" - FLAG_FOR_JIHOCESKY_KRAJ_CZ_31 = "\U0001f3f4\U000e0063\U000e007a\U000e0033\U000e0031\U000e007f" - FLAG_FOR_BABITE_LV_012 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0032\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" - PROHIBITED_SIGN = "\U0001f6c7" - FLAG_FOR_SICHUAN_CN_51 = "\U0001f3f4\U000e0063\U000e006e\U000e0035\U000e0031\U000e007f" - FLAG_FOR_BERANE_ME_03 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0033\U000e007f" - FLAG_FOR_DRENTHE_NL_DR = "\U0001f3f4\U000e006e\U000e006c\U000e0064\U000e0072\U000e007f" - KISS_MAN_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" - FLAG_FOR_VELIKO_TARNOVO_BG_04 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0034\U000e007f" - FLAG_FOR_NORTH_CENTRAL_PROVINCE_MV_NC = "\U0001f3f4\U000e006d\U000e0076\U000e006e\U000e0063\U000e007f" - FLAG_FOR_EL_VALLE_DO_37 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0037\U000e007f" - FLAG_FOR_BARINGO_KE_01 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0031\U000e007f" - FLAG_FOR_SENGLEA_MT_20 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0030\U000e007f" - TAG_LATIN_SMALL_LETTER_Z = "\U000e007a" - FLAG_FOR_COTOPAXI_EC_X = "\U0001f3f4\U000e0065\U000e0063\U000e0078\U000e007f" - FLAG_FOR_ABSHERON_AZ_ABS = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0062\U000e0073\U000e007f" - FLAG_FOR_SAVANNAKHET_LA_SV = "\U0001f3f4\U000e006c\U000e0061\U000e0073\U000e0076\U000e007f" - FLAG_FOR_MAKEDONSKI_BROD_MK_52 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0032\U000e007f" - FLAG_FOR_HAUT_MBOMOU_CF_HM = "\U0001f3f4\U000e0063\U000e0066\U000e0068\U000e006d\U000e007f" - FLAG_FOR_FARO_PT_08 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0038\U000e007f" - FLAG_FOR_SANA_A_YE_SN = "\U0001f3f4\U000e0079\U000e0065\U000e0073\U000e006e\U000e007f" - FLAG_FOR_TATARSTAN_RU_TA = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0061\U000e007f" - TAG_RIGHT_PARENTHESIS = "\U000e0029" - TAG_DIGIT_THREE = "\U000e0033" - FLAG_FOR_JEWISH_RU_YEV = "\U0001f3f4\U000e0072\U000e0075\U000e0079\U000e0065\U000e0076\U000e007f" - FLAG_FOR_KAPOSVAR_HU_KV = "\U0001f3f4\U000e0068\U000e0075\U000e006b\U000e0076\U000e007f" - FLAG_FOR_TEARCE_MK_75 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0035\U000e007f" - DIGIT_THREE = "3\ufe0f" - FLAG_FOR_SAINT_KITTS_KN_K = "\U0001f3f4\U000e006b\U000e006e\U000e006b\U000e007f" - FLAG_FOR_AMANAT_AL_ASIMAH_YE_SA = "\U0001f3f4\U000e0079\U000e0065\U000e0073\U000e0061\U000e007f" - FLAG_FOR_ASTANA_KZ_AST = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e0073\U000e0074\U000e007f" - FLAG_FOR_BAR_ME_02 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0032\U000e007f" - DIGIT_SIX = "6\ufe0f" - FLAG_FOR_DAKAR_SN_DK = "\U0001f3f4\U000e0073\U000e006e\U000e0064\U000e006b\U000e007f" - WOMAN_WITH_HEADSCARF_DARK_SKIN_TONE = "\U0001f9d5\U0001f3ff\u200d\u2640\ufe0f" - FLAG_FOR_KAYES_ML_1 = "\U0001f3f4\U000e006d\U000e006c\U000e0031\U000e007f" - FLAG_FOR_ESCALDES_ENGORDANY_AD_08 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0038\U000e007f" - WHITE_CIRCLE_WITH_TWO_DOTS = "\u2687" - TAG_LATIN_SMALL_LETTER_I = "\U000e0069" - WHITE_DOWN_POINTING_INDEX = "\u261f" - LEFT_THOUGHT_BUBBLE = "\U0001f5ec" - WHITE_LATIN_CROSS = "\U0001f546" - SOFT_SHELL_FLOPPY_DISK = "\U0001f5ac" - FLAG_FOR_RAZAVI_KHORASAN_IR_30 = "\U0001f3f4\U000e0069\U000e0072\U000e0033\U000e0030\U000e007f" - BALLOT_BOX_WITH_X = "\u2612" - FLAG_FOR_CORSE_FR_COR = "\U0001f3f4\U000e0066\U000e0072\U000e0063\U000e006f\U000e0072\U000e007f" - FLAG_FOR_ARKANSAS_US_AR = "\U0001f3f4\U000e0075\U000e0073\U000e0061\U000e0072\U000e007f" - DIGIT_EIGHT = "8\ufe0f" - FLAG_FOR_CANAR_EC_F = "\U0001f3f4\U000e0065\U000e0063\U000e0066\U000e007f" - FLAG_FOR_OMAHEKE_NA_OH = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e0068\U000e007f" - ALTERNATE_ONE_WAY_LEFT_WAY_TRAFFIC = "\u26d5" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc" - WHITE_LEFT_POINTING_INDEX = "\u261c" - WHITE_PENNANT = "\U0001f3f1" - REVERSED_THUMBS_DOWN_SIGN = "\U0001f593" - FLAG_FOR_SUL_GW_S = "\U0001f3f4\U000e0067\U000e0077\U000e0073\U000e007f" - TAG_DIGIT_SEVEN = "\U000e0037" - FLAG_FOR_CIUDAD_DE_MEXICO_MX_CMX = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e006d\U000e0078\U000e007f" - TAG_LATIN_SMALL_LETTER_C = "\U000e0063" - BLACK_FOLDER = "\U0001f5bf" - MAN_WITH_HEADSCARF_DARK_SKIN_TONE = "\U0001f9d5\U0001f3ff\u200d\u2642\ufe0f" - FLAG_FOR_VIROVITICA_PODRAVINA_HR_10 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0030\U000e007f" - FLAG_FOR_NINGXIA_CN_64 = "\U0001f3f4\U000e0063\U000e006e\U000e0036\U000e0034\U000e007f" - COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - DISABLED_CAR = "\u26cd" - FLAG_FOR_ZHEJIANG_CN_33 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0033\U000e007f" - DIGIT_SEVEN = "7\ufe0f" - ASTRONOMICAL_SYMBOL_FOR_URANUS = "\u26e2" - TAG_DIGIT_ONE = "\U000e0031" - FLAG_FOR_PUNJAB_IN_PB = "\U0001f3f4\U000e0069\U000e006e\U000e0070\U000e0062\U000e007f" - MAHJONG_TILE_FOUR_OF_CHARACTERS = "\U0001f00a" - MAHJONG_TILE_GREEN_DRAGON = "\U0001f005" - FAMILY_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_JUFRA_LY_JU = "\U0001f3f4\U000e006c\U000e0079\U000e006a\U000e0075\U000e007f" - FAMILY_WOMAN_MAN_BOY_GIRL = "\U0001f469\u200d\U0001f468\u200d\U0001f466\u200d\U0001f467" - FLAG_FOR_RATAK_CHAIN_MH_T = "\U0001f3f4\U000e006d\U000e0068\U000e0074\U000e007f" - FLAG_FOR_MGARR_MT_31 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0031\U000e007f" - FLAG_FOR_BRANDENBURG_DE_BB = "\U0001f3f4\U000e0064\U000e0065\U000e0062\U000e0062\U000e007f" - FLAG_FOR_WESTFJORDS_IS_4 = "\U0001f3f4\U000e0069\U000e0073\U000e0034\U000e007f" - FLAG_FOR_VILNIAUS_MUNICIPALITY_LT_57 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0037\U000e007f" - WOMAN_IN_BUSINESS_SUIT_LEVITATING = "\U0001f574\ufe0f\u200d\u2640\ufe0f" - FLAG_FOR_SHARJAH_AE_SH = "\U0001f3f4\U000e0061\U000e0065\U000e0073\U000e0068\U000e007f" - TRIGRAM_FOR_EARTH = "\u2637" - FLAG_FOR_BALKH_AF_BAL = "\U0001f3f4\U000e0061\U000e0066\U000e0062\U000e0061\U000e006c\U000e007f" - FLAG_FOR_UMM_AL_QUWAIN_AE_UQ = "\U0001f3f4\U000e0061\U000e0065\U000e0075\U000e0071\U000e007f" - FLAG_FOR_SHAANXI_CN_61 = "\U0001f3f4\U000e0063\U000e006e\U000e0036\U000e0031\U000e007f" - MAHJONG_TILE_SEVEN_OF_CHARACTERS = "\U0001f00d" - TAG_DIGIT_EIGHT = "\U000e0038" - FLAG_FOR_SETIF_DZ_19 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0039\U000e007f" - MAHJONG_TILE_NINE_OF_CHARACTERS = "\U0001f00f" - TAG_DIGIT_FOUR = "\U000e0034" - FLAG_FOR_ASTURIAS_ES_AS = "\U0001f3f4\U000e0065\U000e0073\U000e0061\U000e0073\U000e007f" - FLAG_FOR_NORTHERN_MARIANA_ISLANDS_US_MP = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0070\U000e007f" - CANCEL_TAG = "\U000e007f" - MAHJONG_TILE_TWO_OF_CIRCLES = "\U0001f01a" - FLAG_FOR_NORTHWEST_TERRITORIES_CA_NT = "\U0001f3f4\U000e0063\U000e0061\U000e006e\U000e0074\U000e007f" - MAHJONG_TILE_FIVE_OF_CIRCLES = "\U0001f01d" - MAHJONG_TILE_SIX_OF_CIRCLES = "\U0001f01e" - FLAG_FOR_EASTERN_SL_E = "\U0001f3f4\U000e0073\U000e006c\U000e0065\U000e007f" - ASTERISK = "*\ufe0f" - FLAG_FOR_MANIPUR_IN_MN = "\U0001f3f4\U000e0069\U000e006e\U000e006d\U000e006e\U000e007f" - FLAG_FOR_KITUI_KE_18 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0038\U000e007f" - TAG_SEMICOLON = "\U000e003b" - MAHJONG_TILE_FOUR_OF_CIRCLES = "\U0001f01c" - TAG_LATIN_SMALL_LETTER_F = "\U000e0066" - FAMILY_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd" - PAGE_WITH_CIRCLED_TEXT = "\U0001f5df" - FLAG_FOR_FARS_IR_14 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0034\U000e007f" - FLAG_FOR_BAGHLAN_AF_BGL = "\U0001f3f4\U000e0061\U000e0066\U000e0062\U000e0067\U000e006c\U000e007f" - FLAG_FOR_BABYLON_IQ_BB = "\U0001f3f4\U000e0069\U000e0071\U000e0062\U000e0062\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" - BLACK_CIRCLE_WITH_TWO_WHITE_DOTS = "\u2689" - FLAG_FOR_NGIWAL_PW_228 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0032\U000e0038\U000e007f" - FLAG_FOR_FARAH_AF_FRA = "\U0001f3f4\U000e0061\U000e0066\U000e0066\U000e0072\U000e0061\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" - RIGHT_HANDED_INTERLACED_PENTAGRAM = "\u26e5" - NUMBER_SIGN = "#\ufe0f" - KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - MAHJONG_TILE_JOKER = "\U0001f02a" - KISS_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" - FLAG_FOR_PERNAMBUCO_BR_PE = "\U0001f3f4\U000e0062\U000e0072\U000e0070\U000e0065\U000e007f" - FLAG_FOR_WELLINGTON_NZ_WGN = "\U0001f3f4\U000e006e\U000e007a\U000e0077\U000e0067\U000e006e\U000e007f" - MAHJONG_TILE_WEST_WIND = "\U0001f002" - FLAG_FOR_MAGWAY_MM_03 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0033\U000e007f" - FLAG_FOR_RED_SEA_SD_RS = "\U0001f3f4\U000e0073\U000e0064\U000e0072\U000e0073\U000e007f" - FLAG_FOR_RADOVIS_MK_64 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0034\U000e007f" - FLAG_FOR_BADAKHSHAN_AF_BDS = "\U0001f3f4\U000e0061\U000e0066\U000e0062\U000e0064\U000e0073\U000e007f" - FLAG_FOR_THURGAU_CH_TG = "\U0001f3f4\U000e0063\U000e0068\U000e0074\U000e0067\U000e007f" - FLAG_FOR_OZAMA_DO_40 = "\U0001f3f4\U000e0064\U000e006f\U000e0034\U000e0030\U000e007f" - TAG_LATIN_SMALL_LETTER_W = "\U000e0077" - FLAG_FOR_KIRKUK_IQ_KI = "\U0001f3f4\U000e0069\U000e0071\U000e006b\U000e0069\U000e007f" - MAHJONG_TILE_SIX_OF_CHARACTERS = "\U0001f00c" - FLAG_FOR_VIENNA_AT_9 = "\U0001f3f4\U000e0061\U000e0074\U000e0039\U000e007f" - FLAG_FOR_GHAZNI_AF_GHA = "\U0001f3f4\U000e0061\U000e0066\U000e0067\U000e0068\U000e0061\U000e007f" - FLAG_FOR_GUATEMALA_GT_GU = "\U0001f3f4\U000e0067\U000e0074\U000e0067\U000e0075\U000e007f" - FLAG_FOR_BERRY_ISLANDS_BS_BY = "\U0001f3f4\U000e0062\U000e0073\U000e0062\U000e0079\U000e007f" - TAG_LATIN_SMALL_LETTER_U = "\U000e0075" - FLAG_FOR_GHOR_AF_GHO = "\U0001f3f4\U000e0061\U000e0066\U000e0067\U000e0068\U000e006f\U000e007f" - MAHJONG_TILE_NORTH_WIND = "\U0001f003" - TAG_LATIN_SMALL_LETTER_Q = "\U000e0071" - FLAG_FOR_HEILONGJIANG_CN_23 = "\U0001f3f4\U000e0063\U000e006e\U000e0032\U000e0033\U000e007f" - FLAG_FOR_GABORONE_BW_GA = "\U0001f3f4\U000e0062\U000e0077\U000e0067\U000e0061\U000e007f" - TAG_DIGIT_FIVE = "\U000e0035" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - FLAG_FOR_BAHIA_BR_BA = "\U0001f3f4\U000e0062\U000e0072\U000e0062\U000e0061\U000e007f" - MAHJONG_TILE_EIGHT_OF_CHARACTERS = "\U0001f00e" - FLAG_FOR_HERAT_AF_HER = "\U0001f3f4\U000e0061\U000e0066\U000e0068\U000e0065\U000e0072\U000e007f" - TAG_DIGIT_ZERO = "\U000e0030" - FLAG_FOR_JURA_CH_JU = "\U0001f3f4\U000e0063\U000e0068\U000e006a\U000e0075\U000e007f" - FLAG_FOR_AMAZONAS_CO_AMA = "\U0001f3f4\U000e0063\U000e006f\U000e0061\U000e006d\U000e0061\U000e007f" - SIDEWAYS_BLACK_DOWN_POINTING_INDEX = "\U0001f5a1" - MAHJONG_TILE_SEVEN_OF_CIRCLES = "\U0001f01f" - FLAG_FOR_KIDAL_ML_8 = "\U0001f3f4\U000e006d\U000e006c\U000e0038\U000e007f" - FLAG_FOR_JOWZJAN_AF_JOW = "\U0001f3f4\U000e0061\U000e0066\U000e006a\U000e006f\U000e0077\U000e007f" - FLAG_FOR_HELMAND_AF_HEL = "\U0001f3f4\U000e0061\U000e0066\U000e0068\U000e0065\U000e006c\U000e007f" - SIDEWAYS_BLACK_UP_POINTING_INDEX = "\U0001f5a0" - FLAG_FOR_MAHARASHTRA_IN_MH = "\U0001f3f4\U000e0069\U000e006e\U000e006d\U000e0068\U000e007f" - DIGIT_FOUR = "4\ufe0f" - FLAG_FOR_BURGENLAND_AT_1 = "\U0001f3f4\U000e0061\U000e0074\U000e0031\U000e007f" - BLACK_UP_POINTING_BACKHAND_INDEX = "\U0001f5a2" - KISS_WOMAN_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - FLAG_FOR_BEIJING_CN_11 = "\U0001f3f4\U000e0063\U000e006e\U000e0031\U000e0031\U000e007f" - BLACK_PENNANT = "\U0001f3f2" - TAG_LATIN_SMALL_LETTER_E = "\U000e0065" - KEYBOARD_AND_MOUSE = "\U0001f5a6" - BLACK_DOWN_POINTING_BACKHAND_INDEX = "\U0001f5a3" - RIGHT_SPEAKER = "\U0001f568" - FLAG_FOR_SAINT_MARK_GD_05 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0035\U000e007f" - KISS_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" - FAMILY_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff" - TWO_SPEECH_BUBBLES = "\U0001f5ea" - WOMAN_WITH_HEADSCARF_2 = "\U0001f9d5\u200d\u2640\ufe0f" - FLAG_FOR_LAUTEM_TL_LA = "\U0001f3f4\U000e0074\U000e006c\U000e006c\U000e0061\U000e007f" - FLAG_FOR_KABUL_AF_KAB = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e0061\U000e0062\U000e007f" - KISS_MAN_MAN_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - FLAG_FOR_KARS_TR_36 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0036\U000e007f" - FLAG_FOR_KUNDUZ_AF_KDZ = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e0064\U000e007a\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_SABA_BQ_SA = "\U0001f3f4\U000e0062\U000e0071\U000e0073\U000e0061\U000e007f" - LIPS = "\U0001f5e2" - THREE_NETWORKED_COMPUTERS = "\U0001f5a7" - FLAG_FOR_KANDAHAR_AF_KAN = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e0061\U000e006e\U000e007f" - BLACK_HARD_SHELL_FLOPPY_DISK = "\U0001f5aa" - FLAG_FOR_HIIU_EE_39 = "\U0001f3f4\U000e0065\U000e0065\U000e0033\U000e0039\U000e007f" - FLAG_FOR_CHECHEN_RU_CE = "\U0001f3f4\U000e0072\U000e0075\U000e0063\U000e0065\U000e007f" - TAG_LATIN_SMALL_LETTER_G = "\U000e0067" - FLAG_FOR_LORESTAN_IR_20 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0030\U000e007f" - FLAG_FOR_SOHAG_EG_SHG = "\U0001f3f4\U000e0065\U000e0067\U000e0073\U000e0068\U000e0067\U000e007f" - FLAG_FOR_KAPISA_AF_KAP = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e0061\U000e0070\U000e007f" - FLAG_FOR_TOLIMA_CO_TOL = "\U0001f3f4\U000e0063\U000e006f\U000e0074\U000e006f\U000e006c\U000e007f" - FLAG_FOR_PERAK_MY_08 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0038\U000e007f" - TAPE_CARTRIDGE = "\U0001f5ad" - FLAG_FOR_KUNAR_AF_KNR = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e006e\U000e0072\U000e007f" - FLAG_FOR_AL_BURAIMI_OM_BU = "\U0001f3f4\U000e006f\U000e006d\U000e0062\U000e0075\U000e007f" - FLAG_FOR_SOUTH_DAKOTA_US_SD = "\U0001f3f4\U000e0075\U000e0073\U000e0073\U000e0064\U000e007f" - FLAG_FOR_ANSE_AUX_PINS_SC_01 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0031\U000e007f" - FLAG_FOR_BADGHIS_AF_BDG = "\U0001f3f4\U000e0061\U000e0066\U000e0062\U000e0064\U000e0067\U000e007f" - FLAG_FOR_SAINT_LOUIS_SN_SL = "\U0001f3f4\U000e0073\U000e006e\U000e0073\U000e006c\U000e007f" - FLAG_FOR_DUBAI_AE_DU = "\U0001f3f4\U000e0061\U000e0065\U000e0064\U000e0075\U000e007f" - WHITE_HARD_SHELL_FLOPPY_DISK = "\U0001f5ab" - WHITE_TWO_WAY_LEFT_WAY_TRAFFIC = "\u26d7" - FLAG_FOR_SOMALI_ET_SO = "\U0001f3f4\U000e0065\U000e0074\U000e0073\U000e006f\U000e007f" - FLAG_FOR_LAGHMAN_AF_LAG = "\U0001f3f4\U000e0061\U000e0066\U000e006c\U000e0061\U000e0067\U000e007f" - FLAG_FOR_AJMAN_AE_AJ = "\U0001f3f4\U000e0061\U000e0065\U000e0061\U000e006a\U000e007f" - TAG_LATIN_SMALL_LETTER_M = "\U000e006d" - FLAG_FOR_MURCIA_REGION_ES_MC = "\U0001f3f4\U000e0065\U000e0073\U000e006d\U000e0063\U000e007f" - FLAG_FOR_DAYKUNDI_AF_DAY = "\U0001f3f4\U000e0061\U000e0066\U000e0064\U000e0061\U000e0079\U000e007f" - FLAG_FOR_TOKYO_JP_13 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0033\U000e007f" - TAG_LATIN_CAPITAL_LETTER_M = "\U000e004d" - FLAG_FOR_FARYAB_AF_FYB = "\U0001f3f4\U000e0061\U000e0066\U000e0066\U000e0079\U000e0062\U000e007f" - REVERSED_VICTORY_HAND = "\U0001f594" - FLAG_FOR_NAYARIT_MX_NAY = "\U0001f3f4\U000e006d\U000e0078\U000e006e\U000e0061\U000e0079\U000e007f" - MAN_WITH_HEADSCARF = "\U0001f9d5\u200d\u2642\ufe0f" - ONE_BUTTON_MOUSE = "\U0001f5af" - TAG_AMPERSAND = "\U000e0026" - FLAG_FOR_ORANGE_WALK_BZ_OW = "\U0001f3f4\U000e0062\U000e007a\U000e006f\U000e0077\U000e007f" - MAN_WITH_HEADSCARF_MEDIUM_SKIN_TONE = "\U0001f9d5\U0001f3fd\u200d\u2642\ufe0f" - TAG_LATIN_SMALL_LETTER_T = "\U000e0074" - KISS_WOMAN_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" - FLAG_FOR_LOGAR_AF_LOG = "\U0001f3f4\U000e0061\U000e0066\U000e006c\U000e006f\U000e0067\U000e007f" - FLAG_FOR_SHAN_MM_17 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0037\U000e007f" - BEAMED_EIGHTH_NOTES = "\u266b" - NOTCHED_LEFT_SEMICIRCLE_WITH_THREE_DOTS = "\U0001f543" - TAG_DIGIT_NINE = "\U000e0039" - FLAG_FOR_SOUTH_KHORASAN_IR_29 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0039\U000e007f" - TWO_BUTTON_MOUSE = "\U0001f5b0" - FLAG_FOR_MISSOURI_US_MO = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e006f\U000e007f" - SCREEN = "\U0001f5b5" - OLD_PERSONAL_COMPUTER = "\U0001f5b3" - KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" - FLAG_FOR_KHOST_AF_KHO = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e0068\U000e006f\U000e007f" - FLAG_FOR_ALASKA_US_AK = "\U0001f3f4\U000e0075\U000e0073\U000e0061\U000e006b\U000e007f" - FAMILY_MAN_BOY_GIRL = "\U0001f468\u200d\U0001f466\u200d\U0001f467" - FLAG_FOR_AFAR_ET_AF = "\U0001f3f4\U000e0065\U000e0074\U000e0061\U000e0066\U000e007f" - FLAG_FOR_SAMARA_RU_SAM = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0061\U000e006d\U000e007f" - FLAG_FOR_SOUTHERN_IS_8 = "\U0001f3f4\U000e0069\U000e0073\U000e0038\U000e007f" - FLAG_FOR_NIMRUZ_AF_NIM = "\U0001f3f4\U000e0061\U000e0066\U000e006e\U000e0069\U000e006d\U000e007f" - FLAG_FOR_SANTA_CRUZ_BO_S = "\U0001f3f4\U000e0062\U000e006f\U000e0073\U000e007f" - FLAG_FOR_NURISTAN_AF_NUR = "\U0001f3f4\U000e0061\U000e0066\U000e006e\U000e0075\U000e0072\U000e007f" - FLAG_FOR_DURANGO_MX_DUR = "\U0001f3f4\U000e006d\U000e0078\U000e0064\U000e0075\U000e0072\U000e007f" - FLAG_FOR_CAMPANIA_IT_72 = "\U0001f3f4\U000e0069\U000e0074\U000e0037\U000e0032\U000e007f" - FLAG_FOR_UPPER_DEMERARA_BERBICE_GY_UD = "\U0001f3f4\U000e0067\U000e0079\U000e0075\U000e0064\U000e007f" - FLAG_FOR_PARWAN_AF_PAR = "\U0001f3f4\U000e0061\U000e0066\U000e0070\U000e0061\U000e0072\U000e007f" - FLAG_FOR_KARLOVAC_HR_04 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0034\U000e007f" - FLAG_FOR_FUJAIRAH_AE_FU = "\U0001f3f4\U000e0061\U000e0065\U000e0066\U000e0075\U000e007f" - FLAG_FOR_NANGARHAR_AF_NAN = "\U0001f3f4\U000e0061\U000e0066\U000e006e\U000e0061\U000e006e\U000e007f" - FAMILY_MAN_WOMAN_BABY_GIRL = "\U0001f468\u200d\U0001f469\u200d\U0001f476\u200d\U0001f467" - FLAG_FOR_WEST_NEW_BRITAIN_PG_WBK = "\U0001f3f4\U000e0070\U000e0067\U000e0077\U000e0062\U000e006b\U000e007f" - FAMILY_MAN_MAN_GIRL_BABY = "\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f476" - FAMILY_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" - FLAG_FOR_PAKTIA_AF_PIA = "\U0001f3f4\U000e0061\U000e0066\U000e0070\U000e0069\U000e0061\U000e007f" - MAN_WITH_HEADSCARF_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9d5\U0001f3fc\u200d\u2642\ufe0f" - FLAG_FOR_ZIROVNICA_SI_192 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0032\U000e007f" - FLAG_FOR_HALLAND_SE_N = "\U0001f3f4\U000e0073\U000e0065\U000e006e\U000e007f" - DOCUMENT_WITH_TEXT = "\U0001f5b9" - FLAG_FOR_ABU_DHABI_AE_AZ = "\U0001f3f4\U000e0061\U000e0065\U000e0061\U000e007a\U000e007f" - FLAG_FOR_TICINO_CH_TI = "\U0001f3f4\U000e0063\U000e0068\U000e0074\U000e0069\U000e007f" - FLAG_FOR_NEW_YORK_US_NY = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0079\U000e007f" - FLAG_FOR_BAMAKO_ML_BKO = "\U0001f3f4\U000e006d\U000e006c\U000e0062\U000e006b\U000e006f\U000e007f" - DOCUMENT_WITH_TEXT_AND_PICTURE = "\U0001f5ba" - FLAG_FOR_BOR_RS_14 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0034\U000e007f" - TAG_LATIN_SMALL_LETTER_O = "\U000e006f" - FLAG_FOR_NORTH_BRABANT_NL_NB = "\U0001f3f4\U000e006e\U000e006c\U000e006e\U000e0062\U000e007f" - FLAG_FOR_CEUTA_ES_CE = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e0065\U000e007f" - FLAG_FOR_SAMANGAN_AF_SAM = "\U0001f3f4\U000e0061\U000e0066\U000e0073\U000e0061\U000e006d\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" - FRAME_WITH_TILES = "\U0001f5bd" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" - FLAG_FOR_NORTHERN_BAHR_EL_GHAZAL_SS_BN = "\U0001f3f4\U000e0073\U000e0073\U000e0062\U000e006e\U000e007f" - FLAG_FOR_BUTNAN_LY_BU = "\U0001f3f4\U000e006c\U000e0079\U000e0062\U000e0075\U000e007f" - FLAG_FOR_RAS_AL_KHAIMAH_AE_RK = "\U0001f3f4\U000e0061\U000e0065\U000e0072\U000e006b\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_SABARAGAMUWA_LK_9 = "\U0001f3f4\U000e006c\U000e006b\U000e0039\U000e007f" - KISS_MAN_MEDIUM_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - TAG_CIRCUMFLEX_ACCENT = "\U000e005e" - FLAG_FOR_SANTA_CATARINA_BR_SC = "\U0001f3f4\U000e0062\U000e0072\U000e0073\U000e0063\U000e007f" - FLAG_FOR_BERLIN_DE_BE = "\U0001f3f4\U000e0064\U000e0065\U000e0062\U000e0065\U000e007f" - DOCUMENT_WITH_PICTURE = "\U0001f5bb" - MAHJONG_TILE_FIVE_OF_CHARACTERS = "\U0001f00b" - FLAG_FOR_WEST_VIRGINIA_US_WV = "\U0001f3f4\U000e0075\U000e0073\U000e0077\U000e0076\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" - FAMILY_MAN_BABY = "\U0001f468\u200d\U0001f476" - FLAG_FOR_MAIDAN_WARDAK_AF_WAR = "\U0001f3f4\U000e0061\U000e0066\U000e0077\U000e0061\U000e0072\U000e007f" - KISS_WOMAN_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - FLAG_FOR_LIMA_REGION_PE_LIM = "\U0001f3f4\U000e0070\U000e0065\U000e006c\U000e0069\U000e006d\U000e007f" - TAG_LATIN_CAPITAL_LETTER_J = "\U000e004a" - FLAG_FOR_BAY_SOMALIA_SO_BY = "\U0001f3f4\U000e0073\U000e006f\U000e0062\U000e0079\U000e007f" - OPTICAL_DISC_ICON = "\U0001f5b8" - MAN_WITH_HEADSCARF_MEDIUM_DARK_SKIN_TONE = "\U0001f9d5\U0001f3fe\u200d\u2642\ufe0f" - PRINTER_ICON = "\U0001f5b6" - FLAG_FOR_BAY_OF_PLENTY_NZ_BOP = "\U0001f3f4\U000e006e\U000e007a\U000e0062\U000e006f\U000e0070\U000e007f" - FLAG_FOR_SAR_E_POL_AF_SAR = "\U0001f3f4\U000e0061\U000e0066\U000e0073\U000e0061\U000e0072\U000e007f" - EMPTY_NOTE = "\U0001f5c5" - FAMILY_WOMAN_GIRL_BABY = "\U0001f469\u200d\U0001f467\u200d\U0001f476" - FLAG_FOR_NUKULAELAE_TV_NKL = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e006b\U000e006c\U000e007f" - FRAME_WITH_AN_X = "\U0001f5be" - FLAG_FOR_AMERICAN_SAMOA_US_AS = "\U0001f3f4\U000e0075\U000e0073\U000e0061\U000e0073\U000e007f" - FLAG_FOR_BLUE_NILE_SD_NB = "\U0001f3f4\U000e0073\U000e0064\U000e006e\U000e0062\U000e007f" - FLAG_FOR_SASKATCHEWAN_CA_SK = "\U0001f3f4\U000e0063\U000e0061\U000e0073\U000e006b\U000e007f" - FLAG_FOR_PAKTIKA_AF_PKA = "\U0001f3f4\U000e0061\U000e0066\U000e0070\U000e006b\U000e0061\U000e007f" - FLAG_FOR_KAFR_EL_SHEIKH_EG_KFS = "\U0001f3f4\U000e0065\U000e0067\U000e006b\U000e0066\U000e0073\U000e007f" - DIGIT_NINE = "9\ufe0f" - FLAG_FOR_BASSE_KOTTO_CF_BK = "\U0001f3f4\U000e0063\U000e0066\U000e0062\U000e006b\U000e007f" - NOTE_PAD = "\U0001f5ca" - UP_POINTING_MILITARY_AIRPLANE = "\U0001f6e6" - MAHJONG_TILE_THREE_OF_CIRCLES = "\U0001f01b" - FOLDER = "\U0001f5c0" - EMPTY_NOTE_PAD = "\U0001f5c7" - NOTE_PAGE = "\U0001f5c9" - FLAG_FOR_UROZGAN_AF_URU = "\U0001f3f4\U000e0061\U000e0066\U000e0075\U000e0072\U000e0075\U000e007f" - TAG_LATIN_SMALL_LETTER_P = "\U000e0070" - EMPTY_NOTE_PAGE = "\U0001f5c6" - NOTE = "\U0001f5c8" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - PORTABLE_STEREO = "\U0001f4fe" - FAX_ICON = "\U0001f5b7" - EMPTY_PAGE = "\U0001f5cc" - FLAG_FOR_SAINT_GEORGE_AG_03 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0033\U000e007f" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - FLAG_FOR_NELSON_NZ_NSN = "\U0001f3f4\U000e006e\U000e007a\U000e006e\U000e0073\U000e006e\U000e007f" - FLAG_FOR_VICHADA_CO_VID = "\U0001f3f4\U000e0063\U000e006f\U000e0076\U000e0069\U000e0064\U000e007f" - FLAG_FOR_SAINT_JOSEPH_DM_06 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0036\U000e007f" - FLAG_FOR_NGARCHELONG_PW_218 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0031\U000e0038\U000e007f" - FLAG_FOR_SOUTH_HOLLAND_NL_ZH = "\U0001f3f4\U000e006e\U000e006c\U000e007a\U000e0068\U000e007f" - FLAG_FOR_ZABUL_AF_ZAB = "\U0001f3f4\U000e0061\U000e0066\U000e007a\U000e0061\U000e0062\U000e007f" - FLAG_FOR_LOMBARDY_IT_25 = "\U0001f3f4\U000e0069\U000e0074\U000e0032\U000e0035\U000e007f" - EMPTY_DOCUMENT = "\U0001f5cb" - NOTCHED_RIGHT_SEMICIRCLE_WITH_THREE_DOTS = "\U0001f544" - FLAG_FOR_SAINT_JOHN_AG_04 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0034\U000e007f" - DOCUMENT = "\U0001f5ce" - MAHJONG_TILE_EAST_WIND = "\U0001f000" - FLAG_FOR_NORTH_AEGEAN_GR_K = "\U0001f3f4\U000e0067\U000e0072\U000e006b\U000e007f" - FLAG_FOR_KWALE_KE_19 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0039\U000e007f" - MINIMIZE = "\U0001f5d5" - FLAG_FOR_ZAMORA_CHINCHIPE_EC_Z = "\U0001f3f4\U000e0065\U000e0063\U000e007a\U000e007f" - TAG_LATIN_SMALL_LETTER_R = "\U000e0072" - FLAG_FOR_GILBERT_ISLANDS_KI_G = "\U0001f3f4\U000e006b\U000e0069\U000e0067\U000e007f" - FLAG_FOR_VERMONT_US_VT = "\U0001f3f4\U000e0075\U000e0073\U000e0076\U000e0074\U000e007f" - FLAG_FOR_SAINT_MARY_AG_05 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0035\U000e007f" - FLAG_FOR_MASAYA_NI_MS = "\U0001f3f4\U000e006e\U000e0069\U000e006d\U000e0073\U000e007f" - FLAG_FOR_SAINT_PAUL_AG_06 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0036\U000e007f" - FLAG_FOR_TRA_VINH_VN_51 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0031\U000e007f" - FLAG_FOR_MASCARA_DZ_29 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0039\U000e007f" - INCREASE_FONT_SIZE_SYMBOL = "\U0001f5da" - FAMILY_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" - FLAG_FOR_PARDUBICKY_KRAJ_CZ_53 = "\U0001f3f4\U000e0063\U000e007a\U000e0035\U000e0033\U000e007f" - OVERLAP = "\U0001f5d7" - MAXIMIZE = "\U0001f5d6" - DESKTOP_WINDOW = "\U0001f5d4" - FLAG_FOR_LAKES_SS_LK = "\U0001f3f4\U000e0073\U000e0073\U000e006c\U000e006b\U000e007f" - PAGE = "\U0001f5cf" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_NORTHERN_RED_SEA_ER_SK = "\U0001f3f4\U000e0065\U000e0072\U000e0073\U000e006b\U000e007f" - TAG_LATIN_SMALL_LETTER_D = "\U000e0064" - CLOCKWISE_RIGHT_AND_LEFT_SEMICIRCLE_ARROWS = "\U0001f5d8" - FLAG_FOR_HSINCHU_COUNTY_TW_HSQ = "\U0001f3f4\U000e0074\U000e0077\U000e0068\U000e0073\U000e0071\U000e007f" - THREE_RAYS_BELOW = "\U0001f5e5" - FLAG_FOR_ONTARIO_CA_ON = "\U0001f3f4\U000e0063\U000e0061\U000e006f\U000e006e\U000e007f" - STOCK_CHART = "\U0001f5e0" - KISS_MAN_WOMAN = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - THREE_RAYS_ABOVE = "\U0001f5e4" - FLAG_FOR_APE_LV_009 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0039\U000e007f" - FLAG_FOR_PENGHU_TW_PEN = "\U0001f3f4\U000e0074\U000e0077\U000e0070\U000e0065\U000e006e\U000e007f" - TAG_LATIN_SMALL_LETTER_S = "\U000e0073" - FLAG_FOR_REDONDA_AG_11 = "\U0001f3f4\U000e0061\U000e0067\U000e0031\U000e0031\U000e007f" - CHIRON = "\u26b7" - DECREASE_FONT_SIZE_SYMBOL = "\U0001f5db" - CANCELLATION_X = "\U0001f5d9" - THREE_RAYS_LEFT = "\U0001f5e6" - FLAG_FOR_CHRIST_CHURCH_BB_01 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0031\U000e007f" - THREE_SPEECH_BUBBLES = "\U0001f5eb" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" - LIGHTNING_MOOD = "\U0001f5f2" - THREE_RAYS_RIGHT = "\U0001f5e7" - LEFT_ANGER_BUBBLE = "\U0001f5ee" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" - RIGHT_SPEECH_BUBBLE = "\U0001f5e9" - FAMILY_WOMAN_WOMAN_BABY = "\U0001f469\u200d\U0001f469\u200d\U0001f476" - FLAG_FOR_ARDABIL_IR_03 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0033\U000e007f" - OPEN_FOLDER = "\U0001f5c1" - LIGHT_CHECK_MARK = "\U0001f5f8" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" - FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f476\U0001f3ff" - BALLOT_SCRIPT_X = "\U0001f5f4" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" - BALLOT_BOX_WITH_BOLD_SCRIPT_X = "\U0001f5f7" - FLAG_FOR_CHIAPAS_MX_CHP = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e0068\U000e0070\U000e007f" - FLAG_FOR_WEST_PANAMA_PA_10 = "\U0001f3f4\U000e0070\U000e0061\U000e0031\U000e0030\U000e007f" - EMPTY_PAGES = "\U0001f5cd" - FLAG_FOR_OKINAWA_JP_47 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0037\U000e007f" - FLAG_FOR_PHOENIX_ISLANDS_KI_P = "\U0001f3f4\U000e006b\U000e0069\U000e0070\U000e007f" - FLAG_FOR_DURRES_COUNTY_AL_02 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0032\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_BEL_AIR_SC_09 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0039\U000e007f" - FLAG_FOR_ARUBA_NL_AW = "\U0001f3f4\U000e006e\U000e006c\U000e0061\U000e0077\U000e007f" - FLAG_FOR_ELBASAN_COUNTY_AL_03 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0033\U000e007f" - FLAG_FOR_HAVANA_CU_03 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0033\U000e007f" - FLAG_FOR_FIER_COUNTY_AL_04 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0034\U000e007f" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" - TRIGRAM_FOR_MOUNTAIN = "\u2636" - TAG_LATIN_SMALL_LETTER_A = "\U000e0061" - LIGHTNING_MOOD_BUBBLE = "\U0001f5f1" - FLAG_FOR_KORCE_COUNTY_AL_06 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0036\U000e007f" - RIGHT_SPEAKER_WITH_THREE_SOUND_WAVES = "\U0001f56a" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" - FLAG_FOR_PELELIU_PW_350 = "\U0001f3f4\U000e0070\U000e0077\U000e0033\U000e0035\U000e0030\U000e007f" - FLAG_FOR_ZEBBUG_GOZO_MT_65 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0035\U000e007f" - FLAG_FOR_ANHUI_CN_34 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0034\U000e007f" - KISS_MAN_DARK_SKIN_TONE_MAN = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" - BOYS_SYMBOL = "\U0001f6c9" - FLAG_FOR_UPPER_TAKUTU_UPPER_ESSEQUIBO_GY_UT = "\U0001f3f4\U000e0067\U000e0079\U000e0075\U000e0074\U000e007f" - PAGES = "\U0001f5d0" - GIRLS_SYMBOL = "\U0001f6ca" - MOOD_BUBBLE = "\U0001f5f0" - FLAG_FOR_KUKES_COUNTY_AL_07 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0037\U000e007f" - CIRCLED_INFORMATION_SOURCE = "\U0001f6c8" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" - FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_BAJA_CALIFORNIA_MX_BCN = "\U0001f3f4\U000e006d\U000e0078\U000e0062\U000e0063\U000e006e\U000e007f" - NORTHEAST_POINTING_AIRPLANE = "\U0001f6ea" - FLAG_FOR_DIBER_COUNTY_AL_09 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0039\U000e007f" - FLAG_FOR_LEZHE_COUNTY_AL_08 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0038\U000e007f" - BALLOT_BOX_WITH_BOLD_CHECK = "\U0001f5f9" - ONCOMING_FIRE_ENGINE = "\U0001f6f1" - FLAG_FOR_WEST_KAZAKHSTAN_KZ_ZAP = "\U0001f3f4\U000e006b\U000e007a\U000e007a\U000e0061\U000e0070\U000e007f" - COUPLE_WITH_HEART_MAN_MAN_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - DIESEL_LOCOMOTIVE = "\U0001f6f2" - TAG_DIGIT_SIX = "\U000e0036" - UP_POINTING_SMALL_AIRPLANE = "\U0001f6e8" - UP_POINTING_AIRPLANE = "\U0001f6e7" - FLAG_FOR_BAS_CONGO_CD_BC = "\U0001f3f4\U000e0063\U000e0064\U000e0062\U000e0063\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" - MAHJONG_TILE_TWO_OF_CHARACTERS = "\U0001f008" - DIGIT_ONE = "1\ufe0f" - ROTATED_HEAVY_BLACK_HEART_BULLET = "\u2765" - BLACK_ROSETTE = "\U0001f3f6" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" - FLAG_FOR_SHKODER_COUNTY_AL_10 = "\U0001f3f4\U000e0061\U000e006c\U000e0031\U000e0030\U000e007f" - FLAG_FOR_VICTORIA_AU_VIC = "\U0001f3f4\U000e0061\U000e0075\U000e0076\U000e0069\U000e0063\U000e007f" - FLAG_FOR_NORD_OUEST_HT_NO = "\U0001f3f4\U000e0068\U000e0074\U000e006e\U000e006f\U000e007f" - FLAG_FOR_TIRANA_COUNTY_AL_11 = "\U0001f3f4\U000e0061\U000e006c\U000e0031\U000e0031\U000e007f" - MAHJONG_TILE_TWO_OF_BAMBOOS = "\U0001f011" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f476\U0001f3fd" - TAG_LATIN_SMALL_LETTER_B = "\U000e0062" - KISS_WOMAN_MAN_MEDIUM_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" - FLAG_FOR_KHUZESTAN_IR_10 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0030\U000e007f" - TAG_LATIN_SMALL_LETTER_V = "\U000e0076" - FLAG_FOR_VLORE_COUNTY_AL_12 = "\U0001f3f4\U000e0061\U000e006c\U000e0031\U000e0032\U000e007f" - MAHJONG_TILE_FOUR_OF_BAMBOOS = "\U0001f013" - FLAG_FOR_NGOUNIE_GA_4 = "\U0001f3f4\U000e0067\U000e0061\U000e0034\U000e007f" - FLAG_FOR_SOUTH_GYEONGSANG_KR_48 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0038\U000e007f" - FLAG_FOR_TRAT_TH_23 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0033\U000e007f" - MAHJONG_TILE_SEVEN_OF_BAMBOOS = "\U0001f016" - FLAG_FOR_ENUGU_NG_EN = "\U0001f3f4\U000e006e\U000e0067\U000e0065\U000e006e\U000e007f" - MAHJONG_TILE_ORCHID = "\U0001f023" - MAHJONG_TILE_ONE_OF_BAMBOOS = "\U0001f010" - FLAG_FOR_ARAGATSOTN_AM_AG = "\U0001f3f4\U000e0061\U000e006d\U000e0061\U000e0067\U000e007f" - FLAG_FOR_GEGHARKUNIK_AM_GR = "\U0001f3f4\U000e0061\U000e006d\U000e0067\U000e0072\U000e007f" - MAHJONG_TILE_CHRYSANTHEMUM = "\U0001f025" - MAHJONG_TILE_EIGHT_OF_BAMBOOS = "\U0001f017" - FLAG_FOR_ARARAT_AM_AR = "\U0001f3f4\U000e0061\U000e006d\U000e0061\U000e0072\U000e007f" - FLAG_FOR_LOUISIANA_US_LA = "\U0001f3f4\U000e0075\U000e0073\U000e006c\U000e0061\U000e007f" - MAHJONG_TILE_AUTUMN = "\U0001f028" - FLAG_FOR_CHACO_AR_H = "\U0001f3f4\U000e0061\U000e0072\U000e0068\U000e007f" - FLAG_FOR_KIDRICEVO_SI_045 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0035\U000e007f" - MAHJONG_TILE_SPRING = "\U0001f026" - MAHJONG_TILE_FIVE_OF_BAMBOOS = "\U0001f014" - MAHJONG_TILE_SUMMER = "\U0001f027" - FLAG_FOR_KOTAYK_AM_KT = "\U0001f3f4\U000e0061\U000e006d\U000e006b\U000e0074\U000e007f" - MAHJONG_TILE_NINE_OF_BAMBOOS = "\U0001f018" - MAHJONG_TILE_SIX_OF_BAMBOOS = "\U0001f015" - FLAG_FOR_SAXONY_DE_SN = "\U0001f3f4\U000e0064\U000e0065\U000e0073\U000e006e\U000e007f" - RIGHT_SPEAKER_WITH_ONE_SOUND_WAVE = "\U0001f569" - MAHJONG_TILE_NINE_OF_CIRCLES = "\U0001f021" - FLAG_FOR_ANDORRA_LA_VELLA_AD_07 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0037\U000e007f" - FLAG_FOR_POINTE_NOIRE_CG_16 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0036\U000e007f" - FLAG_FOR_SANTO_DOMINGO_DE_LOS_TSACHILAS_EC_SD = "\U0001f3f4\U000e0065\U000e0063\U000e0073\U000e0064\U000e007f" - MAHJONG_TILE_ONE_OF_CIRCLES = "\U0001f019" - FLAG_FOR_SKIKDA_DZ_21 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0031\U000e007f" - FLAG_FOR_SHIRAK_AM_SH = "\U0001f3f4\U000e0061\U000e006d\U000e0073\U000e0068\U000e007f" - FLAG_FOR_MINAS_GERAIS_BR_MG = "\U0001f3f4\U000e0062\U000e0072\U000e006d\U000e0067\U000e007f" - FLAG_FOR_RIYADH_SA_01 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0031\U000e007f" - FLAG_FOR_LORI_AM_LO = "\U0001f3f4\U000e0061\U000e006d\U000e006c\U000e006f\U000e007f" - FLAG_FOR_ARMAVIR_AM_AV = "\U0001f3f4\U000e0061\U000e006d\U000e0061\U000e0076\U000e007f" - KISS_WOMAN_MAN_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - FLAG_FOR_BUSAN_KR_26 = "\U0001f3f4\U000e006b\U000e0072\U000e0032\U000e0036\U000e007f" - LOWER_RIGHT_SHADOWED_WHITE_CIRCLE = "\U0001f53e" BEAMED_DESCENDING_MUSICAL_NOTES = "\U0001f39d" - MAHJONG_TILE_WINTER = "\U0001f029" - MAHJONG_TILE_THREE_OF_CHARACTERS = "\U0001f009" - BULLHORN = "\U0001f56b" - FLAG_FOR_GIZA_EG_GZ = "\U0001f3f4\U000e0065\U000e0067\U000e0067\U000e007a\U000e007f" - FLAG_FOR_JUTIAPA_GT_JU = "\U0001f3f4\U000e0067\U000e0074\U000e006a\U000e0075\U000e007f" - FLAG_FOR_GULF_PG_GPK = "\U0001f3f4\U000e0070\U000e0067\U000e0067\U000e0070\U000e006b\U000e007f" - FLAG_FOR_LOVRENC_NA_POHORJU_SI_167 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0037\U000e007f" - FLAG_FOR_PANEVEZYS_COUNTY_LT_PN = "\U0001f3f4\U000e006c\U000e0074\U000e0070\U000e006e\U000e007f" - KISS_MAN_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - HEAVY_LATIN_CROSS = "\U0001f547" - FLAG_FOR_SAINT_MARY_JM_05 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0035\U000e007f" - FAMILY_WOMAN_MAN_BABY_GIRL = "\U0001f469\u200d\U0001f468\u200d\U0001f476\u200d\U0001f467" - KISS_MAN_WOMAN_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" - BEAMED_ASCENDING_MUSICAL_NOTES = "\U0001f39c" - MAHJONG_TILE_THREE_OF_BAMBOOS = "\U0001f012" - FAMILY_WOMAN_MAN_BABY = "\U0001f469\u200d\U0001f468\u200d\U0001f476" - WIRED_KEYBOARD = "\U0001f5ae" - KISS_WOMAN_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" - FLAG_FOR_ALTAI_KRAI_RU_ALT = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e006c\U000e0074\U000e007f" - BULLHORN_WITH_SOUND_WAVES = "\U0001f56c" - FLAG_FOR_SABA_NL_BQ2 = "\U0001f3f4\U000e006e\U000e006c\U000e0062\U000e0071\U000e0032\U000e007f" - KISS_MAN_MEDIUM_SKIN_TONE_MAN = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - FLAG_FOR_CENTRAL_UG_C = "\U0001f3f4\U000e0075\U000e0067\U000e0063\U000e007f" - UPPER_RIGHT_SHADOWED_WHITE_CIRCLE = "\U0001f53f" - KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - FLAG_FOR_BENGO_AO_BGO = "\U0001f3f4\U000e0061\U000e006f\U000e0062\U000e0067\U000e006f\U000e007f" - DIGIT_FIVE = "5\ufe0f" - LEFT_HAND_TELEPHONE_RECEIVER = "\U0001f57b" - FLAG_FOR_VAYOTS_DZOR_AM_VD = "\U0001f3f4\U000e0061\U000e006d\U000e0076\U000e0064\U000e007f" - MAHJONG_TILE_WHITE_DRAGON = "\U0001f006" - TELEPHONE_RECEIVER_WITH_PAGE = "\U0001f57c" - KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" - FLAG_FOR_CABINDA_AO_CAB = "\U0001f3f4\U000e0061\U000e006f\U000e0063\U000e0061\U000e0062\U000e007f" - FLAG_FOR_AOSTA_VALLEY_IT_23 = "\U0001f3f4\U000e0069\U000e0074\U000e0032\U000e0033\U000e007f" - FLAG_FOR_BENGUELA_AO_BGU = "\U0001f3f4\U000e0061\U000e006f\U000e0062\U000e0067\U000e0075\U000e007f" - LOWER_LEFT_PENCIL = "\U0001f589" - FLAG_FOR_MADRE_DE_DIOS_PE_MDD = "\U0001f3f4\U000e0070\U000e0065\U000e006d\U000e0064\U000e0064\U000e007f" - BLACK_TOUCHTONE_TELEPHONE = "\U0001f57f" - TAG_PERCENT_SIGN = "\U000e0025" - SIDEWAYS_BLACK_LEFT_POINTING_INDEX = "\U0001f59a" - FLAG_FOR_SUCRE_CO_SUC = "\U0001f3f4\U000e0063\U000e006f\U000e0073\U000e0075\U000e0063\U000e007f" - FLAG_FOR_BIE_AO_BIE = "\U0001f3f4\U000e0061\U000e006f\U000e0062\U000e0069\U000e0065\U000e007f" - FLAG_FOR_BREMEN_DE_HB = "\U0001f3f4\U000e0064\U000e0065\U000e0068\U000e0062\U000e007f" - FLAG_FOR_SANT_JULIA_DE_LORIA_AD_06 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0036\U000e007f" - TURNED_OK_HAND_SIGN = "\U0001f58f" - FAMILY_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" - FLAG_FOR_VAUD_CH_VD = "\U0001f3f4\U000e0063\U000e0068\U000e0076\U000e0064\U000e007f" - FLAG_FOR_PORTLAND_JM_04 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0034\U000e007f" - FLAG_FOR_CUANZA_SUL_AO_CUS = "\U0001f3f4\U000e0061\U000e006f\U000e0063\U000e0075\U000e0073\U000e007f" - FLAG_FOR_ALTO_PARAGUAY_PY_16 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0036\U000e007f" - TAG_LATIN_CAPITAL_LETTER_B = "\U000e0042" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" - FLAG_FOR_HUAMBO_AO_HUA = "\U0001f3f4\U000e0061\U000e006f\U000e0068\U000e0075\U000e0061\U000e007f" - MAHJONG_TILE_EIGHT_OF_CIRCLES = "\U0001f020" - SIDEWAYS_WHITE_DOWN_POINTING_INDEX = "\U0001f59f" - FLAG_FOR_KYRENIA_CY_06 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0036\U000e007f" - KISS_MAN_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - KISS_MAN_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" - SIDEWAYS_WHITE_UP_POINTING_INDEX = "\U0001f59e" - COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - FLAG_FOR_META_CO_MET = "\U0001f3f4\U000e0063\U000e006f\U000e006d\U000e0065\U000e0074\U000e007f" - BOUQUET_OF_FLOWERS = "\U0001f395" - FLAG_FOR_HUILA_AO_HUI = "\U0001f3f4\U000e0061\U000e006f\U000e0068\U000e0075\U000e0069\U000e007f" - FLAG_FOR_BOTOSANI_RO_BT = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e0074\U000e007f" - FLAG_FOR_WESTERN_HIGHLANDS_PG_WHM = "\U0001f3f4\U000e0070\U000e0067\U000e0077\U000e0068\U000e006d\U000e007f" - MUSICAL_KEYBOARD_WITH_JACKS = "\U0001f398" - TAG_EXCLAMATION_MARK = "\U000e0021" - CIRCLED_CROSS_POMMEE = "\U0001f540" - FLAG_FOR_GRAND_CAPE_MOUNT_LR_CM = "\U0001f3f4\U000e006c\U000e0072\U000e0063\U000e006d\U000e007f" - FAMILY_MAN_BABY_BOY = "\U0001f468\u200d\U0001f476\u200d\U0001f466" - HEART_WITH_TIP_ON_THE_LEFT = "\U0001f394" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - FLAG_FOR_LUNDA_NORTE_AO_LNO = "\U0001f3f4\U000e0061\U000e006f\U000e006c\U000e006e\U000e006f\U000e007f" - CROSS_POMMEE_WITH_HALF_CIRCLE_BELOW = "\U0001f541" - FLAG_FOR_LUNDA_SUL_AO_LSU = "\U0001f3f4\U000e0061\U000e006f\U000e006c\U000e0073\U000e0075\U000e007f" - BLACK_DROPLET = "\U0001f322" - BLACK_SKULL_AND_CROSSBONES = "\U0001f571" - FLAG_FOR_MALANJE_AO_MAL = "\U0001f3f4\U000e0061\U000e006f\U000e006d\U000e0061\U000e006c\U000e007f" - TAG_LATIN_CAPITAL_LETTER_P = "\U000e0050" - SYMBOL_FOR_MARKS_CHAPTER = "\U0001f545" - FLAG_FOR_MANCHESTER_JM_12 = "\U0001f3f4\U000e006a\U000e006d\U000e0031\U000e0032\U000e007f" - CELTIC_CROSS = "\U0001f548" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" - REVERSED_THUMBS_UP_SIGN = "\U0001f592" - FLAG_FOR_NIGER_NG_NI = "\U0001f3f4\U000e006e\U000e0067\U000e006e\U000e0069\U000e007f" - NO_PIRACY = "\U0001f572" - FLAG_FOR_CUANZA_NORTE_AO_CNO = "\U0001f3f4\U000e0061\U000e006f\U000e0063\U000e006e\U000e006f\U000e007f" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - FLAG_FOR_TBILISI_GE_TB = "\U0001f3f4\U000e0067\U000e0065\U000e0074\U000e0062\U000e007f" - FLAG_FOR_KALBAJAR_AZ_KAL = "\U0001f3f4\U000e0061\U000e007a\U000e006b\U000e0061\U000e006c\U000e007f" - BLACK_PUSHPIN = "\U0001f588" - FLAG_FOR_CALARASI_RO_CL = "\U0001f3f4\U000e0072\U000e006f\U000e0063\U000e006c\U000e007f" - ENVELOPE_WITH_LIGHTNING = "\U0001f584" - MAHJONG_TILE_BACK = "\U0001f02b" - CLAMSHELL_MOBILE_PHONE = "\U0001f581" - FLAG_FOR_NAMIBE_AO_NAM = "\U0001f3f4\U000e0061\U000e006f\U000e006e\U000e0061\U000e006d\U000e007f" - FLAG_FOR_ARKHANGELSK_RU_ARK = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e0072\U000e006b\U000e007f" - BACK_OF_ENVELOPE = "\U0001f582" - TAG_LATIN_CAPITAL_LETTER_Q = "\U000e0051" - FLAG_FOR_MOXICO_AO_MOX = "\U0001f3f4\U000e0061\U000e006f\U000e006d\U000e006f\U000e0078\U000e007f" - TAG_LATIN_CAPITAL_LETTER_S = "\U000e0053" - TAG_LOW_LINE = "\U000e005f" - TAG_LATIN_CAPITAL_LETTER_N = "\U000e004e" - FLAG_FOR_HOKKAIDO_JP_01 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0031\U000e007f" - FLAG_FOR_BUENOS_AIRES_PROVINCE_AR_B = "\U0001f3f4\U000e0061\U000e0072\U000e0062\U000e007f" - TAG_LATIN_SMALL_LETTER_K = "\U000e006b" - SIDEWAYS_WHITE_LEFT_POINTING_INDEX = "\U0001f598" - FLYING_ENVELOPE = "\U0001f585" - CROSS_POMMEE = "\U0001f542" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_LAPLAND_FI_10 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0030\U000e007f" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc" - TAG_LATIN_CAPITAL_LETTER_U = "\U000e0055" - FLAG_FOR_TAIWAN_CN_71 = "\U0001f3f4\U000e0063\U000e006e\U000e0037\U000e0031\U000e007f" - FLAG_FOR_SALTA_AR_A = "\U0001f3f4\U000e0061\U000e0072\U000e0061\U000e007f" - TAG_RIGHT_CURLY_BRACKET = "\U000e007d" - WHITE_DOWN_POINTING_LEFT_HAND_INDEX = "\U0001f597" - FLAG_FOR_LUALABA_CD_LU = "\U0001f3f4\U000e0063\U000e0064\U000e006c\U000e0075\U000e007f" - FLAG_FOR_SAINT_GEORGE_GD_03 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0033\U000e007f" - KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - TELEPHONE_ON_TOP_OF_MODEM = "\U0001f580" - FLAG_FOR_UIGE_AO_UIG = "\U0001f3f4\U000e0061\U000e006f\U000e0075\U000e0069\U000e0067\U000e007f" - FLAG_FOR_RHODE_ISLAND_US_RI = "\U0001f3f4\U000e0075\U000e0073\U000e0072\U000e0069\U000e007f" - DOUBLED_MALE_SIGN = "\u26a3" - STAMPED_ENVELOPE = "\U0001f583" - FLAG_FOR_AFYONKARAHISAR_TR_03 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0033\U000e007f" - MARRIAGE_SYMBOL = "\u26ad" - DOUBLED_FEMALE_SIGN = "\u26a2" - MALE_WITH_STROKE_AND_MALE_AND_FEMALE_SIGN = "\u26a7" - FLAG_FOR_SAN_LUIS_AR_D = "\U0001f3f4\U000e0061\U000e0072\U000e0064\U000e007f" - FLAG_FOR_QUANG_TRI_VN_25 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0035\U000e007f" - VERTICAL_MALE_WITH_STROKE_SIGN = "\u26a8" - HORIZONTAL_MALE_WITH_STROKE_SIGN = "\u26a9" - FLAG_FOR_ZHYTOMYRSHCHYNA_UA_18 = "\U0001f3f4\U000e0075\U000e0061\U000e0031\U000e0038\U000e007f" - FLAG_FOR_ZAIRE_AO_ZAI = "\U0001f3f4\U000e0061\U000e006f\U000e007a\U000e0061\U000e0069\U000e007f" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" - FLAG_FOR_CUANDO_CUBANGO_AO_CCU = "\U0001f3f4\U000e0061\U000e006f\U000e0063\U000e0063\U000e0075\U000e007f" - FLAG_FOR_CESAR_CO_CES = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0065\U000e0073\U000e007f" - JUNO = "\u26b5" - FLAG_FOR_EAST_KAZAKHSTAN_KZ_VOS = "\U0001f3f4\U000e006b\U000e007a\U000e0076\U000e006f\U000e0073\U000e007f" - BLACK_MOON_LILITH = "\u26b8" - VESTA = "\u26b6" - DIGIT_ZERO = "0\ufe0f" - FLAG_FOR_CUSCO_PE_CUS = "\U0001f3f4\U000e0070\U000e0065\U000e0063\U000e0075\U000e0073\U000e007f" - NEUTER = "\u26b2" - CERES = "\u26b3" - KISS_MAN_DARK_SKIN_TONE_WOMAN = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - FLAG_FOR_SYUNIK_AM_SU = "\U0001f3f4\U000e0061\U000e006d\U000e0073\U000e0075\U000e007f" - FLAG_FOR_LA_RIOJA_AR_F = "\U0001f3f4\U000e0061\U000e0072\U000e0066\U000e007f" - MALE_AND_FEMALE_SIGN = "\u26a5" - FLAG_FOR_LA_MASSANA_AD_04 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0034\U000e007f" - INTERLOCKED_FEMALE_AND_MALE_SIGN = "\u26a4" - WHITE_DRAUGHTS_KING = "\u26c1" - RIGHT_HAND_TELEPHONE_RECEIVER = "\U0001f57d" - WHITE_DRAUGHTS_MAN = "\u26c0" - SEMISEXTILE = "\u26ba" - FLAG_FOR_ZANZIBAR_CENTRAL_SOUTH_TZ_11 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0031\U000e007f" - FLAG_FOR_SAN_JUAN_AR_J = "\U0001f3f4\U000e0061\U000e0072\U000e006a\U000e007f" - FLAG_FOR_BATMAN_TR_72 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0032\U000e007f" - BLACK_DRAUGHTS_MAN = "\u26c2" - SQUARED_KEY = "\u26bf" - FLAG_FOR_NEW_IRELAND_PG_NIK = "\U0001f3f4\U000e0070\U000e0067\U000e006e\U000e0069\U000e006b\U000e007f" - SEXTILE = "\u26b9" - QUINCUNX = "\u26bb" - TRIANGLE_WITH_ROUNDED_CORNERS = "\U0001f6c6" - SESQUIQUADRATE = "\u26bc" - FAMILY_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_KALININGRAD_RU_KGD = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0067\U000e0064\U000e007f" + TAG_LATIN_CAPITAL_LETTER_T = "\U000e0054" + FLAG_FOR_TOMBOUCTOU_ML_6 = "\U0001f3f4\U000e006d\U000e006c\U000e0036\U000e007f" + COUPLE_WITH_HEART_WOMAN_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" + FLAG_FOR_ENCAMP_AD_03 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0033\U000e007f" + FLAG_FOR_MIAOLI_TW_MIA = "\U0001f3f4\U000e0074\U000e0077\U000e006d\U000e0069\U000e0061\U000e007f" + FLAG_FOR_KENTUCKY_US_KY = "\U0001f3f4\U000e0075\U000e0073\U000e006b\U000e0079\U000e007f" + FLAG_FOR_GUSINJE_ME_22 = "\U0001f3f4\U000e006d\U000e0065\U000e0032\U000e0032\U000e007f" + FLAG_FOR_SAATLY_AZ_SAT = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0061\U000e0074\U000e007f" FLAG_FOR_NUNAVUT_CA_NU = "\U0001f3f4\U000e0063\U000e0061\U000e006e\U000e0075\U000e007f" - WHITE_DIAMOND_IN_SQUARE = "\u26cb" - FLAG_FOR_LUANDA_AO_LUA = "\U0001f3f4\U000e0061\U000e006f\U000e006c\U000e0075\U000e0061\U000e007f" - MAHJONG_TILE_BAMBOO = "\U0001f024" - FLAG_FOR_LUXEMBOURG_LU_LU = "\U0001f3f4\U000e006c\U000e0075\U000e006c\U000e0075\U000e007f" - FLAG_FOR_CATAMARCA_AR_K = "\U0001f3f4\U000e0061\U000e0072\U000e006b\U000e007f" - CROSSING_LANES = "\u26cc" - FLAG_FOR_CHIHUAHUA_MX_CHH = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e0068\U000e0068\U000e007f" - FLAG_FOR_KANSAS_US_KS = "\U0001f3f4\U000e0075\U000e0073\U000e006b\U000e0073\U000e007f" - FLAG_FOR_BARBUDA_AG_10 = "\U0001f3f4\U000e0061\U000e0067\U000e0031\U000e0030\U000e007f" - TAG_LATIN_CAPITAL_LETTER_C = "\U000e0043" - BLACK_DRAUGHTS_KING = "\u26c3" - BLACK_SNOWMAN = "\u26c7" - FLAG_FOR_LA_PAMPA_AR_L = "\U0001f3f4\U000e0061\U000e0072\U000e006c\U000e007f" - TURNED_WHITE_SHOGI_PIECE = "\u26c9" - RAIN = "\u26c6" - SQUARED_SALTIRE = "\u26dd" - CAR_SLIDING = "\u26d0" - WHITE_LEFT_LANE_MERGE = "\u26d9" - BLACK_TWO_WAY_LEFT_WAY_TRAFFIC = "\u26d6" - BLACK_LEFT_LANE_MERGE = "\u26d8" - FLAG_FOR_MISIONES_AR_N = "\U0001f3f4\U000e0061\U000e0072\U000e006e\U000e007f" - HEAVY_WHITE_DOWN_POINTING_TRIANGLE = "\u26db" - LEFT_CLOSED_ENTRY = "\u26dc" - PALLAS = "\u26b4" - FLAG_FOR_FORMOSA_AR_P = "\U0001f3f4\U000e0061\U000e0072\U000e0070\U000e007f" - FLAG_FOR_DEIR_EZ_ZOR_SY_DY = "\U0001f3f4\U000e0073\U000e0079\U000e0064\U000e0079\U000e007f" - FLAG_FOR_NEUQUEN_AR_Q = "\U0001f3f4\U000e0061\U000e0072\U000e0071\U000e007f" - DRIVE_SLOW_SIGN = "\u26da" - CIRCLED_CROSSING_LANES = "\u26d2" - RECYCLING_SYMBOL_FOR_TYPE_6_PLASTICS = "\u2678" - MAN_WITH_HEADSCARF_LIGHT_SKIN_TONE = "\U0001f9d5\U0001f3fb\u200d\u2642\ufe0f" - RESTRICTED_LEFT_ENTRY_2 = "\u26e1" - HEAVY_CIRCLE_WITH_STROKE_AND_TWO_DOTS_ABOVE = "\u26e3" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_RIVERS_NG_RI = "\U0001f3f4\U000e006e\U000e0067\U000e0072\U000e0069\U000e007f" - MALE_WITH_STROKE_SIGN = "\u26a6" + FLAG_FOR_SPANISH_WELLS_BS_SW = "\U0001f3f4\U000e0062\U000e0073\U000e0073\U000e0077\U000e007f" + FLAG_FOR_BITLIS_TR_13 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0033\U000e007f" + FLAG_FOR_BADGHIS_AF_BDG = "\U0001f3f4\U000e0061\U000e0066\U000e0062\U000e0064\U000e0067\U000e007f" + KISS_MAN_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + FLAG_FOR_SAGA_JP_41 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0031\U000e007f" + FLAG_FOR_ST_PAUL_S_BAY_MT_51 = "\U0001f3f4\U000e006d\U000e0074\U000e0035\U000e0031\U000e007f" + FLAG_FOR_TORBA_VU_TOB = "\U0001f3f4\U000e0076\U000e0075\U000e0074\U000e006f\U000e0062\U000e007f" + KISS_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + FLAG_FOR_BERLIN_DE_BE = "\U0001f3f4\U000e0064\U000e0065\U000e0062\U000e0065\U000e007f" + FLAG_FOR_BABITE_LV_012 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0032\U000e007f" + FLAG_FOR_EL_VALLE_DO_37 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0037\U000e007f" + FLAG_FOR_BENI_SUEF_EG_BNS = "\U0001f3f4\U000e0065\U000e0067\U000e0062\U000e006e\U000e0073\U000e007f" + FLAG_FOR_SFAX_TN_61 = "\U0001f3f4\U000e0074\U000e006e\U000e0036\U000e0031\U000e007f" + FLAG_FOR_MONTE_CARLO_MC_MC = "\U0001f3f4\U000e006d\U000e0063\U000e006d\U000e0063\U000e007f" + FLAG_FOR_YUNNAN_CN_53 = "\U0001f3f4\U000e0063\U000e006e\U000e0035\U000e0033\U000e007f" + FLAG_FOR_KLAIPEDOS_MUNICIPALITY_LT_20 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0030\U000e007f" + FLAG_FOR_BARINGO_KE_01 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0031\U000e007f" + FLAG_FOR_CENTRAL_RIVER_DIVISION_GM_M = "\U0001f3f4\U000e0067\U000e006d\U000e006d\U000e007f" + FLAG_FOR_AMANAT_AL_ASIMAH_YE_SA = "\U0001f3f4\U000e0079\U000e0065\U000e0073\U000e0061\U000e007f" + FLAG_FOR_HAUTS_BASSINS_BF_09 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0039\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" + TAG_EQUALS_SIGN = "\U000e003d" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_SENGLEA_MT_20 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0030\U000e007f" + ALTERNATE_ONE_WAY_LEFT_WAY_TRAFFIC = "\u26d5" + FLAG_FOR_G_ASRI_MT_16 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0036\U000e007f" + WHITE_CHESS_PAWN = "\u2659" + FLAG_FOR_HAU_GIANG_VN_73 = "\U0001f3f4\U000e0076\U000e006e\U000e0037\U000e0033\U000e007f" + MAN_ZOMBIE_MEDIUM_SKIN_TONE = "\U0001f9df\U0001f3fd\u200d\u2642\ufe0f" + FLAG_FOR_TEARCE_MK_75 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0035\U000e007f" + FLAG_FOR_FAMAGUSTA_CY_04 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0034\U000e007f" + FLAG_FOR_COTOPAXI_EC_X = "\U0001f3f4\U000e0065\U000e0063\U000e0078\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_ANG_THONG_TH_15 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0035\U000e007f" + RECYCLING_SYMBOL_FOR_TYPE_2_PLASTICS = "\u2674" + FLAG_FOR_SETUBAL_PT_15 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0035\U000e007f" + BLACK_CIRCLE_WITH_WHITE_DOT_RIGHT = "\u2688" + WHITE_SPADE_SUIT = "\u2664" + FLAG_FOR_DAGDA_LV_024 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0034\U000e007f" + FLAG_FOR_BAR_ME_02 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0032\U000e007f" + FLAG_FOR_CATALONIA_ES_CT = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e0074\U000e007f" + COUPLE_WITH_HEART_MAN_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FLAG_FOR_WESTERN_SB_WE = "\U0001f3f4\U000e0073\U000e0062\U000e0077\U000e0065\U000e007f" + FLAG_FOR_BAYQONGYR_KZ_BAY = "\U0001f3f4\U000e006b\U000e007a\U000e0062\U000e0061\U000e0079\U000e007f" + NOTE_PAD = "\U0001f5ca" + BLACK_CHESS_KING = "\u265a" + FLAG_FOR_PORTO_PT_13 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0033\U000e007f" + FLAG_FOR_KAMPONG_CHHNANG_KH_4 = "\U0001f3f4\U000e006b\U000e0068\U000e0034\U000e007f" + FLAG_FOR_DAKAR_SN_DK = "\U0001f3f4\U000e0073\U000e006e\U000e0064\U000e006b\U000e007f" + FLAG_FOR_FEDERAL_CAPITAL_TERRITORY_PL_PM = "\U0001f3f4\U000e0070\U000e006c\U000e0070\U000e006d\U000e007f" + WHITE_TOUCHTONE_TELEPHONE = "\U0001f57e" + FLAG_FOR_TAMIL_NADU_IN_TN = "\U0001f3f4\U000e0069\U000e006e\U000e0074\U000e006e\U000e007f" + FLAG_FOR_BRAGA_PT_03 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0033\U000e007f" + FLAG_FOR_SPELUGUES_MC_SP = "\U0001f3f4\U000e006d\U000e0063\U000e0073\U000e0070\U000e007f" + FLAG_FOR_JHARKHAND_IN_JH = "\U0001f3f4\U000e0069\U000e006e\U000e006a\U000e0068\U000e007f" + FLAG_FOR_BOCAS_DEL_TORO_PA_1 = "\U0001f3f4\U000e0070\U000e0061\U000e0031\U000e007f" + FLAG_FOR_CANAR_EC_F = "\U0001f3f4\U000e0065\U000e0063\U000e0066\U000e007f" + FLAG_FOR_AICHI_JP_23 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0033\U000e007f" + FLAG_FOR_OMAHEKE_NA_OH = "\U0001f3f4\U000e006e\U000e0061\U000e006f\U000e0068\U000e007f" + FLAG_FOR_MERSIN_TR_33 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0033\U000e007f" + FLAG_FOR_OSH_REGION_KG_O = "\U0001f3f4\U000e006b\U000e0067\U000e006f\U000e007f" + FLAG_FOR_MIYAZAKI_JP_45 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0035\U000e007f" + WHITE_RIGHT_POINTING_INDEX = "\u261e" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + FLAG_FOR_PAIJANNE_TAVASTIA_FI_16 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0036\U000e007f" + FLAG_FOR_TARANAKI_NZ_TKI = "\U0001f3f4\U000e006e\U000e007a\U000e0074\U000e006b\U000e0069\U000e007f" + FLAG_FOR_ILLINOIS_US_IL = "\U0001f3f4\U000e0075\U000e0073\U000e0069\U000e006c\U000e007f" + FLAG_FOR_BAMYAN_AF_BAM = "\U0001f3f4\U000e0061\U000e0066\U000e0062\U000e0061\U000e006d\U000e007f" + FLAG_FOR_FLORIDA_UY_FD = "\U0001f3f4\U000e0075\U000e0079\U000e0066\U000e0064\U000e007f" + UP_POINTING_AIRPLANE = "\U0001f6e7" + FLAG_FOR_THAI_NGUYEN_VN_69 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0039\U000e007f" + FLAG_FOR_VIROVITICA_PODRAVINA_HR_10 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0030\U000e007f" + KISS_MAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" + WHITE_LEFT_POINTING_INDEX = "\u261c" + FLAG_FOR_KIGOMA_TZ_08 = "\U0001f3f4\U000e0074\U000e007a\U000e0030\U000e0038\U000e007f" + FLAG_FOR_SUL_GW_S = "\U0001f3f4\U000e0067\U000e0077\U000e0073\U000e007f" + FLAG_FOR_BELIZE_BZ_BZ = "\U0001f3f4\U000e0062\U000e007a\U000e0062\U000e007a\U000e007f" + FLAG_FOR_HHOHHO_SZ_HH = "\U0001f3f4\U000e0073\U000e007a\U000e0068\U000e0068\U000e007f" + FLAG_FOR_AKTOBE_KZ_AKT = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e006b\U000e0074\U000e007f" + FLAG_FOR_ZHEJIANG_CN_33 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0033\U000e007f" + FLAG_FOR_EL_PARAISO_HN_EP = "\U0001f3f4\U000e0068\U000e006e\U000e0065\U000e0070\U000e007f" + MONOGRAM_FOR_YIN = "\u268b" + FLAG_FOR_NUGAL_SO_NU = "\U0001f3f4\U000e0073\U000e006f\U000e006e\U000e0075\U000e007f" + MAHJONG_TILE_NINE_OF_CHARACTERS = "\U0001f00f" + FLAG_FOR_ATTICA_GR_I = "\U0001f3f4\U000e0067\U000e0072\U000e0069\U000e007f" + NOTE_PAGE = "\U0001f5c9" + FLAG_FOR_DURBE_LV_028 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0038\U000e007f" + FLAG_FOR_CAYO_BZ_CY = "\U0001f3f4\U000e0062\U000e007a\U000e0063\U000e0079\U000e007f" + SOFT_SHELL_FLOPPY_DISK = "\U0001f5ac" + FLAG_FOR_SAKHA_RU_SA = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0061\U000e007f" + FLAG_FOR_SEGOU_ML_4 = "\U0001f3f4\U000e006d\U000e006c\U000e0034\U000e007f" + FLAG_FOR_BALKH_AF_BAL = "\U0001f3f4\U000e0061\U000e0066\U000e0062\U000e0061\U000e006c\U000e007f" + FLAG_FOR_WESTFJORDS_IS_4 = "\U0001f3f4\U000e0069\U000e0073\U000e0034\U000e007f" + FLAG_FOR_CALIFORNIA_US_CA = "\U0001f3f4\U000e0075\U000e0073\U000e0063\U000e0061\U000e007f" + FLAG_FOR_SETIF_DZ_19 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0039\U000e007f" + TAG_COMMA = "\U000e002c" + FLAG_FOR_BAJA_VERAPAZ_GT_BV = "\U0001f3f4\U000e0067\U000e0074\U000e0062\U000e0076\U000e007f" TAG_LATIN_CAPITAL_LETTER_E = "\U000e0045" - FLAG_FOR_ANSE_ROYALE_SC_05 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0035\U000e007f" - PENTAGRAM = "\u26e4" - FLAG_FOR_TUCUMAN_AR_T = "\U0001f3f4\U000e0061\U000e0072\U000e0074\U000e007f" + FLAG_FOR_WEST_CM_OU = "\U0001f3f4\U000e0063\U000e006d\U000e006f\U000e0075\U000e007f" + FLAG_FOR_SHAANXI_CN_61 = "\U0001f3f4\U000e0063\U000e006e\U000e0036\U000e0031\U000e007f" + FLAG_FOR_SOUTH_CM_SU = "\U0001f3f4\U000e0063\U000e006d\U000e0073\U000e0075\U000e007f" + FLAG_FOR_RAKHINE_MM_16 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0036\U000e007f" + FLAG_FOR_BARIMA_WAINI_GY_BA = "\U0001f3f4\U000e0067\U000e0079\U000e0062\U000e0061\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_SANA_A_YE_SN = "\U0001f3f4\U000e0079\U000e0065\U000e0073\U000e006e\U000e007f" + FLAG_FOR_VILNIAUS_MUNICIPALITY_LT_57 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0037\U000e007f" + FLAG_FOR_RANKOVCE_MK_65 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0035\U000e007f" + FLAG_FOR_WEST_BENGAL_IN_WB = "\U0001f3f4\U000e0069\U000e006e\U000e0077\U000e0062\U000e007f" + TAG_LEFT_CURLY_BRACKET = "\U000e007b" + FLAG_FOR_KIROVOHRADSCHYNA_UA_35 = "\U0001f3f4\U000e0075\U000e0061\U000e0033\U000e0035\U000e007f" + LEFT_THOUGHT_BUBBLE = "\U0001f5ec" + FLAG_FOR_KAPOSVAR_HU_KV = "\U0001f3f4\U000e0068\U000e0075\U000e006b\U000e0076\U000e007f" + RIGHT_SPEAKER_WITH_THREE_SOUND_WAVES = "\U0001f56a" + FLAG_FOR_ARIMA_TT_ARI = "\U0001f3f4\U000e0074\U000e0074\U000e0061\U000e0072\U000e0069\U000e007f" + WHITE_CLUB_SUIT = "\u2667" + REVERSED_THUMBS_DOWN_SIGN = "\U0001f593" + BEAMED_EIGHTH_NOTES = "\u266b" + FLAG_FOR_JUFRA_LY_JU = "\U0001f3f4\U000e006c\U000e0079\U000e006a\U000e0075\U000e007f" + FLAG_FOR_BAGHLAN_AF_BGL = "\U0001f3f4\U000e0061\U000e0066\U000e0062\U000e0067\U000e006c\U000e007f" + TAG_RIGHT_PARENTHESIS = "\U000e0029" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_OHIO_US_OH = "\U0001f3f4\U000e0075\U000e0073\U000e006f\U000e0068\U000e007f" + CANCEL_TAG = "\U000e007f" + FLAG_FOR_ST_MARTIN_FR_MF = "\U0001f3f4\U000e0066\U000e0072\U000e006d\U000e0066\U000e007f" + RIGHT_HAND_TELEPHONE_RECEIVER = "\U0001f57d" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468" + FLAG_FOR_ASTANA_KZ_AST = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e0073\U000e0074\U000e007f" + FLAG_FOR_EASTERN_SL_E = "\U0001f3f4\U000e0073\U000e006c\U000e0065\U000e007f" + FLAG_FOR_YALA_TH_95 = "\U0001f3f4\U000e0074\U000e0068\U000e0039\U000e0035\U000e007f" + FLAG_FOR_AHAL_TM_A = "\U0001f3f4\U000e0074\U000e006d\U000e0061\U000e007f" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" + MAHJONG_TILE_SIX_OF_CIRCLES = "\U0001f01e" + TURNED_BLACK_SHOGI_PIECE = "\u26ca" + FLAG_FOR_WOQOOYI_GALBEED_SO_WO = "\U0001f3f4\U000e0073\U000e006f\U000e0077\U000e006f\U000e007f" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" + FLAG_FOR_MAGWAY_MM_03 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0033\U000e007f" + FLAG_FOR_SAVANNAKHET_LA_SV = "\U0001f3f4\U000e006c\U000e0061\U000e0073\U000e0076\U000e007f" + FLAG_FOR_CRETE_GR_M = "\U0001f3f4\U000e0067\U000e0072\U000e006d\U000e007f" + FLAG_FOR_BIRZAI_LT_06 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0036\U000e007f" + FLAG_FOR_NGIWAL_PW_228 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0032\U000e0038\U000e007f" + FLAG_FOR_RADOVIS_MK_64 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0034\U000e007f" + FLOWER = "\u2698" + FLAG_FOR_PLANKEN_LI_05 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0035\U000e007f" + FLAG_FOR_MANGROVE_CAY_BS_MC = "\U0001f3f4\U000e0062\U000e0073\U000e006d\U000e0063\U000e007f" + FLAG_FOR_EMBU_KE_06 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0036\U000e007f" + FLAG_FOR_FARAH_AF_FRA = "\U0001f3f4\U000e0061\U000e0066\U000e0066\U000e0072\U000e0061\U000e007f" + THREE_RAYS_BELOW = "\U0001f5e5" + COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + FLAG_FOR_THURGAU_CH_TG = "\U0001f3f4\U000e0063\U000e0068\U000e0074\U000e0067\U000e007f" + FLAG_FOR_KAMPONG_CHAM_KH_3 = "\U0001f3f4\U000e006b\U000e0068\U000e0033\U000e007f" + FLAG_FOR_LESSER_SUNDA_ISLANDS_ID_NU = "\U0001f3f4\U000e0069\U000e0064\U000e006e\U000e0075\U000e007f" + FLAG_FOR_BERRY_ISLANDS_BS_BY = "\U0001f3f4\U000e0062\U000e0073\U000e0062\U000e0079\U000e007f" + TWO_SPEECH_BUBBLES = "\U0001f5ea" + FLAG_FOR_WEST_GREECE_GR_G = "\U0001f3f4\U000e0067\U000e0072\U000e0067\U000e007f" + WHITE_SUN = "\U0001f323" + TAG_ASTERISK = "\U000e002a" + PAGE_WITH_CIRCLED_TEXT = "\U0001f5df" + FAMILY_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_OGOOUE_MARITIME_GA_8 = "\U0001f3f4\U000e0067\U000e0061\U000e0038\U000e007f" + FLAG_FOR_MADEIRA_PT_30 = "\U0001f3f4\U000e0070\U000e0074\U000e0033\U000e0030\U000e007f" + FLAG_FOR_GURIA_GE_GU = "\U0001f3f4\U000e0067\U000e0065\U000e0067\U000e0075\U000e007f" + FLAG_FOR_PARA_BR_PA = "\U0001f3f4\U000e0062\U000e0072\U000e0070\U000e0061\U000e007f" + FAMILY_WOMAN_BABY_BABY = "\U0001f469\u200d\U0001f476\u200d\U0001f476" + FLAG_FOR_SCHAFFHAUSEN_CH_SH = "\U0001f3f4\U000e0063\U000e0068\U000e0073\U000e0068\U000e007f" + FLAG_FOR_GHOR_AF_GHO = "\U0001f3f4\U000e0061\U000e0066\U000e0067\U000e0068\U000e006f\U000e007f" + FLAG_FOR_ARKANSAS_US_AR = "\U0001f3f4\U000e0075\U000e0073\U000e0061\U000e0072\U000e007f" + FLAG_FOR_DRENTHE_NL_DR = "\U0001f3f4\U000e006e\U000e006c\U000e0064\U000e0072\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_GHAZNI_AF_GHA = "\U0001f3f4\U000e0061\U000e0066\U000e0067\U000e0068\U000e0061\U000e007f" + FLAG_FOR_OZAMA_DO_40 = "\U0001f3f4\U000e0064\U000e006f\U000e0034\U000e0030\U000e007f" + FLAG_FOR_HERAT_AF_HER = "\U0001f3f4\U000e0061\U000e0066\U000e0068\U000e0065\U000e0072\U000e007f" + TAG_DIGIT_FOUR = "\U000e0034" + FLAG_FOR_NEBRASKA_US_NE = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0065\U000e007f" + FLAG_FOR_ARICA_Y_PARINACOTA_CL_AP = "\U0001f3f4\U000e0063\U000e006c\U000e0061\U000e0070\U000e007f" + FLAG_FOR_ZANJAN_IR_11 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0031\U000e007f" + FLAG_FOR_BRANDENBURG_DE_BB = "\U0001f3f4\U000e0064\U000e0065\U000e0062\U000e0062\U000e007f" + FLAG_FOR_BISTRICA_OB_SOTLI_SI_149 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0039\U000e007f" + MAHJONG_TILE_NORTH_WIND = "\U0001f003" + FLAG_FOR_ALABAMA_US_AL = "\U0001f3f4\U000e0075\U000e0073\U000e0061\U000e006c\U000e007f" + FLAG_FOR_AL_RAYYAN_QA_RA = "\U0001f3f4\U000e0071\U000e0061\U000e0072\U000e0061\U000e007f" + LOWER_RIGHT_PENCIL = "\u270e" + FLAG_FOR_SKRUNDA_LV_093 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0033\U000e007f" + NUMBER_SIGN = "#\ufe0f" + EMPTY_NOTE_PAGE = "\U0001f5c6" + DIGIT_FOUR = "4\ufe0f" + FLAG_FOR_KIDAL_ML_8 = "\U0001f3f4\U000e006d\U000e006c\U000e0038\U000e007f" + FLAG_FOR_BACAU_RO_BC = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e0063\U000e007f" + BACK_OF_ENVELOPE = "\U0001f582" + MAN_ZOMBIE_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9df\U0001f3fc\u200d\u2642\ufe0f" + FLAG_FOR_BURGENLAND_AT_1 = "\U0001f3f4\U000e0061\U000e0074\U000e0031\U000e007f" + FLAG_FOR_KAYANGEL_PW_100 = "\U0001f3f4\U000e0070\U000e0077\U000e0031\U000e0030\U000e0030\U000e007f" + FLAG_FOR_TOPLICA_RS_21 = "\U0001f3f4\U000e0072\U000e0073\U000e0032\U000e0031\U000e007f" + FLAG_FOR_KRASNODAR_KRAI_RU_KDA = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0064\U000e0061\U000e007f" + FLAG_FOR_LAUTEM_TL_LA = "\U0001f3f4\U000e0074\U000e006c\U000e006c\U000e0061\U000e007f" + UPPER_RIGHT_PENCIL = "\u2710" + FLAG_FOR_BANGKOK_TH_10 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0030\U000e007f" + FLAG_FOR_BOUGAINVILLE_PG_NSB = "\U0001f3f4\U000e0070\U000e0067\U000e006e\U000e0073\U000e0062\U000e007f" + FLAG_FOR_GRENADINES_VC_06 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0036\U000e007f" + WIRED_KEYBOARD = "\U0001f5ae" + FLAG_FOR_KABUL_AF_KAB = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e0061\U000e0062\U000e007f" + TAG_LATIN_CAPITAL_LETTER_J = "\U000e004a" + FLAG_FOR_AMAZONAS_CO_AMA = "\U0001f3f4\U000e0063\U000e006f\U000e0061\U000e006d\U000e0061\U000e007f" + DIGIT_NINE = "9\ufe0f" + FLAG_FOR_TASMAN_NZ_TAS = "\U0001f3f4\U000e006e\U000e007a\U000e0074\U000e0061\U000e0073\U000e007f" + FLAG_FOR_STYRIA_AT_6 = "\U0001f3f4\U000e0061\U000e0074\U000e0036\U000e007f" + FLAG_FOR_GABORONE_BW_GA = "\U0001f3f4\U000e0062\U000e0077\U000e0067\U000e0061\U000e007f" + FLAG_FOR_SAINT_MARK_GD_05 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0035\U000e007f" + FLAG_FOR_VALLE_DEL_CAUCA_CO_VAC = "\U0001f3f4\U000e0063\U000e006f\U000e0076\U000e0061\U000e0063\U000e007f" + FLAG_FOR_KHAKASSIA_RU_KK = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e006b\U000e007f" + FLAG_FOR_MISRATA_LY_MI = "\U0001f3f4\U000e006c\U000e0079\U000e006d\U000e0069\U000e007f" + FLAG_FOR_QUEENSLAND_AU_QLD = "\U0001f3f4\U000e0061\U000e0075\U000e0071\U000e006c\U000e0064\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_OSAKA_JP_27 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0037\U000e007f" + FLAG_FOR_MICHOACAN_MX_MIC = "\U0001f3f4\U000e006d\U000e0078\U000e006d\U000e0069\U000e0063\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" + FAMILY_MAN_WOMAN_BOY_GIRL = "\U0001f468\u200d\U0001f469\u200d\U0001f466\u200d\U0001f467" + KISS_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" + BLACK_UP_POINTING_BACKHAND_INDEX = "\U0001f5a2" + RIGHT_SPEAKER = "\U0001f568" + COMBINING_ENCLOSING_KEYCAP = "\u20e3" + FLAG_FOR_AZUAY_EC_A = "\U0001f3f4\U000e0065\U000e0063\U000e0061\U000e007f" + FLAG_FOR_LUHANSHCHYNA_UA_09 = "\U0001f3f4\U000e0075\U000e0061\U000e0030\U000e0039\U000e007f" + FLAG_FOR_MAHARASHTRA_IN_MH = "\U0001f3f4\U000e0069\U000e006e\U000e006d\U000e0068\U000e007f" + UPPER_RIGHT_SHADOWED_WHITE_CIRCLE = "\U0001f53f" + FLAG_FOR_INSULAR_GQ_I = "\U0001f3f4\U000e0067\U000e0071\U000e0069\U000e007f" + JUPITER = "\u2643" + FLAG_FOR_AKKAR_LB_AK = "\U0001f3f4\U000e006c\U000e0062\U000e0061\U000e006b\U000e007f" + FLAG_FOR_SOHAG_EG_SHG = "\U0001f3f4\U000e0065\U000e0067\U000e0073\U000e0068\U000e0067\U000e007f" + FLAG_FOR_MOHELI_KM_M = "\U0001f3f4\U000e006b\U000e006d\U000e006d\U000e007f" + FLAG_FOR_AL_AHMADI_KW_AH = "\U0001f3f4\U000e006b\U000e0077\U000e0061\U000e0068\U000e007f" + WOMAN_IN_TUXEDO_LIGHT_SKIN_TONE = "\U0001f935\U0001f3fb\u200d\u2640\ufe0f" + FLAG_FOR_GUADALCANAL_SB_GU = "\U0001f3f4\U000e0073\U000e0062\U000e0067\U000e0075\U000e007f" + FLAG_FOR_CIBITOKE_BI_CI = "\U0001f3f4\U000e0062\U000e0069\U000e0063\U000e0069\U000e007f" + WOMAN_ZOMBIE_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9df\U0001f3fc\u200d\u2640\ufe0f" + FLAG_FOR_BAS_UELE_CD_BU = "\U0001f3f4\U000e0063\U000e0064\U000e0062\U000e0075\U000e007f" + FLAG_FOR_NEVIS_KN_N = "\U0001f3f4\U000e006b\U000e006e\U000e006e\U000e007f" + FLAG_FOR_BONAIRE_BQ_BO = "\U0001f3f4\U000e0062\U000e0071\U000e0062\U000e006f\U000e007f" + FLAG_FOR_ANCASH_PE_ANC = "\U0001f3f4\U000e0070\U000e0065\U000e0061\U000e006e\U000e0063\U000e007f" + CAR_SLIDING = "\u26d0" + DIGRAM_FOR_LESSER_YANG = "\u268e" + THREE_NETWORKED_COMPUTERS = "\U0001f5a7" + FLAG_FOR_ASUNCION_PY_ASU = "\U0001f3f4\U000e0070\U000e0079\U000e0061\U000e0073\U000e0075\U000e007f" + CROSS_POMMEE_WITH_HALF_CIRCLE_BELOW = "\U0001f541" + FLAG_FOR_TOLIMA_CO_TOL = "\U0001f3f4\U000e0063\U000e006f\U000e0074\U000e006f\U000e006c\U000e007f" + TAG_DIGIT_ONE = "\U000e0031" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_JEWISH_RU_YEV = "\U0001f3f4\U000e0072\U000e0075\U000e0079\U000e0065\U000e0076\U000e007f" + FLAG_FOR_LA_PAZ_HN_LP = "\U0001f3f4\U000e0068\U000e006e\U000e006c\U000e0070\U000e007f" + FLAG_FOR_RIO_SAN_JUAN_NI_SJ = "\U0001f3f4\U000e006e\U000e0069\U000e0073\U000e006a\U000e007f" + FLAG_FOR_PAYS_DE_LA_LOIRE_FR_PDL = "\U0001f3f4\U000e0066\U000e0072\U000e0070\U000e0064\U000e006c\U000e007f" + FLAG_FOR_RIVERS_NG_RI = "\U0001f3f4\U000e006e\U000e0067\U000e0072\U000e0069\U000e007f" + OLD_PERSONAL_COMPUTER = "\U0001f5b3" + FLAG_FOR_DAEGU_KR_27 = "\U0001f3f4\U000e006b\U000e0072\U000e0032\U000e0037\U000e007f" + EMPTY_NOTE_PAD = "\U0001f5c7" + FLAG_FOR_SHAN_MM_17 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0037\U000e007f" + BLACK_FLAG_2 = "\u2691" + MAHJONG_TILE_SEVEN_OF_CHARACTERS = "\U0001f00d" + FAMILY_MAN_BOY_GIRL = "\U0001f468\u200d\U0001f466\u200d\U0001f467" + FLAG_FOR_ADANA_TR_01 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0031\U000e007f" + TAG_LATIN_CAPITAL_LETTER_C = "\U000e0043" + TWO_BUTTON_MOUSE = "\U0001f5b0" + ASTERISK = "*\ufe0f" + MAHJONG_TILE_FOUR_OF_CIRCLES = "\U0001f01c" + FLAG_FOR_KAPISA_AF_KAP = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e0061\U000e0070\U000e007f" + FLAG_FOR_MON_MM_15 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0035\U000e007f" + FLAG_FOR_AL_BURAIMI_OM_BU = "\U0001f3f4\U000e006f\U000e006d\U000e0062\U000e0075\U000e007f" + FLAG_FOR_AGALEGA_MU_AG = "\U0001f3f4\U000e006d\U000e0075\U000e0061\U000e0067\U000e007f" + ONE_BUTTON_MOUSE = "\U0001f5af" + FLAG_FOR_LOGAR_AF_LOG = "\U0001f3f4\U000e0061\U000e0066\U000e006c\U000e006f\U000e0067\U000e007f" + FLAG_FOR_BEL_OMBRE_SC_10 = "\U0001f3f4\U000e0073\U000e0063\U000e0031\U000e0030\U000e007f" + FLAG_FOR_ORANGE_WALK_BZ_OW = "\U0001f3f4\U000e0062\U000e007a\U000e006f\U000e0077\U000e007f" + MALE_WITH_STROKE_AND_MALE_AND_FEMALE_SIGN = "\u26a7" + FLAG_FOR_KANDAHAR_AF_KAN = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e0061\U000e006e\U000e007f" + TAPE_CARTRIDGE = "\U0001f5ad" + FLAG_FOR_ULAANBAATAR_MN_1 = "\U0001f3f4\U000e006d\U000e006e\U000e0031\U000e007f" + FLAG_FOR_FARYAB_AF_FYB = "\U0001f3f4\U000e0061\U000e0066\U000e0066\U000e0079\U000e0062\U000e007f" + TAG_LATIN_SMALL_LETTER_F = "\U000e0066" + FLAG_FOR_PARWAN_AF_PAR = "\U0001f3f4\U000e0061\U000e0066\U000e0070\U000e0061\U000e0072\U000e007f" + FLAG_FOR_NIMRUZ_AF_NIM = "\U0001f3f4\U000e0061\U000e0066\U000e006e\U000e0069\U000e006d\U000e007f" + FLAG_FOR_HIIU_EE_39 = "\U0001f3f4\U000e0065\U000e0065\U000e0033\U000e0039\U000e007f" + FLAG_FOR_EXTREMADURA_ES_EX = "\U0001f3f4\U000e0065\U000e0073\U000e0065\U000e0078\U000e007f" + FLAG_FOR_SABA_BQ_SA = "\U0001f3f4\U000e0062\U000e0071\U000e0073\U000e0061\U000e007f" + FLAG_FOR_KARLOVAC_HR_04 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0034\U000e007f" + FLAG_FOR_BROD_POSAVINA_HR_12 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0032\U000e007f" + FLAG_FOR_NANGARHAR_AF_NAN = "\U0001f3f4\U000e0061\U000e0066\U000e006e\U000e0061\U000e006e\U000e007f" + MAHJONG_TILE_SEVEN_OF_CIRCLES = "\U0001f01f" + TRIGRAM_FOR_HEAVEN = "\u2630" + DIGIT_SEVEN = "7\ufe0f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" + RECYCLING_SYMBOL_FOR_TYPE_1_PLASTICS = "\u2673" + FLAG_FOR_CORSE_FR_COR = "\U0001f3f4\U000e0066\U000e0072\U000e0063\U000e006f\U000e0072\U000e007f" + MAN_WITH_HEADSCARF_MEDIUM_SKIN_TONE = "\U0001f9d5\U0001f3fd\u200d\u2642\ufe0f" + FLAG_FOR_HAMADAN_IR_24 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0034\U000e007f" + FLAG_FOR_FARS_IR_14 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0034\U000e007f" + FLAG_FOR_FRENCH_GUIANA_FR_GF = "\U0001f3f4\U000e0066\U000e0072\U000e0067\U000e0066\U000e007f" + FLAG_FOR_TICINO_CH_TI = "\U0001f3f4\U000e0063\U000e0068\U000e0074\U000e0069\U000e007f" + FLAG_FOR_BOR_RS_14 = "\U0001f3f4\U000e0072\U000e0073\U000e0031\U000e0034\U000e007f" + FLAG_FOR_UTTARADIT_TH_53 = "\U0001f3f4\U000e0074\U000e0068\U000e0035\U000e0033\U000e007f" + TAG_LATIN_SMALL_LETTER_M = "\U000e006d" + FLAG_FOR_BAMAKO_ML_BKO = "\U0001f3f4\U000e006d\U000e006c\U000e0062\U000e006b\U000e006f\U000e007f" + FLAG_FOR_ESPIRITO_SANTO_BR_ES = "\U0001f3f4\U000e0062\U000e0072\U000e0065\U000e0073\U000e007f" + TAG_LATIN_SMALL_LETTER_R = "\U000e0072" + FLAG_FOR_BOLIKHAMSAI_LA_BL = "\U0001f3f4\U000e006c\U000e0061\U000e0062\U000e006c\U000e007f" + BULLHORN_WITH_SOUND_WAVES = "\U0001f56c" + FLAG_FOR_HALLAND_SE_N = "\U0001f3f4\U000e0073\U000e0065\U000e006e\U000e007f" + FLAG_FOR_UPPER_DEMERARA_BERBICE_GY_UD = "\U0001f3f4\U000e0067\U000e0079\U000e0075\U000e0064\U000e007f" + WOMAN_ZOMBIE_MEDIUM_SKIN_TONE = "\U0001f9df\U0001f3fd\u200d\u2640\ufe0f" + FLAG_FOR_ZIROVNICA_SI_192 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0039\U000e0032\U000e007f" + FLAG_FOR_TAITUNG_TW_TTT = "\U0001f3f4\U000e0074\U000e0077\U000e0074\U000e0074\U000e0074\U000e007f" + FLAG_FOR_NANUMANGA_TV_NMG = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e006d\U000e0067\U000e007f" + FLAG_FOR_TUNAPUNA_PIARCO_TT_TUP = "\U0001f3f4\U000e0074\U000e0074\U000e0074\U000e0075\U000e0070\U000e007f" + TAG_DIGIT_SEVEN = "\U000e0037" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" + KEYBOARD_AND_MOUSE = "\U0001f5a6" + MAHJONG_TILE_GREEN_DRAGON = "\U0001f005" + FLAG_FOR_CEUTA_ES_CE = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e0065\U000e007f" + KISS_MAN_MEDIUM_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" + FLAG_FOR_SABARAGAMUWA_LK_9 = "\U0001f3f4\U000e006c\U000e006b\U000e0039\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + FLAG_FOR_BUTNAN_LY_BU = "\U0001f3f4\U000e006c\U000e0079\U000e0062\U000e0075\U000e007f" + FLAG_FOR_COLIMA_MX_COL = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e006f\U000e006c\U000e007f" + FLAG_FOR_QUEBEC_CA_QC = "\U0001f3f4\U000e0063\U000e0061\U000e0071\U000e0063\U000e007f" + WHITE_DOWN_POINTING_INDEX = "\u261f" + FLAG_FOR_CUNDINAMARCA_CO_CUN = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0075\U000e006e\U000e007f" + TAG_LATIN_CAPITAL_LETTER_D = "\U000e0044" + FLAG_FOR_DAMASCUS_SY_DI = "\U0001f3f4\U000e0073\U000e0079\U000e0064\U000e0069\U000e007f" + FLAG_FOR_DUBAI_AE_DU = "\U0001f3f4\U000e0061\U000e0065\U000e0064\U000e0075\U000e007f" + SHIBUYA = "\ue50a" + FLAG_FOR_KAYES_ML_1 = "\U0001f3f4\U000e006d\U000e006c\U000e0031\U000e007f" + FLAG_FOR_CEARA_BR_CE = "\U0001f3f4\U000e0062\U000e0072\U000e0063\U000e0065\U000e007f" + FLAG_FOR_SHARJAH_AE_SH = "\U0001f3f4\U000e0061\U000e0065\U000e0073\U000e0068\U000e007f" + FLAG_FOR_EASTERN_IS_7 = "\U0001f3f4\U000e0069\U000e0073\U000e0037\U000e007f" + WHITE_CHESS_BISHOP = "\u2657" + FLAG_FOR_AFAR_ET_AF = "\U0001f3f4\U000e0065\U000e0074\U000e0061\U000e0066\U000e007f" + TAG_QUESTION_MARK = "\U000e003f" + FAMILY_WOMAN_GIRL_BABY = "\U0001f469\u200d\U0001f467\u200d\U0001f476" + FLAG_FOR_RADENCI_SI_100 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0030\U000e0030\U000e007f" + FLAG_FOR_LIMA_REGION_PE_LIM = "\U0001f3f4\U000e0070\U000e0065\U000e006c\U000e0069\U000e006d\U000e007f" + FLAG_FOR_NORTH_CENTRAL_PROVINCE_MV_NC = "\U0001f3f4\U000e006d\U000e0076\U000e006e\U000e0063\U000e007f" + DOCUMENT_WITH_PICTURE = "\U0001f5bb" + FLAG_FOR_VALAIS_CH_VS = "\U0001f3f4\U000e0063\U000e0068\U000e0076\U000e0073\U000e007f" + FLAG_FOR_BAY_OF_PLENTY_NZ_BOP = "\U0001f3f4\U000e006e\U000e007a\U000e0062\U000e006f\U000e0070\U000e007f" + TAG_LATIN_CAPITAL_LETTER_P = "\U000e0050" + FLAG_FOR_BASSE_KOTTO_CF_BK = "\U0001f3f4\U000e0063\U000e0066\U000e0062\U000e006b\U000e007f" + DOCUMENT_WITH_TEXT_AND_PICTURE = "\U0001f5ba" + TAG_DIGIT_NINE = "\U000e0039" + WOMAN_IN_TUXEDO_MEDIUM_DARK_SKIN_TONE = "\U0001f935\U0001f3fe\u200d\u2640\ufe0f" + FLAG_FOR_ZURICH_CH_ZH = "\U0001f3f4\U000e0063\U000e0068\U000e007a\U000e0068\U000e007f" + MAHJONG_TILE_THREE_OF_CIRCLES = "\U0001f01b" + FLAG_FOR_LOG_DRAGOMER_SI_208 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0038\U000e007f" + MAN_ZOMBIE_DARK_SKIN_TONE = "\U0001f9df\U0001f3ff\u200d\u2642\ufe0f" + FLAG_FOR_ARIZONA_US_AZ = "\U0001f3f4\U000e0075\U000e0073\U000e0061\U000e007a\U000e007f" + FLAG_FOR_PAKTIKA_AF_PKA = "\U0001f3f4\U000e0061\U000e0066\U000e0070\U000e006b\U000e0061\U000e007f" + PROHIBITED_SIGN = "\U0001f6c7" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + FLAG_FOR_ALASKA_US_AK = "\U0001f3f4\U000e0075\U000e0073\U000e0061\U000e006b\U000e007f" + FLAG_FOR_SOOL_SO_SO = "\U0001f3f4\U000e0073\U000e006f\U000e0073\U000e006f\U000e007f" + FLAG_FOR_LAGHMAN_AF_LAG = "\U0001f3f4\U000e0061\U000e0066\U000e006c\U000e0061\U000e0067\U000e007f" + BLACK_CIRCLE_WITH_TWO_WHITE_DOTS = "\u2689" + FLAG_FOR_NUKULAELAE_TV_NKL = "\U0001f3f4\U000e0074\U000e0076\U000e006e\U000e006b\U000e006c\U000e007f" + FLAG_FOR_ABKHAZIA_GE_AB = "\U0001f3f4\U000e0067\U000e0065\U000e0061\U000e0062\U000e007f" + FLAG_FOR_ESCH_SUR_ALZETTE_LU_ES = "\U0001f3f4\U000e006c\U000e0075\U000e0065\U000e0073\U000e007f" + FLAG_FOR_MANIPUR_IN_MN = "\U0001f3f4\U000e0069\U000e006e\U000e006d\U000e006e\U000e007f" + FLAG_FOR_HELMAND_AF_HEL = "\U0001f3f4\U000e0061\U000e0066\U000e0068\U000e0065\U000e006c\U000e007f" + FLAG_FOR_VICHADA_CO_VID = "\U0001f3f4\U000e0063\U000e006f\U000e0076\U000e0069\U000e0064\U000e007f" + DOCUMENT = "\U0001f5ce" + FLAG_FOR_ISLAMABAD_PK_IS = "\U0001f3f4\U000e0070\U000e006b\U000e0069\U000e0073\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_RAS_AL_KHAIMAH_AE_RK = "\U0001f3f4\U000e0061\U000e0065\U000e0072\U000e006b\U000e007f" + FAMILY_MAN_BABY = "\U0001f468\u200d\U0001f476" + FLAG_FOR_KONYA_TR_42 = "\U0001f3f4\U000e0074\U000e0072\U000e0034\U000e0032\U000e007f" + FLAG_FOR_CANKIRI_TR_18 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0038\U000e007f" + FLAG_FOR_GANJA_AZ_GA = "\U0001f3f4\U000e0061\U000e007a\U000e0067\U000e0061\U000e007f" + MAHJONG_TILE_SIX_OF_CHARACTERS = "\U0001f00c" + TAG_LATIN_CAPITAL_LETTER_M = "\U000e004d" + FLAG_FOR_OITA_JP_44 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0034\U000e007f" + FLAG_FOR_GUATEMALA_GT_GU = "\U0001f3f4\U000e0067\U000e0074\U000e0067\U000e0075\U000e007f" + FLAG_FOR_NORTH_BRABANT_NL_NB = "\U0001f3f4\U000e006e\U000e006c\U000e006e\U000e0062\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" + KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_GILBERT_ISLANDS_KI_G = "\U0001f3f4\U000e006b\U000e0069\U000e0067\U000e007f" + FLAG_FOR_PAKTIA_AF_PIA = "\U0001f3f4\U000e0061\U000e0066\U000e0070\U000e0069\U000e0061\U000e007f" + FLAG_FOR_PARDUBICKY_KRAJ_CZ_53 = "\U0001f3f4\U000e0063\U000e007a\U000e0035\U000e0033\U000e007f" + FLAG_FOR_SALCININKAI_LT_42 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0032\U000e007f" + BALLOT_BOX_WITH_BOLD_CHECK = "\U0001f5f9" + FLAG_FOR_CORUM_TR_19 = "\U0001f3f4\U000e0074\U000e0072\U000e0031\U000e0039\U000e007f" + FLAG_FOR_SAMANGAN_AF_SAM = "\U0001f3f4\U000e0061\U000e0066\U000e0073\U000e0061\U000e006d\U000e007f" + FLAG_FOR_MASAYA_NI_MS = "\U0001f3f4\U000e006e\U000e0069\U000e006d\U000e0073\U000e007f" + FLAG_FOR_CSONGRAD_HU_CS = "\U0001f3f4\U000e0068\U000e0075\U000e0063\U000e0073\U000e007f" + FLAG_FOR_AKSARAY_TR_68 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0038\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + FLAG_FOR_SAINT_MARY_AG_05 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0035\U000e007f" + WOMAN_IN_BUSINESS_SUIT_LEVITATING_DARK_SKIN_TONE = "\U0001f574\U0001f3ff\u200d\u2640\ufe0f" + TAG_COMMERCIAL_AT = "\U000e0040" + FLAG_FOR_BERANE_ME_03 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0033\U000e007f" + FLAG_FOR_MARYLAND_LR_MY = "\U0001f3f4\U000e006c\U000e0072\U000e006d\U000e0079\U000e007f" + FLAG_FOR_KARA_TG_K = "\U0001f3f4\U000e0074\U000e0067\U000e006b\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" + OPTICAL_DISC_ICON = "\U0001f5b8" + FLAG_FOR_MASCARA_DZ_29 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0039\U000e007f" + THREE_RAYS_LEFT = "\U0001f5e6" + RECYCLING_SYMBOL_FOR_TYPE_3_PLASTICS = "\u2675" + FLAG_FOR_REDONDA_AG_11 = "\U0001f3f4\U000e0061\U000e0067\U000e0031\U000e0031\U000e007f" + FAX_ICON = "\U0001f5b7" + FLAG_FOR_GAGAUZIA_MD_GA = "\U0001f3f4\U000e006d\U000e0064\U000e0067\U000e0061\U000e007f" + THREE_SPEECH_BUBBLES = "\U0001f5eb" + TAG_LATIN_SMALL_LETTER_S = "\U000e0073" + FLAG_FOR_WAKAYAMA_JP_30 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0030\U000e007f" + FLAG_FOR_SZEKSZARD_HU_SS = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e0073\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" + OVERLAP = "\U0001f5d7" + FLAG_FOR_HSINCHU_COUNTY_TW_HSQ = "\U0001f3f4\U000e0074\U000e0077\U000e0068\U000e0073\U000e0071\U000e007f" + MAHJONG_TILE_EAST_WIND = "\U0001f000" + FLAG_FOR_GOMBE_NG_GO = "\U0001f3f4\U000e006e\U000e0067\U000e0067\U000e006f\U000e007f" + FLAG_FOR_VILNIUS_LT_58 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0038\U000e007f" + TAG_LATIN_SMALL_LETTER_O = "\U000e006f" + PAGE = "\U0001f5cf" + STOCK_CHART = "\U0001f5e0" + FLAG_FOR_SAINT_JOHN_AG_04 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0034\U000e007f" + FLAG_FOR_VERMONT_US_VT = "\U0001f3f4\U000e0075\U000e0073\U000e0076\U000e0074\U000e007f" + FLAG_FOR_MURCIA_REGION_ES_MC = "\U0001f3f4\U000e0065\U000e0073\U000e006d\U000e0063\U000e007f" + FLAG_FOR_PWANI_TZ_19 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0039\U000e007f" + FLAG_FOR_SOMALI_ET_SO = "\U0001f3f4\U000e0065\U000e0074\U000e0073\U000e006f\U000e007f" + MAN_WITH_HEADSCARF_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9d5\U0001f3fc\u200d\u2642\ufe0f" + DESKTOP_WINDOW = "\U0001f5d4" + FLAG_FOR_MADONA_LV_059 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0039\U000e007f" + FLAG_FOR_SING_BURI_TH_17 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0037\U000e007f" + FLAG_FOR_MOKA_MU_MO = "\U0001f3f4\U000e006d\U000e0075\U000e006d\U000e006f\U000e007f" + KISS_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc" + BLACK_LEFT_POINTING_BACKHAND_INDEX = "\U0001f59c" + REVERSED_VICTORY_HAND = "\U0001f594" + FAMILY_WOMAN_WOMAN_BABY = "\U0001f469\u200d\U0001f469\u200d\U0001f476" + FLAG_FOR_MICOUD_LC_08 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0038\U000e007f" + TRIGRAM_FOR_MOUNTAIN = "\u2636" + WOMAN_WITH_HEADSCARF_2 = "\U0001f9d5\u200d\u2640\ufe0f" + FLAG_FOR_MARCHE_IT_57 = "\U0001f3f4\U000e0069\U000e0074\U000e0035\U000e0037\U000e007f" + MAHJONG_TILE_FIVE_OF_CIRCLES = "\U0001f01d" + FLAG_FOR_COVA_LIMA_TL_CO = "\U0001f3f4\U000e0074\U000e006c\U000e0063\U000e006f\U000e007f" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" + FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_BEL_AIR_SC_09 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0039\U000e007f" + FLAG_FOR_VILA_REAL_PT_17 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0037\U000e007f" + FLAG_FOR_MACAU_SAR_CHINA_CN_92 = "\U0001f3f4\U000e0063\U000e006e\U000e0039\U000e0032\U000e007f" + FLAG_FOR_SOUTH_DAKOTA_US_SD = "\U0001f3f4\U000e0075\U000e0073\U000e0073\U000e0064\U000e007f" + FLAG_FOR_WEST_PANAMA_PA_10 = "\U0001f3f4\U000e0070\U000e0061\U000e0031\U000e0030\U000e007f" + FLAG_FOR_CHIAPAS_MX_CHP = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e0068\U000e0070\U000e007f" + FLAG_FOR_KUKES_COUNTY_AL_07 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0037\U000e007f" + PAGES = "\U0001f5d0" + TAG_LATIN_CAPITAL_LETTER_L = "\U000e004c" + EMPTY_PAGES = "\U0001f5cd" + FLAG_FOR_SVETA_ANA_SI_181 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0031\U000e007f" + FLAG_FOR_SKRIVERI_LV_092 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0032\U000e007f" + FLAG_FOR_KITUI_KE_18 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0038\U000e007f" + FIRST_QUARTER_MOON_2 = "\u263d" + FLAG_FOR_PELELIU_PW_350 = "\U0001f3f4\U000e0070\U000e0077\U000e0033\U000e0035\U000e0030\U000e007f" + FLAG_FOR_MARY_TM_M = "\U0001f3f4\U000e0074\U000e006d\U000e006d\U000e007f" + FLAG_FOR_UPPER_SOUTH_PROVINCE_MV_US = "\U0001f3f4\U000e006d\U000e0076\U000e0075\U000e0073\U000e007f" + FLAG_FOR_MAKKAH_SA_02 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0032\U000e007f" + FLAG_FOR_ZEBBUG_GOZO_MT_65 = "\U0001f3f4\U000e006d\U000e0074\U000e0036\U000e0035\U000e007f" + FLAG_FOR_OSMANIYE_TR_80 = "\U0001f3f4\U000e0074\U000e0072\U000e0038\U000e0030\U000e007f" + BLACK_TWO_WAY_LEFT_WAY_TRAFFIC = "\u26d6" + FLAG_FOR_LAGOS_NG_LA = "\U0001f3f4\U000e006e\U000e0067\U000e006c\U000e0061\U000e007f" + MAHJONG_TILE_JOKER = "\U0001f02a" + FLAG_FOR_KARS_TR_36 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0036\U000e007f" + FLAG_FOR_NAYARIT_MX_NAY = "\U0001f3f4\U000e006d\U000e0078\U000e006e\U000e0061\U000e0079\U000e007f" + CUP_ON_BLACK_SQUARE = "\u26fe" + FLAG_FOR_RIVERCESS_LR_RI = "\U0001f3f4\U000e006c\U000e0072\U000e0072\U000e0069\U000e007f" + THREE_RAYS_ABOVE = "\U0001f5e4" + FLAG_FOR_UABOE_NR_13 = "\U0001f3f4\U000e006e\U000e0072\U000e0031\U000e0033\U000e007f" + TAG_LATIN_SMALL_LETTER_P = "\U000e0070" + FLAG_FOR_MGARR_MT_31 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0031\U000e007f" + FLAG_FOR_SALAVAN_LA_SL = "\U0001f3f4\U000e006c\U000e0061\U000e0073\U000e006c\U000e007f" + FLAG_FOR_AJMAN_AE_AJ = "\U0001f3f4\U000e0061\U000e0065\U000e0061\U000e006a\U000e007f" + FLAG_FOR_DEMIR_KAPIJA_MK_24 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0034\U000e007f" + FLAG_FOR_KHABAROVSK_KRAI_RU_KHA = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0068\U000e0061\U000e007f" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + FLAG_FOR_WEST_KAZAKHSTAN_KZ_ZAP = "\U0001f3f4\U000e006b\U000e007a\U000e007a\U000e0061\U000e0070\U000e007f" + TAG_LATIN_SMALL_LETTER_W = "\U000e0077" + ADI_SHAKTI = "\u262c" + BOYS_SYMBOL = "\U0001f6c9" + FLAG_FOR_NORTHERN_BAHR_EL_GHAZAL_SS_BN = "\U0001f3f4\U000e0073\U000e0073\U000e0062\U000e006e\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_LINDI_TZ_12 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0032\U000e007f" + FLAG_FOR_KUNAR_AF_KNR = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e006e\U000e0072\U000e007f" + FOLDER = "\U0001f5c0" + COUPLE_WITH_HEART_MAN_MAN_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + TAG_NUMBER_SIGN = "\U000e0023" + FLAG_FOR_VALENCIAN_COMMUNITY_ES_VC = "\U0001f3f4\U000e0065\U000e0073\U000e0076\U000e0063\U000e007f" + TAG_RIGHT_CURLY_BRACKET = "\U000e007d" + FLAG_FOR_SAINT_PAUL_AG_06 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0036\U000e007f" + WOMAN_IN_TUXEDO = "\U0001f935\u200d\u2640\ufe0f" + FLAG_FOR_SICILY_IT_82 = "\U0001f3f4\U000e0069\U000e0074\U000e0038\U000e0032\U000e007f" + FLAG_FOR_LEZHE_COUNTY_AL_08 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0038\U000e007f" + FLAG_FOR_CHIHUAHUA_MX_CHH = "\U0001f3f4\U000e006d\U000e0078\U000e0063\U000e0068\U000e0068\U000e007f" + BLACK_RIGHT_POINTING_BACKHAND_INDEX = "\U0001f59d" + WHITE_LATIN_CROSS = "\U0001f546" + FLAG_FOR_NORD_OUEST_HT_NO = "\U0001f3f4\U000e0068\U000e0074\U000e006e\U000e006f\U000e007f" + DIGIT_ONE = "1\ufe0f" + PORTABLE_STEREO = "\U0001f4fe" + FLAG_FOR_MADINAT_ASH_SHAMAL_QA_MS = "\U0001f3f4\U000e0071\U000e0061\U000e006d\U000e0073\U000e007f" + BULLHORN = "\U0001f56b" + TAG_DIGIT_SIX = "\U000e0036" + FLAG_FOR_SIKKIM_IN_SK = "\U0001f3f4\U000e0069\U000e006e\U000e0073\U000e006b\U000e007f" + CANCELLATION_X = "\U0001f5d9" + LEFT_WRITING_HAND = "\U0001f58e" + MAHJONG_TILE_FOUR_OF_CHARACTERS = "\U0001f00a" + RINGING_BELL = "\U0001f56d" + FLAG_FOR_TIRANA_COUNTY_AL_11 = "\U0001f3f4\U000e0061\U000e006c\U000e0031\U000e0031\U000e007f" + FLAG_FOR_TRAT_TH_23 = "\U0001f3f4\U000e0074\U000e0068\U000e0032\U000e0033\U000e007f" + TAG_LATIN_SMALL_LETTER_D = "\U000e0064" + FLAG_FOR_SAMARA_RU_SAM = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0061\U000e006d\U000e007f" + FLAG_FOR_NGOUNIE_GA_4 = "\U0001f3f4\U000e0067\U000e0061\U000e0034\U000e007f" + BLACK_ROSETTE = "\U0001f3f6" + TAG_CIRCUMFLEX_ACCENT = "\U000e005e" + FLAG_FOR_IASI_RO_IS = "\U0001f3f4\U000e0072\U000e006f\U000e0069\U000e0073\U000e007f" + FLAG_FOR_GEORGIA_US_GA = "\U0001f3f4\U000e0075\U000e0073\U000e0067\U000e0061\U000e007f" + FLAG_FOR_DURRES_COUNTY_AL_02 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0032\U000e007f" + KISS_MAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + FLAG_FOR_TAZA_AL_HOCEIMA_TAOUNATE_MA_03 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0033\U000e007f" + FLAG_FOR_LOMBARDY_IT_25 = "\U0001f3f4\U000e0069\U000e0074\U000e0032\U000e0035\U000e007f" + FLAG_FOR_TRABZON_TR_61 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0031\U000e007f" + FLAG_FOR_UROZGAN_AF_URU = "\U0001f3f4\U000e0061\U000e0066\U000e0075\U000e0072\U000e0075\U000e007f" + FLAG_FOR_CENTRAL_GH_CP = "\U0001f3f4\U000e0067\U000e0068\U000e0063\U000e0070\U000e007f" + WOMAN_ZOMBIE_LIGHT_SKIN_TONE = "\U0001f9df\U0001f3fb\u200d\u2640\ufe0f" + MAHJONG_TILE_SUMMER = "\U0001f027" + FLAG_FOR_KIDRICEVO_SI_045 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0034\U000e0035\U000e007f" + FLAG_FOR_RAZAVI_KHORASAN_IR_30 = "\U0001f3f4\U000e0069\U000e0072\U000e0033\U000e0030\U000e007f" + FLAG_FOR_KOTAYK_AM_KT = "\U0001f3f4\U000e0061\U000e006d\U000e006b\U000e0074\U000e007f" + TELEPHONE_RECEIVER_WITH_PAGE = "\U0001f57c" + FLAG_FOR_SHKODER_COUNTY_AL_10 = "\U0001f3f4\U000e0061\U000e006c\U000e0031\U000e0030\U000e007f" + FLAG_FOR_AL_WAKRAH_QA_WA = "\U0001f3f4\U000e0071\U000e0061\U000e0077\U000e0061\U000e007f" + TAG_LATIN_SMALL_LETTER_U = "\U000e0075" + FLAG_FOR_CHACO_AR_H = "\U0001f3f4\U000e0061\U000e0072\U000e0068\U000e007f" + BLACK_HARD_SHELL_FLOPPY_DISK = "\U0001f5aa" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_HOKKAIDO_JP_01 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0031\U000e007f" + FLAG_FOR_GEGHARKUNIK_AM_GR = "\U0001f3f4\U000e0061\U000e006d\U000e0067\U000e0072\U000e007f" + FLAG_FOR_BLACK_POINT_BS_BP = "\U0001f3f4\U000e0062\U000e0073\U000e0062\U000e0070\U000e007f" + FLAG_FOR_LUXOR_EG_LX = "\U0001f3f4\U000e0065\U000e0067\U000e006c\U000e0078\U000e007f" + FLAG_FOR_WISCONSIN_US_WI = "\U0001f3f4\U000e0075\U000e0073\U000e0077\U000e0069\U000e007f" + FLAG_FOR_MONACO_VILLE_MC_MO = "\U0001f3f4\U000e006d\U000e0063\U000e006d\U000e006f\U000e007f" + FLAG_FOR_ARMAVIR_AM_AV = "\U0001f3f4\U000e0061\U000e006d\U000e0061\U000e0076\U000e007f" + MAHJONG_TILE_EIGHT_OF_BAMBOOS = "\U0001f017" + TRIGRAM_FOR_EARTH = "\u2637" + FLAG_FOR_THUA_THIEN_HUE_VN_26 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0036\U000e007f" + FLAG_FOR_POINTE_NOIRE_CG_16 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0036\U000e007f" + FLAG_FOR_SAKHALIN_RU_SAK = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0061\U000e006b\U000e007f" + TAG_LATIN_SMALL_LETTER_Z = "\U000e007a" + FLAG_FOR_PAKRUOJIS_LT_30 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0030\U000e007f" + FLAG_FOR_APE_LV_009 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0039\U000e007f" + LOWER_RIGHT_SHADOWED_WHITE_CIRCLE = "\U0001f53e" + FLAG_FOR_ARUBA_NL_AW = "\U0001f3f4\U000e006e\U000e006c\U000e0061\U000e0077\U000e007f" + COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + FLAG_FOR_KIEV_UA_30 = "\U0001f3f4\U000e0075\U000e0061\U000e0033\U000e0030\U000e007f" + FLAG_FOR_PORT_SAID_EG_PTS = "\U0001f3f4\U000e0065\U000e0067\U000e0070\U000e0074\U000e0073\U000e007f" + MAXIMIZE = "\U0001f5d6" + FLAG_FOR_TRA_VINH_VN_51 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0031\U000e007f" + FLAG_FOR_RIYADH_SA_01 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0031\U000e007f" + GIRLS_SYMBOL = "\U0001f6ca" + FLAG_FOR_SKIKDA_DZ_21 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0031\U000e007f" + FLAG_FOR_ABU_DHABI_AE_AZ = "\U0001f3f4\U000e0061\U000e0065\U000e0061\U000e007a\U000e007f" + MAHJONG_TILE_ONE_OF_CIRCLES = "\U0001f019" + BLACK_DOWN_POINTING_BACKHAND_INDEX = "\U0001f5a3" + MAHJONG_TILE_NINE_OF_CIRCLES = "\U0001f021" + FLAG_FOR_RIGA_LV_RIX = "\U0001f3f4\U000e006c\U000e0076\U000e0072\U000e0069\U000e0078\U000e007f" + FLAG_FOR_MAKIRA_ULAWA_SB_MK = "\U0001f3f4\U000e0073\U000e0062\U000e006d\U000e006b\U000e007f" + FLAG_FOR_JUTIAPA_GT_JU = "\U0001f3f4\U000e0067\U000e0074\U000e006a\U000e0075\U000e007f" + FLAG_FOR_LORESTAN_IR_20 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0030\U000e007f" + FLAG_FOR_BASHKORTOSTAN_RU_BA = "\U0001f3f4\U000e0072\U000e0075\U000e0062\U000e0061\U000e007f" + FLAG_FOR_BUSAN_KR_26 = "\U0001f3f4\U000e006b\U000e0072\U000e0032\U000e0036\U000e007f" + FLAG_FOR_MWARO_BI_MW = "\U0001f3f4\U000e0062\U000e0069\U000e006d\U000e0077\U000e007f" + FLAG_FOR_ASTURIAS_ES_AS = "\U0001f3f4\U000e0065\U000e0073\U000e0061\U000e0073\U000e007f" + FLAG_FOR_ALTA_VERAPAZ_GT_AV = "\U0001f3f4\U000e0067\U000e0074\U000e0061\U000e0076\U000e007f" + FLAG_FOR_BRUNEI_MUARA_BN_BM = "\U0001f3f4\U000e0062\U000e006e\U000e0062\U000e006d\U000e007f" + FLAG_FOR_LOVRENC_NA_POHORJU_SI_167 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0036\U000e0037\U000e007f" + FLAG_FOR_WALLIS_ANDAMP_FUTUNA_FR_WF = "\U0001f3f4\U000e0066\U000e0072\U000e0077\U000e0066\U000e007f" + KISS_MAN_WOMAN_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + FLAG_FOR_LORI_AM_LO = "\U0001f3f4\U000e0061\U000e006d\U000e006c\U000e006f\U000e007f" + KISS_MAN_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + FLAG_FOR_GIZA_EG_GZ = "\U0001f3f4\U000e0065\U000e0067\U000e0067\U000e007a\U000e007f" + FLAG_FOR_SAINT_MARY_JM_05 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0035\U000e007f" + DIGIT_FIVE = "5\ufe0f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_MAGADAN_RU_MAG = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e0061\U000e0067\U000e007f" + LEFT_ANGER_BUBBLE = "\U0001f5ee" + DIGIT_EIGHT = "8\ufe0f" + SIDEWAYS_BLACK_UP_POINTING_INDEX = "\U0001f5a0" + FLAG_FOR_SOUTHERN_HIGHLANDS_PG_SHM = "\U0001f3f4\U000e0070\U000e0067\U000e0073\U000e0068\U000e006d\U000e007f" + FLAG_FOR_NURISTAN_AF_NUR = "\U0001f3f4\U000e0061\U000e0066\U000e006e\U000e0075\U000e0072\U000e007f" + FLAG_FOR_LOUISIANA_US_LA = "\U0001f3f4\U000e0075\U000e0073\U000e006c\U000e0061\U000e007f" + FLAG_FOR_MAULE_CL_ML = "\U0001f3f4\U000e0063\U000e006c\U000e006d\U000e006c\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f466\U0001f3fd" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_PANAMA_PA_8 = "\U0001f3f4\U000e0070\U000e0061\U000e0038\U000e007f" + FLAG_FOR_IZMIR_TR_35 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0035\U000e007f" + FLAG_FOR_CABINDA_AO_CAB = "\U0001f3f4\U000e0061\U000e006f\U000e0063\U000e0061\U000e0062\U000e007f" + OPEN_FOLDER = "\U0001f5c1" + FLAG_FOR_VAUD_CH_VD = "\U0001f3f4\U000e0063\U000e0068\U000e0076\U000e0064\U000e007f" + LIGHTNING_MOOD = "\U0001f5f2" + KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" + FLAG_FOR_SUCRE_CO_SUC = "\U0001f3f4\U000e0063\U000e006f\U000e0073\U000e0075\U000e0063\U000e007f" + MAHJONG_TILE_WHITE_DRAGON = "\U0001f006" + FLAG_FOR_MADRE_DE_DIOS_PE_MDD = "\U0001f3f4\U000e0070\U000e0065\U000e006d\U000e0064\U000e0064\U000e007f" + FLAG_FOR_BENGUELA_AO_BGU = "\U0001f3f4\U000e0061\U000e006f\U000e0062\U000e0067\U000e0075\U000e007f" + FLAG_FOR_ST_JULIAN_S_MT_48 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0038\U000e007f" + FLAG_FOR_TIMIS_RO_TM = "\U0001f3f4\U000e0072\U000e006f\U000e0074\U000e006d\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_BIE_AO_BIE = "\U0001f3f4\U000e0061\U000e006f\U000e0062\U000e0069\U000e0065\U000e007f" + MAHJONG_TILE_WINTER = "\U0001f029" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_BLUE_NILE_SD_NB = "\U0001f3f4\U000e0073\U000e0064\U000e006e\U000e0062\U000e007f" + EMPTY_DOCUMENT = "\U0001f5cb" + MINIMIZE = "\U0001f5d5" + FLAG_FOR_KWALE_KE_19 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0039\U000e007f" + FLAG_FOR_GRAND_PORT_MU_GP = "\U0001f3f4\U000e006d\U000e0075\U000e0067\U000e0070\U000e007f" + FLAG_FOR_CHIMBORAZO_EC_H = "\U0001f3f4\U000e0065\U000e0063\U000e0068\U000e007f" + FLAG_FOR_HUAMBO_AO_HUA = "\U0001f3f4\U000e0061\U000e006f\U000e0068\U000e0075\U000e0061\U000e007f" + FLAG_FOR_CUANZA_SUL_AO_CUS = "\U0001f3f4\U000e0061\U000e006f\U000e0063\U000e0075\U000e0073\U000e007f" + FLAG_FOR_BREMEN_DE_HB = "\U0001f3f4\U000e0064\U000e0065\U000e0068\U000e0062\U000e007f" + LIPS = "\U0001f5e2" + FLAG_FOR_ALTO_PARAGUAY_PY_16 = "\U0001f3f4\U000e0070\U000e0079\U000e0031\U000e0036\U000e007f" + FLAG_FOR_NEW_YORK_US_NY = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0079\U000e007f" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" + FLAG_FOR_NORTH_CAROLINA_US_NC = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0063\U000e007f" + COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + WHITE_CIRCLE_WITH_TWO_DOTS = "\u2687" + KISS_MAN_MEDIUM_SKIN_TONE_MAN = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" + MAN_ZOMBIE_LIGHT_SKIN_TONE = "\U0001f9df\U0001f3fb\u200d\u2642\ufe0f" + FLAG_FOR_PERAK_MY_08 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0038\U000e007f" + FLAG_FOR_SISAK_MOSLAVINA_HR_03 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0033\U000e007f" + FLAG_FOR_ARDABIL_IR_03 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0033\U000e007f" + FLAG_FOR_KARNATAKA_IN_KA = "\U0001f3f4\U000e0069\U000e006e\U000e006b\U000e0061\U000e007f" + LEFT_HAND_TELEPHONE_RECEIVER = "\U0001f57b" + FLAG_FOR_NEVADA_US_NV = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0076\U000e007f" + FLAG_FOR_DIBER_COUNTY_AL_09 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0039\U000e007f" + FLAG_FOR_LUNDA_SUL_AO_LSU = "\U0001f3f4\U000e0061\U000e006f\U000e006c\U000e0073\U000e0075\U000e007f" + KISS_WOMAN_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + SIDEWAYS_WHITE_DOWN_POINTING_INDEX = "\U0001f59f" + FLAG_FOR_NAKHON_SI_THAMMARAT_TH_80 = "\U0001f3f4\U000e0074\U000e0068\U000e0038\U000e0030\U000e007f" + FLAG_FOR_KYRENIA_CY_06 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0036\U000e007f" + FLAG_FOR_GUNA_YALA_PA_KY = "\U0001f3f4\U000e0070\U000e0061\U000e006b\U000e0079\U000e007f" + FLAG_FOR_HUILA_AO_HUI = "\U0001f3f4\U000e0061\U000e006f\U000e0068\U000e0075\U000e0069\U000e007f" + FLAG_FOR_NAAMA_DZ_45 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0035\U000e007f" + FLAG_FOR_SAR_E_POL_AF_SAR = "\U0001f3f4\U000e0061\U000e0066\U000e0073\U000e0061\U000e0072\U000e007f" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" + FLAG_FOR_META_CO_MET = "\U0001f3f4\U000e0063\U000e006f\U000e006d\U000e0065\U000e0074\U000e007f" + FLAG_FOR_NORTHWEST_TERRITORIES_CA_NT = "\U0001f3f4\U000e0063\U000e0061\U000e006e\U000e0074\U000e007f" + FLAG_FOR_PENGHU_TW_PEN = "\U0001f3f4\U000e0074\U000e0077\U000e0070\U000e0065\U000e006e\U000e007f" + FLAG_FOR_TOKYO_JP_13 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0033\U000e007f" + COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + TAG_LATIN_SMALL_LETTER_X = "\U000e0078" + FLAG_FOR_SAINT_GEORGE_AG_03 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0033\U000e007f" + REVERSED_RAISED_HAND_WITH_FINGERS_SPLAYED = "\U0001f591" + JAPANESE_BANK_SYMBOL = "\u26fb" + FLAG_FOR_CUANZA_NORTE_AO_CNO = "\U0001f3f4\U000e0061\U000e006f\U000e0063\U000e006e\U000e006f\U000e007f" + FLAG_FOR_NANA_GREBIZI_CF_KB = "\U0001f3f4\U000e0063\U000e0066\U000e006b\U000e0062\U000e007f" + FLAG_FOR_MALANJE_AO_MAL = "\U0001f3f4\U000e0061\U000e006f\U000e006d\U000e0061\U000e006c\U000e007f" + ROTATED_HEAVY_BLACK_HEART_BULLET = "\u2765" + REVERSED_THUMBS_UP_SIGN = "\U0001f592" + CELTIC_CROSS = "\U0001f548" + KISS_WOMAN_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" + SYMBOL_FOR_MARKS_CHAPTER = "\U0001f545" + TAG_LATIN_SMALL_LETTER_E = "\U000e0065" + FLAG_FOR_NIGER_NG_NI = "\U0001f3f4\U000e006e\U000e0067\U000e006e\U000e0069\U000e007f" + TAG_DIGIT_EIGHT = "\U000e0038" + MAHJONG_TILE_ORCHID = "\U0001f023" + TAG_LATIN_CAPITAL_LETTER_B = "\U000e0042" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + FLAG_FOR_BEIRUT_LB_BA = "\U0001f3f4\U000e006c\U000e0062\U000e0062\U000e0061\U000e007f" + BLACK_DROPLET = "\U0001f322" + FLAG_FOR_KALBAJAR_AZ_KAL = "\U0001f3f4\U000e0061\U000e007a\U000e006b\U000e0061\U000e006c\U000e007f" + FLAG_FOR_BINH_DUONG_VN_57 = "\U0001f3f4\U000e0076\U000e006e\U000e0035\U000e0037\U000e007f" + FLAG_FOR_NAMIBE_AO_NAM = "\U0001f3f4\U000e0061\U000e006f\U000e006e\U000e0061\U000e006d\U000e007f" + FLAG_FOR_CALARASI_RO_CL = "\U0001f3f4\U000e0072\U000e006f\U000e0063\U000e006c\U000e007f" + CIRCLED_CROSS_POMMEE = "\U0001f540" + FLAG_FOR_A_ANA_WS_AA = "\U0001f3f4\U000e0077\U000e0073\U000e0061\U000e0061\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" + BALLOT_SCRIPT_X = "\U0001f5f4" + MAHJONG_TILE_WEST_WIND = "\U0001f002" + MAHJONG_TILE_EIGHT_OF_CIRCLES = "\U0001f020" + FLAG_FOR_MOXICO_AO_MOX = "\U0001f3f4\U000e0061\U000e006f\U000e006d\U000e006f\U000e0078\U000e007f" + EMPTY_NOTE = "\U0001f5c5" + FLAG_FOR_MISSOURI_US_MO = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e006f\U000e007f" + FLAG_FOR_PENANG_MY_07 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0037\U000e007f" + FLAG_FOR_WAJIR_KE_46 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0036\U000e007f" + FLAG_FOR_CANILLO_AD_02 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0032\U000e007f" + FLAG_FOR_VIRGINIA_US_VA = "\U0001f3f4\U000e0075\U000e0073\U000e0076\U000e0061\U000e007f" + CROSS_POMMEE = "\U0001f542" + FLAG_FOR_FIER_COUNTY_AL_04 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0034\U000e007f" + FLAG_FOR_SCHLESWIG_HOLSTEIN_DE_SH = "\U0001f3f4\U000e0064\U000e0065\U000e0073\U000e0068\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" + FLAG_FOR_LUALABA_CD_LU = "\U0001f3f4\U000e0063\U000e0064\U000e006c\U000e0075\U000e007f" + NORTHEAST_POINTING_AIRPLANE = "\U0001f6ea" + FAMILY_WOMAN_WOMAN_GIRL_BABY = "\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f476" + MAHJONG_TILE_SEVEN_OF_BAMBOOS = "\U0001f016" + FLAG_FOR_AGSTAFA_AZ_AGA = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0067\U000e0061\U000e007f" + FLAG_FOR_AMNAT_CHAROEN_TH_37 = "\U0001f3f4\U000e0074\U000e0068\U000e0033\U000e0037\U000e007f" + FLAG_FOR_QUANG_TRI_VN_25 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0035\U000e007f" + STAMPED_ENVELOPE = "\U0001f583" + BEATS_1_LOGO = "\uf79c" + FLAG_FOR_AFYONKARAHISAR_TR_03 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0033\U000e007f" + FLAG_FOR_MASSACHUSETTS_US_MA = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0061\U000e007f" + FLAG_FOR_GULF_PG_GPK = "\U0001f3f4\U000e0070\U000e0067\U000e0067\U000e0070\U000e006b\U000e007f" + FLAG_FOR_UIGE_AO_UIG = "\U0001f3f4\U000e0061\U000e006f\U000e0075\U000e0069\U000e0067\U000e007f" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + FLAG_FOR_SAINT_KITTS_KN_K = "\U0001f3f4\U000e006b\U000e006e\U000e006b\U000e007f" + FLAG_FOR_CUANDO_CUBANGO_AO_CCU = "\U0001f3f4\U000e0061\U000e006f\U000e0063\U000e0063\U000e0075\U000e007f" + KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + FLAG_FOR_SAN_LUIS_AR_D = "\U0001f3f4\U000e0061\U000e0072\U000e0064\U000e007f" + FLAG_FOR_ZHYTOMYRSHCHYNA_UA_18 = "\U0001f3f4\U000e0075\U000e0061\U000e0031\U000e0038\U000e007f" + MAHJONG_TILE_TWO_OF_BAMBOOS = "\U0001f011" + FLAG_FOR_SAINT_THOMAS_JM_03 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0033\U000e007f" + TAG_LATIN_SMALL_LETTER_I = "\U000e0069" + VESTA = "\u26b6" + TAG_LATIN_SMALL_LETTER_Y = "\U000e0079" + TAG_LATIN_SMALL_LETTER_Q = "\U000e0071" + SIDEWAYS_WHITE_LEFT_POINTING_INDEX = "\U0001f598" + FLAG_FOR_IDAHO_US_ID = "\U0001f3f4\U000e0075\U000e0073\U000e0069\U000e0064\U000e007f" + TAG_LATIN_CAPITAL_LETTER_Z = "\U000e005a" + FLAG_FOR_SYUNIK_AM_SU = "\U0001f3f4\U000e0061\U000e006d\U000e0073\U000e0075\U000e007f" + FLAG_FOR_EAST_KAZAKHSTAN_KZ_VOS = "\U0001f3f4\U000e006b\U000e007a\U000e0076\U000e006f\U000e0073\U000e007f" + FLAG_FOR_JAMTLAND_SE_Z = "\U0001f3f4\U000e0073\U000e0065\U000e007a\U000e007f" + WOMAN_ZOMBIE_MEDIUM_DARK_SKIN_TONE = "\U0001f9df\U0001f3fe\u200d\u2640\ufe0f" + FLAG_FOR_NEVSEHIR_TR_50 = "\U0001f3f4\U000e0074\U000e0072\U000e0035\U000e0030\U000e007f" + FLAG_FOR_SKANE_SE_M = "\U0001f3f4\U000e0073\U000e0065\U000e006d\U000e007f" + KISS_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" + FRAME_WITH_AN_X = "\U0001f5be" + FLAG_FOR_SANTIAGO_DEL_ESTERO_AR_G = "\U0001f3f4\U000e0061\U000e0072\U000e0067\U000e007f" + FLAG_FOR_LA_MASSANA_AD_04 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0034\U000e007f" + FLAG_FOR_STAVROPOL_KRAI_RU_STA = "\U0001f3f4\U000e0072\U000e0075\U000e0073\U000e0074\U000e0061\U000e007f" + FAMILY_MAN_BABY_GIRL = "\U0001f468\u200d\U0001f476\u200d\U0001f467" + NEUTER = "\u26b2" + FLAG_FOR_TRIPURA_IN_TR = "\U0001f3f4\U000e0069\U000e006e\U000e0074\U000e0072\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_ENUGU_NG_EN = "\U0001f3f4\U000e006e\U000e0067\U000e0065\U000e006e\U000e007f" + FLAG_FOR_EL_ORO_EC_O = "\U0001f3f4\U000e0065\U000e0063\U000e006f\U000e007f" + SQUARED_KEY = "\u26bf" + MAHJONG_TILE_NINE_OF_BAMBOOS = "\U0001f018" + PRINTER_ICON = "\U0001f5b6" + SESQUIQUADRATE = "\u26bc" + FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" + MAHJONG_TILE_SIX_OF_BAMBOOS = "\U0001f015" + WOMAN_IN_TUXEDO_DARK_SKIN_TONE = "\U0001f935\U0001f3ff\u200d\u2640\ufe0f" + FLAG_FOR_LA_RIOJA_AR_F = "\U0001f3f4\U000e0061\U000e0072\U000e0066\U000e007f" + FLAG_FOR_BUSHEHR_IR_06 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0036\U000e007f" + DIGIT_THREE = "3\ufe0f" + FLAG_FOR_LUXEMBOURG_LU_LU = "\U0001f3f4\U000e006c\U000e0075\U000e006c\U000e0075\U000e007f" + FLAG_FOR_DAGESTAN_RU_DA = "\U0001f3f4\U000e0072\U000e0075\U000e0064\U000e0061\U000e007f" + BLACK_DRAUGHTS_KING = "\u26c3" + WHITE_DRAUGHTS_KING = "\u26c1" + FLAG_FOR_CATAMARCA_AR_K = "\U0001f3f4\U000e0061\U000e0072\U000e006b\U000e007f" + TAG_LATIN_SMALL_LETTER_B = "\U000e0062" + FLAG_FOR_BARBUDA_AG_10 = "\U0001f3f4\U000e0061\U000e0067\U000e0031\U000e0030\U000e007f" + FLAG_FOR_MARL_NZ_MBH = "\U0001f3f4\U000e006e\U000e007a\U000e006d\U000e0062\U000e0068\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb" + BLACK_SNOWMAN = "\u26c7" + ASTRONOMICAL_SYMBOL_FOR_URANUS = "\u26e2" + FLAG_FOR_LAO_CAI_VN_02 = "\U0001f3f4\U000e0076\U000e006e\U000e0030\U000e0032\U000e007f" + FLAG_FOR_JURA_CH_JU = "\U0001f3f4\U000e0063\U000e0068\U000e006a\U000e0075\U000e007f" + MAHJONG_TILE_FOUR_OF_BAMBOOS = "\U0001f013" + TAG_LATIN_CAPITAL_LETTER_N = "\U000e004e" + FAMILY_MAN_BABY_BOY = "\U0001f468\u200d\U0001f476\u200d\U0001f466" + FLAG_FOR_MISIONES_AR_N = "\U0001f3f4\U000e0061\U000e0072\U000e006e\U000e007f" + WOMAN_ZOMBIE_DARK_SKIN_TONE = "\U0001f9df\U0001f3ff\u200d\u2640\ufe0f" + FAMILY_WOMAN_BABY = "\U0001f469\u200d\U0001f476" + PALLAS = "\u26b4" + DIGIT_SIX = "6\ufe0f" + DOUBLED_MALE_SIGN = "\u26a3" + FLAG_FOR_JOWZJAN_AF_JOW = "\U0001f3f4\U000e0061\U000e0066\U000e006a\U000e006f\U000e0077\U000e007f" + FLAG_FOR_ESCALDES_ENGORDANY_AD_08 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0038\U000e007f" + FLAG_FOR_MYKOLAYIVSCHYNA_UA_48 = "\U0001f3f4\U000e0075\U000e0061\U000e0034\U000e0038\U000e007f" + FLAG_FOR_DEIR_EZ_ZOR_SY_DY = "\U0001f3f4\U000e0073\U000e0079\U000e0064\U000e0079\U000e007f" + RIGHT_SPEECH_BUBBLE = "\U0001f5e9" + TAG_DIGIT_ZERO = "\U000e0030" + FLAG_FOR_FUJAIRAH_AE_FU = "\U0001f3f4\U000e0061\U000e0065\U000e0066\U000e0075\U000e007f" + LEFT_CLOSED_ENTRY = "\u26dc" + MAHJONG_TILE_BAMBOO = "\U0001f024" + SQUARED_SALTIRE = "\u26dd" + BLACK_MOON_LILITH = "\u26b8" + FLAG_FOR_LUNDA_NORTE_AO_LNO = "\U0001f3f4\U000e0061\U000e006f\U000e006c\U000e006e\U000e006f\U000e007f" + DRIVE_SLOW_SIGN = "\u26da" + FLAG_FOR_GRAND_CAPE_MOUNT_LR_CM = "\U0001f3f4\U000e006c\U000e0072\U000e0063\U000e006d\U000e007f" + FLAG_FOR_FORMOSA_AR_P = "\U0001f3f4\U000e0061\U000e0072\U000e0070\U000e007f" + FLAG_FOR_WEST_NEW_BRITAIN_PG_WBK = "\U0001f3f4\U000e0070\U000e0067\U000e0077\U000e0062\U000e006b\U000e007f" + BLACK_LEFT_LANE_MERGE = "\u26d8" + FLAG_FOR_ARARAT_AM_AR = "\U0001f3f4\U000e0061\U000e006d\U000e0061\U000e0072\U000e007f" + SEXTILE = "\u26b9" + FLAG_FOR_SAN_JUAN_AR_J = "\U0001f3f4\U000e0061\U000e0072\U000e006a\U000e007f" + FLAG_FOR_BLOKE_SI_150 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0035\U000e0030\U000e007f" + INCREASE_FONT_SIZE_SYMBOL = "\U0001f5da" + FLAG_FOR_ANHUI_CN_34 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0034\U000e007f" + FLAG_FOR_NORTH_AEGEAN_GR_K = "\U0001f3f4\U000e0067\U000e0072\U000e006b\U000e007f" + FAMILY_MAN_WOMAN_BABY_GIRL = "\U0001f468\u200d\U0001f469\u200d\U0001f476\u200d\U0001f467" + FLAG_FOR_HADRAMAUT_YE_HD = "\U0001f3f4\U000e0079\U000e0065\U000e0068\U000e0064\U000e007f" + TURNED_WHITE_SHOGI_PIECE = "\u26c9" + MALE_WITH_STROKE_SIGN = "\u26a6" RESTRICTED_LEFT_ENTRY_1 = "\u26e0" - FLAG_FOR_JUJUY_AR_Y = "\U0001f3f4\U000e0061\U000e0072\U000e0079\U000e007f" - FLAG_FOR_CORRIENTES_AR_W = "\U0001f3f4\U000e0061\U000e0072\U000e0077\U000e007f" - FLAG_FOR_CIBAO_NORTE_DO_35 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0035\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_MENDOZA_AR_M = "\U0001f3f4\U000e0061\U000e0072\U000e006d\U000e007f" - INVERTED_PENTAGRAM = "\u26e7" - LEFT_HANDED_INTERLACED_PENTAGRAM = "\u26e6" - BLACK_CROSS_ON_SHIELD = "\u26e8" - TAG_VERTICAL_LINE = "\U000e007c" - FLAG_FOR_SANTA_CRUZ_AR_Z = "\U0001f3f4\U000e0061\U000e0072\U000e007a\U000e007f" - FLAG_FOR_CORDOBA_AR_X = "\U0001f3f4\U000e0061\U000e0072\U000e0078\U000e007f" + FLAG_FOR_HAVANA_CU_03 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0033\U000e007f" + LOWER_LEFT_PENCIL = "\U0001f589" FLAG_FOR_CHUBUT_AR_U = "\U0001f3f4\U000e0061\U000e0072\U000e0075\U000e007f" + CLOCKWISE_RIGHT_AND_LEFT_SEMICIRCLE_ARROWS = "\U0001f5d8" + FLAG_FOR_SANTIAGO_METROPOLITAN_CL_RM = "\U0001f3f4\U000e0063\U000e006c\U000e0072\U000e006d\U000e007f" + CASTLE_2 = "\u26eb" + THREE_RAYS_RIGHT = "\U0001f5e7" + JUNO = "\u26b5" + FLAG_FOR_HAI_DUONG_VN_61 = "\U0001f3f4\U000e0076\U000e006e\U000e0036\U000e0031\U000e007f" + FLAG_FOR_ABSHERON_AZ_ABS = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0062\U000e0073\U000e007f" + FLAG_FOR_CORRIENTES_AR_W = "\U0001f3f4\U000e0061\U000e0072\U000e0077\U000e007f" + MAHJONG_TILE_SOUTH_WIND = "\U0001f001" + FLAG_FOR_GRAND_CASABLANCA_MA_08 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0038\U000e007f" + FLAG_FOR_NGARCHELONG_PW_218 = "\U0001f3f4\U000e0070\U000e0077\U000e0032\U000e0031\U000e0038\U000e007f" + FLAG_FOR_CORDOBA_AR_X = "\U0001f3f4\U000e0061\U000e0072\U000e0078\U000e007f" + FLAG_FOR_CENTRAL_SINGAPORE_SG_01 = "\U0001f3f4\U000e0073\U000e0067\U000e0030\U000e0031\U000e007f" + FLAG_FOR_CAMPANIA_IT_72 = "\U0001f3f4\U000e0069\U000e0074\U000e0037\U000e0032\U000e007f" + FLAG_FOR_CIBAO_NORTE_DO_35 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0035\U000e007f" + MAHJONG_TILE_THREE_OF_BAMBOOS = "\U0001f012" + FLAG_FOR_ARAGATSOTN_AM_AG = "\U0001f3f4\U000e0061\U000e006d\U000e0061\U000e0067\U000e007f" + FLAG_FOR_GRAND_GEDEH_LR_GG = "\U0001f3f4\U000e006c\U000e0072\U000e0067\U000e0067\U000e007f" + FLAG_FOR_ABRUZZO_IT_65 = "\U0001f3f4\U000e0069\U000e0074\U000e0036\U000e0035\U000e007f" + CERES = "\u26b3" + FAMILY_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_CARINTHIA_AT_2 = "\U0001f3f4\U000e0061\U000e0074\U000e0032\U000e007f" + MARRIAGE_SYMBOL = "\u26ad" + LIGHTNING = "\u2607" + SUN_2 = "\u2609" + FLAG_FOR_CENTRAL_GREECE_GR_H = "\U0001f3f4\U000e0067\U000e0072\U000e0068\U000e007f" + FAMILY_WOMAN_MAN_BOY_GIRL = "\U0001f469\u200d\U0001f468\u200d\U0001f466\u200d\U0001f467" FLAG_FOR_BASEL_LANDSCHAFT_CH_BL = "\U0001f3f4\U000e0063\U000e0068\U000e0062\U000e006c\U000e007f" + FLAG_FOR_UTTARAKHAND_IN_UT = "\U0001f3f4\U000e0069\U000e006e\U000e0075\U000e0074\U000e007f" + UP_POINTING_SMALL_AIRPLANE = "\U0001f6e8" + FLAG_FOR_MENDOZA_AR_M = "\U0001f3f4\U000e0061\U000e0072\U000e006d\U000e007f" FLAG_FOR_MAMOU_REGION_GN_M = "\U0001f3f4\U000e0067\U000e006e\U000e006d\U000e007f" FLAG_FOR_ATTAPEU_LA_AT = "\U0001f3f4\U000e006c\U000e0061\U000e0061\U000e0074\U000e007f" - BLACK_TRUCK = "\u26df" - GEAR_WITHOUT_HUB = "\u26ed" - FLAG_FOR_TIERRA_DEL_FUEGO_AR_V = "\U0001f3f4\U000e0061\U000e0072\U000e0076\U000e007f" - FLAG_FOR_CARINTHIA_AT_2 = "\U0001f3f4\U000e0061\U000e0074\U000e0032\U000e007f" - CASTLE_2 = "\u26eb" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_SANTIAGO_DEL_ESTERO_AR_G = "\U0001f3f4\U000e0061\U000e0072\U000e0067\U000e007f" - MAHJONG_TILE_PLUM = "\U0001f022" - SUN_2 = "\u2609" - FLAG_FOR_QUANG_BINH_VN_24 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0034\U000e007f" - SQUARE_FOUR_CORNERS = "\u26f6" - FAMILY_MAN_MAN_BOY_GIRL = "\U0001f468\u200d\U0001f468\u200d\U0001f466\u200d\U0001f467" - HISTORIC_SITE = "\u26ec" + FLAG_FOR_SABA_NL_BQ2 = "\U0001f3f4\U000e006e\U000e006c\U000e0062\U000e0071\U000e0032\U000e007f" + FLYING_ENVELOPE = "\U0001f585" + FLAG_FOR_KIRKUK_IQ_KI = "\U0001f3f4\U000e0069\U000e0071\U000e006b\U000e0069\U000e007f" + BLACK_PUSHPIN = "\U0001f588" + CROSSING_LANES = "\u26cc" FAMILY_WOMAN_BABY_BOY = "\U0001f469\u200d\U0001f476\u200d\U0001f466" + TAG_LATIN_SMALL_LETTER_T = "\U000e0074" + COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469" + MOOD_BUBBLE = "\U0001f5f0" + MAHJONG_TILE_PLUM = "\U0001f022" FLAG_FOR_NOUAKCHOTT_OUEST_MR_13 = "\U0001f3f4\U000e006d\U000e0072\U000e0031\U000e0033\U000e007f" - TAG_SPACE = "\U000e0020" RIGHT_THOUGHT_BUBBLE = "\U0001f5ed" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" - ASCENDING_NODE = "\u260a" - HEADSTONE_GRAVEYARD_SYMBOL = "\u26fc" - FALLING_DIAGONAL_IN_WHITE_CIRCLE_IN_BLACK_SQUARE = "\u26de" - FLAG_FOR_AZORES_PT_20 = "\U0001f3f4\U000e0070\U000e0074\U000e0032\U000e0030\U000e007f" - CONJUNCTION = "\u260c" - FLAG_FOR_MBOMOU_CF_MB = "\U0001f3f4\U000e0063\U000e0066\U000e006d\U000e0062\U000e007f" - FLAG_FOR_ILOCOS_PH_01 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0031\U000e007f" - CUP_ON_BLACK_SQUARE = "\u26fe" - FLAG_FOR_TYROL_AT_7 = "\U0001f3f4\U000e0061\U000e0074\U000e0037\U000e007f" + DIGIT_ZERO = "0\ufe0f" + FLAG_FOR_SAXONY_DE_SN = "\U0001f3f4\U000e0064\U000e0065\U000e0073\U000e006e\U000e007f" + FLAG_FOR_SACATEPEQUEZ_GT_SA = "\U0001f3f4\U000e0067\U000e0074\U000e0073\U000e0061\U000e007f" + KISS_MAN_DARK_SKIN_TONE_MAN = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" DESCENDING_NODE = "\u260b" - FLAG_FOR_GUIZHOU_CN_52 = "\U0001f3f4\U000e0063\U000e006e\U000e0035\U000e0032\U000e007f" - ADI_SHAKTI = "\u262c" - OPPOSITION = "\u260d" - FLAG_FOR_VORARLBERG_AT_8 = "\U0001f3f4\U000e0061\U000e0074\U000e0038\U000e007f" - BLACK_RIGHT_POINTING_INDEX = "\u261b" - FARSI_SYMBOL = "\u262b" - FLAG_FOR_XAISOMBOUN_LA_XS = "\U0001f3f4\U000e006c\U000e0061\U000e0078\U000e0073\U000e007f" - WHITE_TELEPHONE = "\u260f" - HAMMER_AND_SICKLE = "\u262d" - LAST_QUARTER_MOON_2 = "\u263e" - FLAG_FOR_MANABI_EC_M = "\U0001f3f4\U000e0065\U000e0063\U000e006d\U000e007f" - FLAG_FOR_AGUASCALIENTES_MX_AGU = "\U0001f3f4\U000e006d\U000e0078\U000e0061\U000e0067\U000e0075\U000e007f" - FAMILY_WOMAN_BOY_BABY = "\U0001f469\u200d\U0001f466\u200d\U0001f476" - BLACK_LEFT_POINTING_INDEX = "\u261a" - FAMILY_WOMAN_MAN_GIRL_BABY = "\U0001f469\u200d\U0001f468\u200d\U0001f467\u200d\U0001f476" - FIRST_QUARTER_MOON_2 = "\u263d" - BLACK_SMILING_FACE = "\u263b" - FLAG_FOR_QUEENSLAND_AU_QLD = "\U0001f3f4\U000e0061\U000e0075\U000e0071\U000e006c\U000e0064\U000e007f" - WHITE_FLAG_WITH_HORIZONTAL_MIDDLE_BLACK_STRIPE = "\u26ff" - BLACK_CHESS_QUEEN = "\u265b" + FLAG_FOR_VIEUX_FORT_LC_11 = "\U0001f3f4\U000e006c\U000e0063\U000e0031\U000e0031\U000e007f" + ONCOMING_FIRE_ENGINE = "\U0001f6f1" + FLAG_FOR_QUANG_BINH_VN_24 = "\U0001f3f4\U000e0076\U000e006e\U000e0032\U000e0034\U000e007f" + FLAG_FOR_TYROL_AT_7 = "\U0001f3f4\U000e0061\U000e0074\U000e0037\U000e007f" + FLAG_FOR_FRANCISTOWN_BW_FR = "\U0001f3f4\U000e0062\U000e0077\U000e0066\U000e0072\U000e007f" + DISABLED_CAR = "\u26cd" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_MBOMOU_CF_MB = "\U0001f3f4\U000e0063\U000e0066\U000e006d\U000e0062\U000e007f" + ASCENDING_NODE = "\u260a" + FLAG_FOR_ILOCOS_PH_01 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0031\U000e007f" + HEAVY_CIRCLE_WITH_STROKE_AND_TWO_DOTS_ABOVE = "\u26e3" + MAHJONG_TILE_FIVE_OF_BAMBOOS = "\U0001f014" + FLAG_FOR_SAINT_GEORGE_GD_03 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0033\U000e007f" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FLAG_FOR_TAIWAN_CN_71 = "\U0001f3f4\U000e0063\U000e006e\U000e0037\U000e0031\U000e007f" FLAG_FOR_VENETO_IT_34 = "\U0001f3f4\U000e0069\U000e0074\U000e0033\U000e0034\U000e007f" - KISS_MAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - FAMILY_MAN_MAN_BABY_BABY = "\U0001f468\u200d\U0001f468\u200d\U0001f476\u200d\U0001f476" - BLACK_CHESS_BISHOP = "\u265d" - FAMILY_WOMAN_WOMAN_BABY_BABY = "\U0001f469\u200d\U0001f469\u200d\U0001f476\u200d\U0001f476" + FLAG_FOR_LUANDA_AO_LUA = "\U0001f3f4\U000e0061\U000e006f\U000e006c\U000e0075\U000e0061\U000e007f" + FLAG_FOR_SAINT_LOUIS_SN_SL = "\U0001f3f4\U000e0073\U000e006e\U000e0073\U000e006c\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff" + EMPTY_PAGE = "\U0001f5cc" + BOUQUET_OF_FLOWERS = "\U0001f395" + FLAG_FOR_XAISOMBOUN_LA_XS = "\U0001f3f4\U000e006c\U000e0061\U000e0078\U000e0073\U000e007f" + FLAG_FOR_TUCUMAN_AR_T = "\U0001f3f4\U000e0061\U000e0072\U000e0074\U000e007f" + RAIN = "\u26c6" + FAMILY_MAN_MAN_BOY_GIRL = "\U0001f468\u200d\U0001f468\u200d\U0001f466\u200d\U0001f467" + FLAG_FOR_ANKARA_TR_06 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0036\U000e007f" + FLAG_FOR_GUIZHOU_CN_52 = "\U0001f3f4\U000e0063\U000e006e\U000e0035\U000e0032\U000e007f" + FLAG_FOR_SVALBARD_NO_21 = "\U0001f3f4\U000e006e\U000e006f\U000e0032\U000e0031\U000e007f" + FARSI_SYMBOL = "\u262b" + PENTAGRAM = "\u26e4" + HARD_DISK = "\U0001f5b4" + FLAG_FOR_VORARLBERG_AT_8 = "\U0001f3f4\U000e0061\U000e0074\U000e0038\U000e007f" + NO_PIRACY = "\U0001f572" + RECYCLING_SYMBOL_FOR_TYPE_6_PLASTICS = "\u2678" + OPPOSITION = "\u260d" + FLAG_FOR_ZAIRE_AO_ZAI = "\U0001f3f4\U000e0061\U000e006f\U000e007a\U000e0061\U000e0069\U000e007f" + FLAG_FOR_AMHARA_ET_AM = "\U0001f3f4\U000e0065\U000e0074\U000e0061\U000e006d\U000e007f" + MAHJONG_TILE_SPRING = "\U0001f026" + FLAG_FOR_RED_SEA_SD_RS = "\U0001f3f4\U000e0073\U000e0064\U000e0072\U000e0073\U000e007f" + FLAG_FOR_PIETA_MT_41 = "\U0001f3f4\U000e006d\U000e0074\U000e0034\U000e0031\U000e007f" + FLAG_FOR_ZABUL_AF_ZAB = "\U0001f3f4\U000e0061\U000e0066\U000e007a\U000e0061\U000e0062\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" + BLACK_SMILING_FACE = "\u263b" + FLAG_FOR_SANTA_CRUZ_BO_S = "\U0001f3f4\U000e0062\U000e006f\U000e0073\U000e007f" + KISS_MAN_DARK_SKIN_TONE_WOMAN = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" + BLACK_FOLDER = "\U0001f5bf" + FLAG_FOR_SANTA_CATARINA_BR_SC = "\U0001f3f4\U000e0062\U000e0072\U000e0073\U000e0063\U000e007f" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" + FAMILY_WOMAN_MAN_GIRL_BABY = "\U0001f469\u200d\U0001f468\u200d\U0001f467\u200d\U0001f476" + FLAG_FOR_BASQUE_COUNTRY_ES_PV = "\U0001f3f4\U000e0065\U000e0073\U000e0070\U000e0076\U000e007f" + TAG_LATIN_CAPITAL_LETTER_V = "\U000e0056" + FLAG_FOR_MANABI_EC_M = "\U0001f3f4\U000e0065\U000e0063\U000e006d\U000e007f" + LAST_QUARTER_MOON_2 = "\u263e" + FLAG_FOR_NAVARRA_CHARTERED_COMMUNITY_ES_NC = "\U0001f3f4\U000e0065\U000e0073\U000e006e\U000e0063\U000e007f" + INVERTED_PENTAGRAM = "\u26e7" FAMILY_WOMAN_MAN_GIRL = "\U0001f469\u200d\U0001f468\u200d\U0001f467" - BLACK_CHESS_KNIGHT = "\u265e" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_DALARNA_SE_W = "\U0001f3f4\U000e0073\U000e0065\U000e0077\U000e007f" + MAHJONG_TILE_TWO_OF_CHARACTERS = "\U0001f008" + BITCOIN_SIGN = "\u20bf" + FLAG_FOR_CHUUK_FM_TRK = "\U0001f3f4\U000e0066\U000e006d\U000e0074\U000e0072\U000e006b\U000e007f" + FLAG_FOR_KERICHO_KE_12 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0032\U000e007f" + BLACK_LEFT_POINTING_INDEX = "\u261a" + BLACK_RIGHT_POINTING_INDEX = "\u261b" + KISS_MAN_LIGHT_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" + FLAG_FOR_SARAWAK_MY_13 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0033\U000e007f" + BLACK_DRAUGHTS_MAN = "\u26c2" + FLAG_FOR_BEAU_BASSIN_ROSE_HILL_MU_BR = "\U0001f3f4\U000e006d\U000e0075\U000e0062\U000e0072\U000e007f" FLAG_FOR_GOA_IN_GA = "\U0001f3f4\U000e0069\U000e006e\U000e0067\U000e0061\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" - FLAG_FOR_UPPER_AUSTRIA_AT_4 = "\U0001f3f4\U000e0061\U000e0074\U000e0034\U000e007f" + FLAG_FOR_PERNAMBUCO_BR_PE = "\U0001f3f4\U000e0062\U000e0072\U000e0070\U000e0065\U000e007f" + WOMAN_WITH_HEADSCARF_DARK_SKIN_TONE = "\U0001f9d5\U0001f3ff\u200d\u2640\ufe0f" FLAG_FOR_YUKON_CA_YT = "\U0001f3f4\U000e0063\U000e0061\U000e0079\U000e0074\U000e007f" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - FLAG_FOR_KARNATAKA_IN_KA = "\U0001f3f4\U000e0069\U000e006e\U000e006b\U000e0061\U000e007f" - KISS_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" - FLAG_FOR_STYRIA_AT_6 = "\U0001f3f4\U000e0061\U000e0074\U000e0036\U000e007f" - MUSIC_SHARP_SIGN = "\u266f" - FLAG_FOR_AGSTAFA_AZ_AGA = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0067\U000e0061\U000e007f" - BEAMED_SIXTEENTH_NOTES = "\u266c" - APPLE_LOGO = "\uf8ff" - TAG_QUOTATION_MARK = "\U000e0022" - FLAG_FOR_HONG_KONG_SAR_CHINA_CN_91 = "\U0001f3f4\U000e0063\U000e006e\U000e0039\U000e0031\U000e007f" - MUSIC_NATURAL_SIGN = "\u266e" - FLAG_FOR_ZEALAND_DK_85 = "\U0001f3f4\U000e0064\U000e006b\U000e0038\U000e0035\U000e007f" + FLAG_FOR_SICHUAN_CN_51 = "\U0001f3f4\U000e0063\U000e006e\U000e0035\U000e0031\U000e007f" + FLAG_FOR_LAKES_SS_LK = "\U0001f3f4\U000e0073\U000e0073\U000e006c\U000e006b\U000e007f" + HAMMER_AND_SICKLE = "\u262d" + FLAG_FOR_BEIJING_CN_11 = "\U0001f3f4\U000e0063\U000e006e\U000e0031\U000e0031\U000e007f" + FLAG_FOR_UPPER_AUSTRIA_AT_4 = "\U0001f3f4\U000e0061\U000e0074\U000e0034\U000e007f" + FLAG_FOR_LAPLAND_FI_10 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0030\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_HIMACHAL_PRADESH_IN_HP = "\U0001f3f4\U000e0069\U000e006e\U000e0068\U000e0070\U000e007f" + FLAG_FOR_VELIKA_POLANA_SI_187 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0037\U000e007f" + FLAG_FOR_MUSLIM_MINDANAO_PH_14 = "\U0001f3f4\U000e0070\U000e0068\U000e0031\U000e0034\U000e007f" + HEADSTONE_GRAVEYARD_SYMBOL = "\u26fc" + CLAMSHELL_MOBILE_PHONE = "\U0001f581" + FLAG_FOR_KOSOVO_METOHIJA_RS_KM = "\U0001f3f4\U000e0072\U000e0073\U000e006b\U000e006d\U000e007f" DIGIT_TWO = "2\ufe0f" - MAHJONG_TILE_ONE_OF_CHARACTERS = "\U0001f007" + FLAG_FOR_PUNJAB_IN_PB = "\U0001f3f4\U000e0069\U000e006e\U000e0070\U000e0062\U000e007f" + SIDEWAYS_BLACK_DOWN_POINTING_INDEX = "\U0001f5a1" FLAG_FOR_DOHA_QA_DA = "\U0001f3f4\U000e0071\U000e0061\U000e0064\U000e0061\U000e007f" - TAG_LATIN_CAPITAL_LETTER_A = "\U000e0041" - MUSIC_FLAT_SIGN = "\u266d" - FLAG_FOR_AGHJABADI_AZ_AGC = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0067\U000e0063\U000e007f" - PARTIALLY_RECYCLED_PAPER_SYMBOL = "\u267d" + FAMILY_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f476\U0001f3ff" + DOUBLED_FEMALE_SIGN = "\u26a2" + BLACK_SKULL_AND_CROSSBONES = "\U0001f571" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_ZEALAND_DK_85 = "\U0001f3f4\U000e0064\U000e006b\U000e0038\U000e0035\U000e007f" + STAFF_OF_HERMES = "\u269a" + QUINCUNX = "\u26bb" FLAG_FOR_SANTA_FE_AR_S = "\U0001f3f4\U000e0061\U000e0072\U000e0073\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe" - FLAG_FOR_VEST_AGDER_NO_10 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0030\U000e007f" - FLAG_FOR_NEBRASKA_US_NE = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0065\U000e007f" - FLAG_FOR_BALAKAN_AZ_BAL = "\U0001f3f4\U000e0061\U000e007a\U000e0062\U000e0061\U000e006c\U000e007f" - FLAG_FOR_BAKU_AZ_BA = "\U0001f3f4\U000e0061\U000e007a\U000e0062\U000e0061\U000e007f" - FLAG_FOR_AGDASH_AZ_AGS = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0067\U000e0073\U000e007f" - FLAG_FOR_AGDAM_AZ_AGM = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0067\U000e006d\U000e007f" + FLAG_FOR_ADIYAMAN_TR_02 = "\U0001f3f4\U000e0074\U000e0072\U000e0030\U000e0032\U000e007f" + FLAG_FOR_KAFR_EL_SHEIKH_EG_KFS = "\U0001f3f4\U000e0065\U000e0067\U000e006b\U000e0066\U000e0073\U000e007f" FLAG_FOR_ASTARA_AZ_AST = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0073\U000e0074\U000e007f" - FLAG_FOR_BONAIRE_NL_BQ1 = "\U0001f3f4\U000e006e\U000e006c\U000e0062\U000e0071\U000e0031\U000e007f" - BLACK_CHESS_ROOK = "\u265c" - RECYCLED_PAPER_SYMBOL = "\u267c" - FLAG_FOR_TANGANYIKA_CD_TA = "\U0001f3f4\U000e0063\U000e0064\U000e0074\U000e0061\U000e007f" - MAP_SYMBOL_FOR_LIGHTHOUSE = "\u26ef" + FLAG_FOR_SAINT_PATRICK_DM_09 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0039\U000e007f" + FLAG_FOR_AGDAM_AZ_AGM = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0067\U000e006d\U000e007f" + FLAG_FOR_TIERRA_DEL_FUEGO_AR_V = "\U0001f3f4\U000e0061\U000e0072\U000e0076\U000e007f" + SIDEWAYS_BLACK_LEFT_POINTING_INDEX = "\U0001f59a" + TAG_DIGIT_FIVE = "\U000e0035" + FLAG_FOR_KANSAS_US_KS = "\U0001f3f4\U000e0075\U000e0073\U000e006b\U000e0073\U000e007f" + MUSIC_FLAT_SIGN = "\u266d" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" + BALLOT_BOX_WITH_X = "\u2612" + TAG_LOW_LINE = "\U000e005f" + FLAG_FOR_ADYGEA_RU_AD = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e0064\U000e007f" + TELEPHONE_ON_TOP_OF_MODEM = "\U0001f580" + FLAG_FOR_NINGXIA_CN_64 = "\U0001f3f4\U000e0063\U000e006e\U000e0036\U000e0034\U000e007f" + FLAG_FOR_GAVLEBORG_SE_X = "\U0001f3f4\U000e0073\U000e0065\U000e0078\U000e007f" FLAG_FOR_AGSU_AZ_AGU = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0067\U000e0075\U000e007f" - FLAG_FOR_NORTHERN_IRELAND_GB_NIR = "\U0001f3f4\U000e0067\U000e0062\U000e006e\U000e0069\U000e0072\U000e007f" - MONOGRAM_FOR_YIN = "\u268b" - MONOGRAM_FOR_YANG = "\u268a" - FLAG_FOR_ALGIERS_DZ_16 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0036\U000e007f" - SIDEWAYS_WHITE_RIGHT_POINTING_INDEX = "\U0001f599" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" - FLAG_FOR_EAST_MACEDONIA_AND_THRACE_GR_A = "\U0001f3f4\U000e0067\U000e0072\U000e0061\U000e007f" - DIGRAM_FOR_LESSER_YANG = "\u268e" - FLAG_FOR_JALILABAD_AZ_CAL = "\U0001f3f4\U000e0061\U000e007a\U000e0063\U000e0061\U000e006c\U000e007f" - FLAG_FOR_BARDA_AZ_BAR = "\U0001f3f4\U000e0061\U000e007a\U000e0062\U000e0061\U000e0072\U000e007f" + HISTORIC_SITE = "\u26ec" + FLAG_FOR_KAGAWA_JP_37 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0037\U000e007f" + FLAG_FOR_BOMI_LR_BM = "\U0001f3f4\U000e006c\U000e0072\U000e0062\U000e006d\U000e007f" + FLAG_FOR_MIDLANDS_ZW_MI = "\U0001f3f4\U000e007a\U000e0077\U000e006d\U000e0069\U000e007f" + FLAG_FOR_AGHJABADI_AZ_AGC = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0067\U000e0063\U000e007f" + SIDEWAYS_WHITE_UP_POINTING_INDEX = "\U0001f59e" + KISS_MAN_WOMAN = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" + FLAG_FOR_NEUQUEN_AR_Q = "\U0001f3f4\U000e0061\U000e0072\U000e0071\U000e007f" + FLAG_FOR_AZORES_PT_20 = "\U0001f3f4\U000e0070\U000e0074\U000e0032\U000e0030\U000e007f" + FLAG_FOR_BAS_CONGO_CD_BC = "\U0001f3f4\U000e0063\U000e0064\U000e0062\U000e0063\U000e007f" FLAG_FOR_BILASUVAR_AZ_BIL = "\U0001f3f4\U000e0061\U000e007a\U000e0062\U000e0069\U000e006c\U000e007f" + FLAG_FOR_KURSK_RU_KRS = "\U0001f3f4\U000e0072\U000e0075\U000e006b\U000e0072\U000e0073\U000e007f" + FLAG_FOR_BARDA_AZ_BAR = "\U0001f3f4\U000e0061\U000e007a\U000e0062\U000e0061\U000e0072\U000e007f" + TRIGRAM_FOR_LAKE = "\u2631" FLAG_FOR_JABRAYIL_AZ_CAB = "\U0001f3f4\U000e0061\U000e007a\U000e0063\U000e0061\U000e0062\U000e007f" - FLAG_FOR_DASHKASAN_AZ_DAS = "\U0001f3f4\U000e0061\U000e007a\U000e0064\U000e0061\U000e0073\U000e007f" - FLAG_FOR_PAPUA_ISLANDS_ID_PP = "\U0001f3f4\U000e0069\U000e0064\U000e0070\U000e0070\U000e007f" - DIGRAM_FOR_LESSER_YIN = "\u268d" - KISS_WOMAN_WOMAN_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" - FAMILY_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_NORTHLAND_NZ_NTL = "\U0001f3f4\U000e006e\U000e007a\U000e006e\U000e0074\U000e006c\U000e007f" + NOTCHED_RIGHT_SEMICIRCLE_WITH_THREE_DOTS = "\U0001f544" + FLAG_FOR_FIZULI_AZ_FUZ = "\U0001f3f4\U000e0061\U000e007a\U000e0066\U000e0075\U000e007a\U000e007f" FLAG_FOR_BEYLAGAN_AZ_BEY = "\U0001f3f4\U000e0061\U000e007a\U000e0062\U000e0065\U000e0079\U000e007f" FLAG_FOR_NIARI_CG_9 = "\U0001f3f4\U000e0063\U000e0067\U000e0039\U000e007f" - FLAG_FOR_FIZULI_AZ_FUZ = "\U0001f3f4\U000e0061\U000e007a\U000e0066\U000e0075\U000e007a\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" - FLAG_FOR_EASTERN_FJ_E = "\U0001f3f4\U000e0066\U000e006a\U000e0065\U000e007f" - FLAG_FOR_SISTAN_AND_BALUCHESTAN_IR_13 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0033\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f476\U0001f3ff" - TAG_LATIN_SMALL_LETTER_N = "\U000e006e" - FLAG_FOR_GORANBOY_AZ_GOR = "\U0001f3f4\U000e0061\U000e007a\U000e0067\U000e006f\U000e0072\U000e007f" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - FLAG_FOR_UMM_SALAL_QA_US = "\U0001f3f4\U000e0071\U000e0061\U000e0075\U000e0073\U000e007f" - FLAG_FOR_GOYCHAY_AZ_GOY = "\U0001f3f4\U000e0061\U000e007a\U000e0067\U000e006f\U000e0079\U000e007f" - BOOK = "\U0001f56e" - FLAG_FOR_SHANGHAI_CN_31 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0031\U000e007f" + FAMILY_WOMAN_MAN_BABY = "\U0001f469\u200d\U0001f468\u200d\U0001f476" + FAMILY_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" + WHITE_DRAUGHTS_MAN = "\u26c0" + FLAG_FOR_SAINT_JOSEPH_DM_06 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0036\U000e007f" + DIGRAM_FOR_LESSER_YIN = "\u268d" + TAG_DIGIT_THREE = "\U000e0033" + FLAG_FOR_PAPUA_ISLANDS_ID_PP = "\U0001f3f4\U000e0069\U000e0064\U000e0070\U000e0070\U000e007f" + FLAG_FOR_HARBOUR_ISLAND_BS_HI = "\U0001f3f4\U000e0062\U000e0073\U000e0068\U000e0069\U000e007f" FLAG_FOR_YEREVAN_AM_ER = "\U0001f3f4\U000e0061\U000e006d\U000e0065\U000e0072\U000e007f" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" + KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" + ANKH = "\u2625" + LIGHT_CHECK_MARK = "\U0001f5f8" + KISS_WOMAN_WOMAN_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + FLAG_FOR_GOYCHAY_AZ_GOY = "\U0001f3f4\U000e0061\U000e007a\U000e0067\U000e006f\U000e0079\U000e007f" + TAG_LATIN_CAPITAL_LETTER_A = "\U000e0041" FLAG_FOR_PORT_HERCULES_MC_PH = "\U0001f3f4\U000e006d\U000e0063\U000e0070\U000e0068\U000e007f" - FLAG_FOR_GOYGOL_AZ_GYG = "\U0001f3f4\U000e0061\U000e007a\U000e0067\U000e0079\U000e0067\U000e007f" - FLAG_FOR_JALISCO_MX_JAL = "\U0001f3f4\U000e006d\U000e0078\U000e006a\U000e0061\U000e006c\U000e007f" - FLAG_FOR_HAJIGABUL_AZ_HAC = "\U0001f3f4\U000e0061\U000e007a\U000e0068\U000e0061\U000e0063\U000e007f" - FLAG_FOR_FEDERAL_CAPITAL_TERRITORY_NG_FC = "\U0001f3f4\U000e006e\U000e0067\U000e0066\U000e0063\U000e007f" - KISS_MAN_LIGHT_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - THUNDERSTORM = "\u2608" + CIRCLED_CROSSING_LANES = "\u26d2" + MONOGRAM_FOR_YANG = "\u268a" + FLAG_FOR_CESAR_CO_CES = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0065\U000e0073\U000e007f" + DECREASE_FONT_SIZE_SYMBOL = "\U0001f5db" + BALLOT_BOLD_SCRIPT_X = "\U0001f5f6" + FLAG_FOR_JERUSALEM_PS_JEM = "\U0001f3f4\U000e0070\U000e0073\U000e006a\U000e0065\U000e006d\U000e007f" + FLAG_FOR_UMM_SALAL_QA_US = "\U0001f3f4\U000e0071\U000e0061\U000e0075\U000e0073\U000e007f" + BLACK_CHESS_BISHOP = "\u265d" FLAG_FOR_KALIMANTAN_ID_KA = "\U0001f3f4\U000e0069\U000e0064\U000e006b\U000e0061\U000e007f" - BLACK_STAR = "\u2605" - BLACK_SHOGI_PIECE = "\u2617" - FLAG_FOR_REZEKNE_MUNICIPALITY_LV_077 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0037\U000e007f" - EIGHTH_NOTE = "\u266a" - KISS_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" - LOWER_RIGHT_PENCIL = "\u270e" BALLOT_BOX = "\u2610" FLAG_FOR_BRYANSK_RU_BRY = "\U0001f3f4\U000e0072\U000e0075\U000e0062\U000e0072\U000e0079\U000e007f" + KISS_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" + FLAG_FOR_AGDASH_AZ_AGS = "\U0001f3f4\U000e0061\U000e007a\U000e0061\U000e0067\U000e0073\U000e007f" + FLAG_FOR_GOYGOL_AZ_GYG = "\U0001f3f4\U000e0061\U000e007a\U000e0067\U000e0079\U000e0067\U000e007f" + FLAG_FOR_HAJIGABUL_AZ_HAC = "\U0001f3f4\U000e0061\U000e007a\U000e0068\U000e0061\U000e0063\U000e007f" + FLAG_FOR_KASTAMONU_TR_37 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0037\U000e007f" + FLAG_FOR_REZEKNE_MUNICIPALITY_LV_077 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0037\U000e007f" + FLAG_FOR_BONAIRE_NL_BQ1 = "\U0001f3f4\U000e006e\U000e006c\U000e0062\U000e0071\U000e0031\U000e007f" FLAG_FOR_TAVUSH_AM_TV = "\U0001f3f4\U000e0061\U000e006d\U000e0074\U000e0076\U000e007f" - TAG_LEFT_SQUARE_BRACKET = "\U000e005b" - THREE_LINES_CONVERGING_LEFT = "\u269f" - TAG_LATIN_CAPITAL_LETTER_I = "\U000e0049" - ANKH = "\u2625" - FLAG_FOR_LOPBURI_TH_16 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0036\U000e007f" - CROSS_OF_LORRAINE = "\u2628" - TRIGRAM_FOR_HEAVEN = "\u2630" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469" - CAUTION_SIGN = "\u2621" - FLAG_FOR_LENINGRAD_RU_LEN = "\U0001f3f4\U000e0072\U000e0075\U000e006c\U000e0065\U000e006e\U000e007f" - CADUCEUS = "\u2624" - CHI_RHO = "\u2627" - TRIGRAM_FOR_LAKE = "\u2631" - FLAG_FOR_SEKONG_LA_XE = "\U0001f3f4\U000e006c\U000e0061\U000e0078\U000e0065\U000e007f" - REVERSED_ROTATED_FLORAL_HEART_BULLET = "\u2619" - FLAG_FOR_GORJ_RO_GJ = "\U0001f3f4\U000e0072\U000e006f\U000e0067\U000e006a\U000e007f" - BALLOT_BOX_WITH_SCRIPT_X = "\U0001f5f5" - FLAG_FOR_IMISHLI_AZ_IMI = "\U0001f3f4\U000e0061\U000e007a\U000e0069\U000e006d\U000e0069\U000e007f" - KISS_WOMAN_DARK_SKIN_TONE_WOMAN = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - TRIGRAM_FOR_FIRE = "\u2632" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" + WHITE_TELEPHONE = "\u260f" + FLAG_FOR_VEST_AGDER_NO_10 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0030\U000e007f" + FLAG_FOR_GORANBOY_AZ_GOR = "\U0001f3f4\U000e0061\U000e007a\U000e0067\U000e006f\U000e0072\U000e007f" FLAG_FOR_CROSS_RIVER_NG_CR = "\U0001f3f4\U000e006e\U000e0067\U000e0063\U000e0072\U000e007f" - FLAG_FOR_KURDAMIR_AZ_KUR = "\U0001f3f4\U000e0061\U000e007a\U000e006b\U000e0075\U000e0072\U000e007f" - CROSS_OF_JERUSALEM = "\u2629" + FLAG_FOR_IMISHLI_AZ_IMI = "\U0001f3f4\U000e0061\U000e007a\U000e0069\U000e006d\U000e0069\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_TANGANYIKA_CD_TA = "\U0001f3f4\U000e0063\U000e0064\U000e0074\U000e0061\U000e007f" + BLACK_STAR = "\u2605" + CAUTION_SIGN = "\u2621" + FLAG_FOR_SHANGHAI_CN_31 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0031\U000e007f" + CHI_RHO = "\u2627" + BALLOT_BOX_WITH_BOLD_SCRIPT_X = "\U0001f5f7" + TRIGRAM_FOR_FIRE = "\u2632" + FLAG_FOR_WEST_VIRGINIA_US_WV = "\U0001f3f4\U000e0075\U000e0073\U000e0077\U000e0076\U000e007f" + FLAG_FOR_CLIPPERTON_ISLAND_FR_CP = "\U0001f3f4\U000e0066\U000e0072\U000e0063\U000e0070\U000e007f" + EIGHTH_NOTE = "\u266a" + CROSS_OF_LORRAINE = "\u2628" + CADUCEUS = "\u2624" + FLAG_FOR_GORJ_RO_GJ = "\U0001f3f4\U000e0072\U000e006f\U000e0067\U000e006a\U000e007f" OUTLINED_WHITE_STAR = "\u269d" - URANUS = "\u2645" - FAMILY_WOMAN_WOMAN_BABY_GIRL = "\U0001f469\u200d\U0001f469\u200d\U0001f476\u200d\U0001f467" - FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" - TRIGRAM_FOR_WATER = "\u2635" - FLAG_FOR_GADABAY_AZ_GAD = "\U0001f3f4\U000e0061\U000e007a\U000e0067\U000e0061\U000e0064\U000e007f" - FLAG_FOR_TAKHAR_AF_TAK = "\U0001f3f4\U000e0061\U000e0066\U000e0074\U000e0061\U000e006b\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_ALTAI_KRAI_RU_ALT = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e006c\U000e0074\U000e007f" + KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" FLAG_FOR_LACHIN_AZ_LAC = "\U0001f3f4\U000e0061\U000e007a\U000e006c\U000e0061\U000e0063\U000e007f" - SATURN = "\u2644" + FLAG_FOR_TAKHAR_AF_TAK = "\U0001f3f4\U000e0061\U000e0066\U000e0074\U000e0061\U000e006b\U000e007f" FLAG_FOR_LANKARAN_AZ_LA = "\U0001f3f4\U000e0061\U000e007a\U000e006c\U000e0061\U000e007f" - WHITE_SHOGI_PIECE = "\u2616" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468" - FLAG_FOR_LERIK_AZ_LER = "\U0001f3f4\U000e0061\U000e007a\U000e006c\U000e0065\U000e0072\U000e007f" - EARTH = "\u2641" - WHITE_CHESS_ROOK = "\u2656" - FLAG_FOR_MINGACHEVIR_AZ_MI = "\U0001f3f4\U000e0061\U000e007a\U000e006d\U000e0069\U000e007f" - PLUTO = "\u2647" - THREE_LINES_CONVERGING_RIGHT = "\u269e" - FLAG_FOR_MASALLY_AZ_MAS = "\U0001f3f4\U000e0061\U000e007a\U000e006d\U000e0061\U000e0073\U000e007f" - BLACK_CHESS_KING = "\u265a" - KISS_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" - NEPTUNE = "\u2646" - FLAG_FOR_NAFTALAN_AZ_NA = "\U0001f3f4\U000e0061\U000e007a\U000e006e\U000e0061\U000e007f" - WHITE_CHESS_KING = "\u2654" - WHITE_CHESS_QUEEN = "\u2655" - FLAG_FOR_LANKARAN_DISTRICT_AZ_LAN = "\U0001f3f4\U000e0061\U000e007a\U000e006c\U000e0061\U000e006e\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" - FAMILY_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_NEFTCHALA_AZ_NEF = "\U0001f3f4\U000e0061\U000e007a\U000e006e\U000e0065\U000e0066\U000e007f" - FLAG_FOR_CELJE_SI_011 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0031\U000e007f" - WHITE_HEART_SUIT = "\u2661" - WEST_SYRIAC_CROSS = "\u2670" - FLAG_FOR_NAKHCHIVAN_AR_AZ_NX = "\U0001f3f4\U000e0061\U000e007a\U000e006e\U000e0078\U000e007f" - TAG_PLUS_SIGN = "\U000e002b" - WHITE_SPADE_SUIT = "\u2664" - WHITE_CHESS_PAWN = "\u2659" - FLAG_FOR_PANEVEZIO_MUNICIPALITY_LT_32 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0032\U000e007f" - FAMILY_WOMAN_WOMAN_BOY_BABY = "\U0001f469\u200d\U0001f469\u200d\U0001f466\u200d\U0001f476" - FLAG_FOR_FAIYUM_EG_FYM = "\U0001f3f4\U000e0065\U000e0067\U000e0066\U000e0079\U000e006d\U000e007f" - WHITE_CHESS_BISHOP = "\u2657" - WHITE_DIAMOND_SUIT = "\u2662" - FLAG_FOR_TARACLIA_MD_TA = "\U0001f3f4\U000e006d\U000e0064\U000e0074\U000e0061\U000e007f" - JUPITER = "\u2643" - FLAG_FOR_TANGIER_TETOUAN_MA_01 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0031\U000e007f" - RECYCLING_SYMBOL_FOR_TYPE_2_PLASTICS = "\u2674" - DIGRAM_FOR_GREATER_YIN = "\u268f" - TRIGRAM_FOR_WIND = "\u2634" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - FLAG_FOR_ISMAILLI_AZ_ISM = "\U0001f3f4\U000e0061\U000e007a\U000e0069\U000e0073\U000e006d\U000e007f" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469" - UNIVERSAL_RECYCLING_SYMBOL = "\u2672" - WHITE_CLUB_SUIT = "\u2667" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - QUARTER_NOTE = "\u2669" - FLAG_FOR_NAPO_EC_N = "\U0001f3f4\U000e0065\U000e0063\U000e006e\U000e007f" - EAST_SYRIAC_CROSS = "\u2671" - FLAG_FOR_BRASOV_RO_BV = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e0076\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_GOBUSTAN_AZ_QOB = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e006f\U000e0062\U000e007f" - KISS_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" - FLAG_FOR_QAKH_AZ_QAX = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0061\U000e0078\U000e007f" - FLAG_FOR_QAZAKH_AZ_QAZ = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0061\U000e007a\U000e007f" - FLAG_FOR_QUBADLI_AZ_QBI = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0062\U000e0069\U000e007f" - FLAG_FOR_NANA_MAMBERE_CF_NM = "\U0001f3f4\U000e0063\U000e0066\U000e006e\U000e006d\U000e007f" - KISS_WOMAN_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - FLAG_FOR_SUD_UBANGI_CD_SU = "\U0001f3f4\U000e0063\U000e0064\U000e0073\U000e0075\U000e007f" - FLAG_FOR_HO_CHI_MINH_CITY_VN_SG = "\U0001f3f4\U000e0076\U000e006e\U000e0073\U000e0067\U000e007f" - RECYCLING_SYMBOL_FOR_TYPE_1_PLASTICS = "\u2673" - RECYCLING_SYMBOL_FOR_TYPE_3_PLASTICS = "\u2675" - FLAG_FOR_URI_CH_UR = "\U0001f3f4\U000e0063\U000e0068\U000e0075\U000e0072\U000e007f" - FAMILY_MAN_WOMAN_GIRL_BABY = "\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f476" - FLAG_FOR_QABALA_AZ_QAB = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0061\U000e0062\U000e007f" - RECYCLING_SYMBOL_FOR_TYPE_5_PLASTICS = "\u2677" - FLAG_FOR_OGHUZ_AZ_OGU = "\U0001f3f4\U000e0061\U000e007a\U000e006f\U000e0067\U000e0075\U000e007f" - FLAG_FOR_SMARJESKE_TOPLICE_SI_206 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0036\U000e007f" - FLAG_FOR_COLORADO_US_CO = "\U0001f3f4\U000e0075\U000e0073\U000e0063\U000e006f\U000e007f" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" - KISS_MAN_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - TRIGRAM_FOR_THUNDER = "\u2633" - DIE_FACE_4 = "\u2683" - FLAG_FOR_ASGABAT_TM_S = "\U0001f3f4\U000e0074\U000e006d\U000e0073\U000e007f" - BLACK_CIRCLE_WITH_WHITE_DOT_RIGHT = "\u2688" - DIE_FACE_3 = "\u2682" - FLAG_FOR_MARYLAND_LR_MY = "\U0001f3f4\U000e006c\U000e0072\U000e006d\U000e0079\U000e007f" - FLAG_FOR_QUSAR_AZ_QUS = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0075\U000e0073\U000e007f" - FLAG_FOR_MOGILA_MK_53 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0033\U000e007f" - DIE_FACE_1 = "\u2680" - WHITE_CIRCLE_WITH_DOT_RIGHT = "\u2686" - FLAG_FOR_SABIRABAD_AZ_SAB = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0061\U000e0062\U000e007f" - FLAG_FOR_PANJSHIR_AF_PAN = "\U0001f3f4\U000e0061\U000e0066\U000e0070\U000e0061\U000e006e\U000e007f" - FLAG_FOR_SAINT_PETER_AG_07 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0037\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_SHAKI_DISTRICT_AZ_SAK = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0061\U000e006b\U000e007f" - BLACK_FLAG_2 = "\u2691" - COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" - FLAG_FOR_SHABRAN_AZ_SBN = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0062\U000e006e\U000e007f" - FLAG_FOR_CASANARE_CO_CAS = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0061\U000e0073\U000e007f" - FLAG_FOR_SAATLY_AZ_SAT = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0061\U000e0074\U000e007f" - FAMILY_MAN_WOMAN_BABY_BABY = "\U0001f468\u200d\U0001f469\u200d\U0001f476\u200d\U0001f476" - FLOWER = "\u2698" - FLAG_FOR_QUBA_AZ_QBA = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0062\U000e0061\U000e007f" - RECYCLING_SYMBOL_FOR_TYPE_4_PLASTICS = "\u2676" - DIE_FACE_2 = "\u2681" - WHITE_FLAG_2 = "\u2690" - FAMILY_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb" - FLAG_FOR_SAMUKH_AZ_SMX = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e006d\U000e0078\U000e007f" - FLAG_FOR_SHAMAKHI_AZ_SMI = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e006d\U000e0069\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd" - FLAG_FOR_SHAKI_AZ_SA = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0061\U000e007f" - FLAG_FOR_SHIRVAN_AZ_SR = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0072\U000e007f" - FLAG_FOR_MARTINIQUE_FR_MQ = "\U0001f3f4\U000e0066\U000e0072\U000e006d\U000e0071\U000e007f" - FAMILY_WOMAN_MAN_BOY_BOY = "\U0001f469\u200d\U0001f468\u200d\U0001f466\u200d\U0001f466" - KISS_WOMAN_DARK_SKIN_TONE_MAN = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" - FLAG_FOR_SHUSHA_AZ_SUS = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0075\U000e0073\U000e007f" - FLAG_FOR_SUMQAYIT_AZ_SM = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e006d\U000e007f" - DIE_FACE_5 = "\u2684" - TAG_LATIN_CAPITAL_LETTER_W = "\U000e0057" - FLAG_FOR_VALAIS_CH_VS = "\U0001f3f4\U000e0063\U000e0068\U000e0076\U000e0073\U000e007f" - FLAG_FOR_SIAZAN_AZ_SIY = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0069\U000e0079\U000e007f" - DIVORCE_SYMBOL = "\u26ae" - FLAG_FOR_TOVUZ_AZ_TOV = "\U0001f3f4\U000e0061\U000e007a\U000e0074\U000e006f\U000e0076\U000e007f" - FLAG_FOR_UJAR_AZ_UCA = "\U0001f3f4\U000e0061\U000e007a\U000e0075\U000e0063\U000e0061\U000e007f" - KISS_MAN_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - FLAG_FOR_KHACHMAZ_AZ_XAC = "\U0001f3f4\U000e0061\U000e007a\U000e0078\U000e0061\U000e0063\U000e007f" - TAG_LATIN_SMALL_LETTER_H = "\U000e0068" - FLAG_FOR_TARTAR_AZ_TAR = "\U0001f3f4\U000e0061\U000e007a\U000e0074\U000e0061\U000e0072\U000e007f" - FLAG_FOR_KHOJALI_AZ_XCI = "\U0001f3f4\U000e0061\U000e007a\U000e0078\U000e0063\U000e0069\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" - FLAG_FOR_DOL_PRI_LJUBLJANI_SI_022 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0032\U000e007f" - FLAG_FOR_KHIZI_AZ_XIZ = "\U0001f3f4\U000e0061\U000e007a\U000e0078\U000e0069\U000e007a\U000e007f" - FLAG_FOR_NAVARRA_CHARTERED_COMMUNITY_ES_NC = "\U0001f3f4\U000e0065\U000e0073\U000e006e\U000e0063\U000e007f" - FLAG_FOR_STEPANAKERT_AZ_XA = "\U0001f3f4\U000e0061\U000e007a\U000e0078\U000e0061\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - FAMILY_WOMAN_BABY = "\U0001f469\u200d\U0001f476" - FLAG_FOR_YARDYMLI_AZ_YAR = "\U0001f3f4\U000e0061\U000e007a\U000e0079\U000e0061\U000e0072\U000e007f" - FLAG_FOR_YEVLAKH_DISTRICT_AZ_YEV = "\U0001f3f4\U000e0061\U000e007a\U000e0079\U000e0065\U000e0076\U000e007f" - FLAG_FOR_ZAQATALA_AZ_ZAQ = "\U0001f3f4\U000e0061\U000e007a\U000e007a\U000e0061\U000e0071\U000e007f" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" - FLAG_FOR_YEVLAKH_AZ_YE = "\U0001f3f4\U000e0061\U000e007a\U000e0079\U000e0065\U000e007f" - FLAG_FOR_SALYAN_AZ_SAL = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0061\U000e006c\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_ZARDAB_AZ_ZAR = "\U0001f3f4\U000e0061\U000e007a\U000e007a\U000e0061\U000e0072\U000e007f" - FLAG_FOR_MONTSERRADO_LR_MO = "\U0001f3f4\U000e006c\U000e0072\U000e006d\U000e006f\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" + TAG_LATIN_CAPITAL_LETTER_S = "\U000e0053" + FLAG_FOR_CENTRAL_UG_C = "\U0001f3f4\U000e0075\U000e0067\U000e0063\U000e007f" FLAG_FOR_ZUG_CH_ZG = "\U0001f3f4\U000e0063\U000e0068\U000e007a\U000e0067\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc" - COUPLE_WITH_HEART_MAN_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - FLAG_FOR_BRITISH_COLUMBIA_CA_BC = "\U0001f3f4\U000e0063\U000e0061\U000e0062\U000e0063\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_BATKEN_KG_B = "\U0001f3f4\U000e006b\U000e0067\U000e0062\U000e007f" - FAMILY_WOMAN_MAN_GIRL_GIRL = "\U0001f469\u200d\U0001f468\u200d\U0001f467\u200d\U0001f467" - COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469" - COUPLE_WITH_HEART_MAN_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" - FLAG_FOR_NEW_SOUTH_WALES_AU_NSW = "\U0001f3f4\U000e0061\U000e0075\U000e006e\U000e0073\U000e0077\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_SAINT_ANDREW_BB_02 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0032\U000e007f" - FLAG_FOR_SAINT_GEORGE_BB_03 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0033\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb" - FLAG_FOR_QUINDIO_CO_QUI = "\U0001f3f4\U000e0063\U000e006f\U000e0071\U000e0075\U000e0069\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - RECYCLING_SYMBOL_FOR_GENERIC_MATERIALS = "\u267a" - FLAG_FOR_NORTHERN_TERRITORY_AU_NT = "\U0001f3f4\U000e0061\U000e0075\U000e006e\U000e0074\U000e007f" - FLAG_FOR_SAINT_JAMES_BB_04 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0034\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" - FAMILY_MAN_WOMAN_BABY_BOY = "\U0001f468\u200d\U0001f469\u200d\U0001f476\u200d\U0001f466" - FLAG_FOR_SHAMKIR_AZ_SKR = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e006b\U000e0072\U000e007f" - FLAG_FOR_SAINT_JOHN_BB_05 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0035\U000e007f" - FLAG_FOR_BREST_BY_BR = "\U0001f3f4\U000e0062\U000e0079\U000e0062\U000e0072\U000e007f" - FLAG_FOR_SAINT_ROMAN_MC_SR = "\U0001f3f4\U000e006d\U000e0063\U000e0073\U000e0072\U000e007f" - FLAG_FOR_WESTERN_LK_1 = "\U0001f3f4\U000e006c\U000e006b\U000e0031\U000e007f" - PEN_OVER_STAMPED_ENVELOPE = "\U0001f586" - FLAG_FOR_SAINT_LUCY_BB_07 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0037\U000e007f" - COUPLE_WITH_HEART_MAN_WOMAN = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469" - FLAG_FOR_SAINT_JOSEPH_BB_06 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0036\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd" - TAG_LESS_THAN_SIGN = "\U000e003c" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" - FAMILY_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" - REVERSED_RAISED_HAND_WITH_FINGERS_SPLAYED = "\U0001f591" - FLAG_FOR_SAINT_PHILIP_BB_10 = "\U0001f3f4\U000e0062\U000e0062\U000e0031\U000e0030\U000e007f" - FLAG_FOR_VIEUX_FORT_LC_11 = "\U0001f3f4\U000e006c\U000e0063\U000e0031\U000e0031\U000e007f" - FLAG_FOR_SAINT_GEORGE_VC_04 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0034\U000e007f" - FAMILY_WOMAN_BABY_GIRL = "\U0001f469\u200d\U0001f476\u200d\U0001f467" - FLAG_FOR_CASTILE_LA_MANCHA_ES_CM = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e006d\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" - KISS_WOMAN_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" - FLAG_FOR_BARISAL_BD_A = "\U0001f3f4\U000e0062\U000e0064\U000e0061\U000e007f" - FLAG_FOR_KINGSTON_JM_01 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0031\U000e007f" - FLAG_FOR_ANDALUSIA_ES_AN = "\U0001f3f4\U000e0065\U000e0073\U000e0061\U000e006e\U000e007f" - FLAG_FOR_ZANGILAN_AZ_ZAN = "\U0001f3f4\U000e0061\U000e007a\U000e007a\U000e0061\U000e006e\U000e007f" - FLAG_FOR_CALIFORNIA_US_CA = "\U0001f3f4\U000e0075\U000e0073\U000e0063\U000e0061\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" - FLAG_FOR_KHULNA_DIVISION_BD_D = "\U0001f3f4\U000e0062\U000e0064\U000e0064\U000e007f" - FAMILY_WOMAN_BABY_BABY = "\U0001f469\u200d\U0001f476\u200d\U0001f476" - FLAG_FOR_RAJSHAHI_DIVISION_BD_E = "\U0001f3f4\U000e0062\U000e0064\U000e0065\U000e007f" - FLAG_FOR_SAINT_PETER_BB_09 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0039\U000e007f" - FLAG_FOR_RANGPUR_DIVISION_BD_F = "\U0001f3f4\U000e0062\U000e0064\U000e0066\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" - FLAG_FOR_LOWER_AUSTRIA_AT_3 = "\U0001f3f4\U000e0061\U000e0074\U000e0033\U000e007f" - HARD_DISK = "\U0001f5b4" - FLAG_FOR_AL_QASSIM_SA_05 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0035\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" - FLAG_FOR_GAVLEBORG_SE_X = "\U0001f3f4\U000e0073\U000e0065\U000e0078\U000e007f" - RECYCLING_SYMBOL_FOR_TYPE_7_PLASTICS = "\u2679" - TURNED_BLACK_SHOGI_PIECE = "\u26ca" - FLAG_FOR_CENTRE_EST_BF_04 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0034\U000e007f" - FLAG_FOR_MYMENSINGH_DIVISION_BD_H = "\U0001f3f4\U000e0062\U000e0064\U000e0068\U000e007f" - POCKET_CALCULATOR = "\U0001f5a9" - FLAG_FOR_LENART_SI_058 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0038\U000e007f" - FLAG_FOR_CENTRE_BF_03 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0033\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_MANAWATU_WANGANUI_NZ_MWT = "\U0001f3f4\U000e006e\U000e007a\U000e006d\U000e0077\U000e0074\U000e007f" - FLAG_FOR_BOUCLE_DU_MOUHOUN_BF_01 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0031\U000e007f" - FLAG_FOR_CASCADES_BF_02 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0032\U000e007f" - FLAG_FOR_SYLHET_DIVISION_BD_G = "\U0001f3f4\U000e0062\U000e0064\U000e0067\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" - FLAG_FOR_MADRID_AUTONOMOUS_COMMUNITY_ES_MD = "\U0001f3f4\U000e0065\U000e0073\U000e006d\U000e0064\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - FLAG_FOR_CENTRE_SUD_BF_07 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0037\U000e007f" - FLAG_FOR_CENTRE_OUEST_BF_06 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0036\U000e007f" - FLAG_FOR_EST_BF_08 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0038\U000e007f" - FLAG_FOR_CENTRE_NORD_BF_05 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0035\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe" - FLAG_FOR_BRUSSELS_BE_BRU = "\U0001f3f4\U000e0062\U000e0065\U000e0062\U000e0072\U000e0075\U000e007f" - FLAG_FOR_SUD_OUEST_BF_13 = "\U0001f3f4\U000e0062\U000e0066\U000e0031\U000e0033\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_VARNA_BG_03 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0033\U000e007f" - FLAG_FOR_CENTRAL_DENMARK_DK_82 = "\U0001f3f4\U000e0064\U000e006b\U000e0038\U000e0032\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_VIDIN_BG_05 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0035\U000e007f" - FLAG_FOR_LAZIO_IT_62 = "\U0001f3f4\U000e0069\U000e0074\U000e0036\U000e0032\U000e007f" - FLAG_FOR_TARIJA_BO_T = "\U0001f3f4\U000e0062\U000e006f\U000e0074\U000e007f" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" - FLAG_FOR_SAINT_THOMAS_BB_11 = "\U0001f3f4\U000e0062\U000e0062\U000e0031\U000e0031\U000e007f" - FLAG_FOR_PLATEAU_CENTRAL_BF_11 = "\U0001f3f4\U000e0062\U000e0066\U000e0031\U000e0031\U000e007f" - FLAG_FOR_DHAKA_DIVISION_BD_C = "\U0001f3f4\U000e0062\U000e0064\U000e0063\U000e007f" + TAG_LATIN_CAPITAL_LETTER_I = "\U000e0049" + BEAMED_ASCENDING_MUSICAL_NOTES = "\U0001f39c" + FLAG_FOR_LERIK_AZ_LER = "\U0001f3f4\U000e0061\U000e007a\U000e006c\U000e0065\U000e0072\U000e007f" + PLUTO = "\u2647" + FLAG_FOR_AMERICAN_SAMOA_US_AS = "\U0001f3f4\U000e0075\U000e0073\U000e0061\U000e0073\U000e007f" + PARTIALLY_RECYCLED_PAPER_SYMBOL = "\u267d" + FLAG_FOR_OKINAWA_JP_47 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0037\U000e007f" + FLAG_FOR_GADABAY_AZ_GAD = "\U0001f3f4\U000e0061\U000e007a\U000e0067\U000e0061\U000e0064\U000e007f" + FLAG_FOR_VASTERNORRLAND_SE_Y = "\U0001f3f4\U000e0073\U000e0065\U000e0079\U000e007f" + FLAG_FOR_ORDINO_AD_05 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0035\U000e007f" + EARTH = "\u2641" + VERTICAL_MALE_WITH_STROKE_SIGN = "\u26a8" + TAG_VERTICAL_LINE = "\U000e007c" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468" + FLAG_FOR_NAFTALAN_AZ_NA = "\U0001f3f4\U000e0061\U000e007a\U000e006e\U000e0061\U000e007f" + FLAG_FOR_MASALLY_AZ_MAS = "\U0001f3f4\U000e0061\U000e007a\U000e006d\U000e0061\U000e0073\U000e007f" + FLAG_FOR_MINGACHEVIR_AZ_MI = "\U0001f3f4\U000e0061\U000e007a\U000e006d\U000e0069\U000e007f" + FLAG_FOR_KVEMO_KARTLI_GE_KK = "\U0001f3f4\U000e0067\U000e0065\U000e006b\U000e006b\U000e007f" + TAG_LATIN_CAPITAL_LETTER_X = "\U000e0058" + HEART_WITH_TIP_ON_THE_LEFT = "\U0001f394" + TAG_PERCENT_SIGN = "\U000e0025" + SATURN = "\u2644" + NEPTUNE = "\u2646" + FLAG_FOR_LAS_TUNAS_CU_10 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0030\U000e007f" + THREE_LINES_CONVERGING_RIGHT = "\u269e" + FAMILY_WOMAN_WOMAN_BOY_BABY = "\U0001f469\u200d\U0001f469\u200d\U0001f466\u200d\U0001f476" + REVERSED_ROTATED_FLORAL_HEART_BULLET = "\u2619" + FLAG_FOR_FAIYUM_EG_FYM = "\U0001f3f4\U000e0065\U000e0067\U000e0066\U000e0079\U000e006d\U000e007f" + FLAG_FOR_CELJE_SI_011 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0031\U000e007f" + FLAG_FOR_GILAN_IR_19 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0039\U000e007f" + FLAG_FOR_PANEVEZIO_MUNICIPALITY_LT_32 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0032\U000e007f" + FLAG_FOR_AYSEN_CL_AI = "\U0001f3f4\U000e0063\U000e006c\U000e0061\U000e0069\U000e007f" + SCREEN = "\U0001f5b5" + WHITE_CHESS_ROOK = "\u2656" + FLAG_FOR_WEST_COAST_NZ_WTC = "\U0001f3f4\U000e006e\U000e007a\U000e0077\U000e0074\U000e0063\U000e007f" + FLAG_FOR_TANGIER_TETOUAN_MA_01 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0031\U000e007f" + FLAG_FOR_NEFTCHALA_AZ_NEF = "\U0001f3f4\U000e0061\U000e007a\U000e006e\U000e0065\U000e0066\U000e007f" + FLAG_FOR_MOSCOW_RU_MOW = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e006f\U000e0077\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + WHITE_CHESS_QUEEN = "\u2655" + FLAG_FOR_ISMAILLI_AZ_ISM = "\U0001f3f4\U000e0061\U000e007a\U000e0069\U000e0073\U000e006d\U000e007f" + BLACK_CROSS_ON_SHIELD = "\u26e8" + FLAG_FOR_TARACLIA_MD_TA = "\U0001f3f4\U000e006d\U000e0064\U000e0074\U000e0061\U000e007f" + FLAG_FOR_DROCHIA_MD_DR = "\U0001f3f4\U000e006d\U000e0064\U000e0064\U000e0072\U000e007f" + FLAG_FOR_ONTARIO_CA_ON = "\U0001f3f4\U000e0063\U000e0061\U000e006f\U000e006e\U000e007f" + EAST_SYRIAC_CROSS = "\u2671" + TAG_PLUS_SIGN = "\U000e002b" + DIGRAM_FOR_GREATER_YIN = "\u268f" + WHITE_PENNANT = "\U0001f3f1" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + FLAG_FOR_GOBUSTAN_AZ_QOB = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e006f\U000e0062\U000e007f" + FLAG_FOR_NORTHERN_IRELAND_GB_NIR = "\U0001f3f4\U000e0067\U000e0062\U000e006e\U000e0069\U000e0072\U000e007f" + KISS_MAN_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" - WOMAN_WITH_HEADSCARF_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9d5\U0001f3fc\u200d\u2640\ufe0f" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_NORD_BF_10 = "\U0001f3f4\U000e0062\U000e0066\U000e0031\U000e0030\U000e007f" - FLAG_FOR_SAINT_MICHAEL_BB_08 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0038\U000e007f" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" - FLAG_FOR_KURDISTAN_IR_16 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0036\U000e007f" - FLAG_FOR_DOBRICH_BG_08 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0038\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" - WHITE_CHESS_KNIGHT = "\u2658" - KISS_MAN_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" - FAMILY_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_KOPER_SI_050 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0030\U000e007f" - WOMAN_IN_BUSINESS_SUIT_LEVITATING_DARK_SKIN_TONE = "\U0001f574\U0001f3ff\u200d\u2640\ufe0f" + FLAG_FOR_NAPO_EC_N = "\U0001f3f4\U000e0065\U000e0063\U000e006e\U000e007f" + FLAG_FOR_KORCE_COUNTY_AL_06 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0036\U000e007f" + FLAG_FOR_QABALA_AZ_QAB = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0061\U000e0062\U000e007f" + TRIGRAM_FOR_WIND = "\u2634" + FLAG_FOR_NANA_MAMBERE_CF_NM = "\U0001f3f4\U000e0063\U000e0066\U000e006e\U000e006d\U000e007f" + FLAG_FOR_OGHUZ_AZ_OGU = "\U0001f3f4\U000e0061\U000e007a\U000e006f\U000e0067\U000e0075\U000e007f" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + FLAG_FOR_SMARJESKE_TOPLICE_SI_206 = "\U0001f3f4\U000e0073\U000e0069\U000e0032\U000e0030\U000e0036\U000e007f" + FLAG_FOR_HO_CHI_MINH_CITY_VN_SG = "\U0001f3f4\U000e0076\U000e006e\U000e0073\U000e0067\U000e007f" + FLAG_FOR_QUBADLI_AZ_QBI = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0062\U000e0069\U000e007f" + FLAG_FOR_SUD_UBANGI_CD_SU = "\U0001f3f4\U000e0063\U000e0064\U000e0073\U000e0075\U000e007f" + KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + RECYCLING_SYMBOL_FOR_TYPE_5_PLASTICS = "\u2677" + MAHJONG_TILE_CHRYSANTHEMUM = "\U0001f025" + FLAG_FOR_BRASOV_RO_BV = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e0076\U000e007f" + FLAG_FOR_MOGILA_MK_53 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0033\U000e007f" + THUNDERSTORM = "\u2608" + FLAG_FOR_JALILABAD_AZ_CAL = "\U0001f3f4\U000e0061\U000e007a\U000e0063\U000e0061\U000e006c\U000e007f" + FLAG_FOR_QUSAR_AZ_QUS = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0075\U000e0073\U000e007f" + TAG_QUOTATION_MARK = "\U000e0022" + DIE_FACE_3 = "\u2682" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_QAZAKH_AZ_QAZ = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0061\U000e007a\U000e007f" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + FLAG_FOR_KAVANGO_EAST_NA_KE = "\U0001f3f4\U000e006e\U000e0061\U000e006b\U000e0065\U000e007f" + FLAG_FOR_QAKH_AZ_QAX = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0061\U000e0078\U000e007f" + FLAG_FOR_SAINT_PETER_AG_07 = "\U0001f3f4\U000e0061\U000e0067\U000e0030\U000e0037\U000e007f" + FLAG_FOR_BAJA_CALIFORNIA_MX_BCN = "\U0001f3f4\U000e006d\U000e0078\U000e0062\U000e0063\U000e006e\U000e007f" + KISS_WOMAN_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + FLAG_FOR_ASGABAT_TM_S = "\U0001f3f4\U000e0074\U000e006d\U000e0073\U000e007f" + FLAG_FOR_SABIRABAD_AZ_SAB = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0061\U000e0062\U000e007f" + BLACK_SHOGI_PIECE = "\u2617" + THREE_LINES_CONVERGING_LEFT = "\u269f" + FAMILY_WOMAN_BOY_BABY = "\U0001f469\u200d\U0001f466\u200d\U0001f476" + MUSIC_NATURAL_SIGN = "\u266e" + FLAG_FOR_QUTHING_LS_G = "\U0001f3f4\U000e006c\U000e0073\U000e0067\U000e007f" + FLAG_FOR_JONGLEI_SS_JG = "\U0001f3f4\U000e0073\U000e0073\U000e006a\U000e0067\U000e007f" + FLAG_FOR_NELSON_NZ_NSN = "\U0001f3f4\U000e006e\U000e007a\U000e006e\U000e0073\U000e006e\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + FLAG_FOR_VIENNA_AT_9 = "\U0001f3f4\U000e0061\U000e0074\U000e0039\U000e007f" + FLAG_FOR_SHABRAN_AZ_SBN = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0062\U000e006e\U000e007f" + DIE_FACE_4 = "\u2683" + WHITE_SHOGI_PIECE = "\u2616" + RECYCLING_SYMBOL_FOR_TYPE_4_PLASTICS = "\u2676" + FLAG_FOR_MAKEDONSKI_BROD_MK_52 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0032\U000e007f" + KISS_WOMAN_MAN_MEDIUM_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + FLAG_FOR_SHAKI_DISTRICT_AZ_SAK = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0061\U000e006b\U000e007f" + URANUS = "\u2645" + FLAG_FOR_QUBA_AZ_QBA = "\U0001f3f4\U000e0061\U000e007a\U000e0071\U000e0062\U000e0061\U000e007f" + FLAG_FOR_SAMUKH_AZ_SMX = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e006d\U000e0078\U000e007f" + FLAG_FOR_FEDERAL_CAPITAL_TERRITORY_NG_FC = "\U0001f3f4\U000e006e\U000e0067\U000e0066\U000e0063\U000e007f" + FLAG_FOR_FRIULI_VENEZIA_GIULIA_IT_36 = "\U0001f3f4\U000e0069\U000e0074\U000e0033\U000e0036\U000e007f" + WHITE_FLAG_2 = "\u2690" + DIE_FACE_2 = "\u2681" + FLAG_FOR_SHAKI_AZ_SA = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0061\U000e007f" + FLAG_FOR_LA_PAMPA_AR_L = "\U0001f3f4\U000e0061\U000e0072\U000e006c\U000e007f" + FLAG_FOR_SIAZAN_AZ_SIY = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0069\U000e0079\U000e007f" + FLAG_FOR_NEW_IRELAND_PG_NIK = "\U0001f3f4\U000e0070\U000e0067\U000e006e\U000e0069\U000e006b\U000e007f" + FLAG_FOR_AKMENE_LT_01 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0031\U000e007f" + FLAG_FOR_SAINT_LOUIS_SC_22 = "\U0001f3f4\U000e0073\U000e0063\U000e0032\U000e0032\U000e007f" + FLAG_FOR_UPPER_TAKUTU_UPPER_ESSEQUIBO_GY_UT = "\U0001f3f4\U000e0067\U000e0079\U000e0075\U000e0074\U000e007f" + FLAG_FOR_SHIRVAN_AZ_SR = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0072\U000e007f" + FLAG_FOR_HAUT_MBOMOU_CF_HM = "\U0001f3f4\U000e0063\U000e0066\U000e0068\U000e006d\U000e007f" + TRIANGLE_WITH_ROUNDED_CORNERS = "\U0001f6c6" + FLAG_FOR_SHAMAKHI_AZ_SMI = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e006d\U000e0069\U000e007f" + KISS_WOMAN_DARK_SKIN_TONE_MAN = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" + KISS_WOMAN_DARK_SKIN_TONE_WOMAN = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" + DOCUMENT_WITH_TEXT = "\U0001f5b9" + FLAG_FOR_TOVUZ_AZ_TOV = "\U0001f3f4\U000e0061\U000e007a\U000e0074\U000e006f\U000e0076\U000e007f" + FLAG_FOR_PORT_MORESBY_PG_NCD = "\U0001f3f4\U000e0070\U000e0067\U000e006e\U000e0063\U000e0064\U000e007f" + WHITE_SUN_WITH_RAYS = "\u263c" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" + MAHJONG_TILE_AUTUMN = "\U0001f028" + FLAG_FOR_UJAR_AZ_UCA = "\U0001f3f4\U000e0061\U000e007a\U000e0075\U000e0063\U000e0061\U000e007f" + FLAG_FOR_STRUMICA_MK_73 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0033\U000e007f" + FLAG_FOR_LVIVSHCHYNA_UA_46 = "\U0001f3f4\U000e0075\U000e0061\U000e0034\U000e0036\U000e007f" + TAG_LATIN_SMALL_LETTER_H = "\U000e0068" + KISS_MAN_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" + FAMILY_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" + SEMISEXTILE = "\u26ba" + BLACK_TOUCHTONE_TELEPHONE = "\U0001f57f" + WHITE_CIRCLE_WITH_DOT_RIGHT = "\u2686" + FAMILY_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_LIPETSK_RU_LIP = "\U0001f3f4\U000e0072\U000e0075\U000e006c\U000e0069\U000e0070\U000e007f" + FLAG_FOR_DOL_PRI_LJUBLJANI_SI_022 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0032\U000e0032\U000e007f" + KISS_MAN_MAN_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" + WHITE_DIAMOND_IN_SQUARE = "\u26cb" + COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + FLAG_FOR_KHIZI_AZ_XIZ = "\U0001f3f4\U000e0061\U000e007a\U000e0078\U000e0069\U000e007a\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" + KISS_WOMAN_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + UP_POINTING_MILITARY_AIRPLANE = "\U0001f6e6" + FLAG_FOR_KHOJALI_AZ_XCI = "\U0001f3f4\U000e0061\U000e007a\U000e0078\U000e0063\U000e0069\U000e007f" + FLAG_FOR_YEVLAKH_DISTRICT_AZ_YEV = "\U0001f3f4\U000e0061\U000e007a\U000e0079\U000e0065\U000e0076\U000e007f" + FLAG_FOR_ZANZIBAR_CENTRAL_SOUTH_TZ_11 = "\U0001f3f4\U000e0074\U000e007a\U000e0031\U000e0031\U000e007f" + TAG_LEFT_SQUARE_BRACKET = "\U000e005b" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_NORTHLAND_NZ_NTL = "\U0001f3f4\U000e006e\U000e007a\U000e006e\U000e0074\U000e006c\U000e007f" + DIVORCE_SYMBOL = "\u26ae" + FLAG_FOR_BALAKAN_AZ_BAL = "\U0001f3f4\U000e0061\U000e007a\U000e0062\U000e0061\U000e006c\U000e007f" + FLAG_FOR_PROVENCE_ALPES_COTE_D_AZUR_FR_PAC = "\U0001f3f4\U000e0066\U000e0072\U000e0070\U000e0061\U000e0063\U000e007f" + FLAG_FOR_SHUSHA_AZ_SUS = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0075\U000e0073\U000e007f" + COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FLAG_FOR_MONTSERRADO_LR_MO = "\U0001f3f4\U000e006c\U000e0072\U000e006d\U000e006f\U000e007f" + FAMILY_MAN_MAN_GIRL_BABY = "\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f476" + FLAG_FOR_YARDYMLI_AZ_YAR = "\U0001f3f4\U000e0061\U000e007a\U000e0079\U000e0061\U000e0072\U000e007f" + FLAG_FOR_SALYAN_AZ_SAL = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e0061\U000e006c\U000e007f" + MALE_AND_FEMALE_SIGN = "\u26a5" + FLAG_FOR_NEW_CALEDONIA_FR_NC = "\U0001f3f4\U000e0066\U000e0072\U000e006e\U000e0063\U000e007f" + FRAME_WITH_TILES = "\U0001f5bd" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_SAINT_THOMAS_BB_11 = "\U0001f3f4\U000e0062\U000e0062\U000e0031\U000e0031\U000e007f" + FLAG_FOR_CONSTANTINE_DZ_25 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0035\U000e007f" + FLAG_FOR_YEVLAKH_AZ_YE = "\U0001f3f4\U000e0061\U000e007a\U000e0079\U000e0065\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" + COUPLE_WITH_HEART_MAN_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" + FLAG_FOR_BOTOSANI_RO_BT = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e0074\U000e007f" + FLAG_FOR_ZAQATALA_AZ_ZAQ = "\U0001f3f4\U000e0061\U000e007a\U000e007a\U000e0061\U000e0071\U000e007f" + FLAG_FOR_CHIN_MM_14 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0034\U000e007f" + FLAG_FOR_KHOST_AF_KHO = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e0068\U000e006f\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" + QUARTER_NOTE = "\u2669" + HEAVY_LATIN_CROSS = "\U0001f547" + FLAG_FOR_QUINDIO_CO_QUI = "\U0001f3f4\U000e0063\U000e006f\U000e0071\U000e0075\U000e0069\U000e007f" + FLAG_FOR_CUSCO_PE_CUS = "\U0001f3f4\U000e0070\U000e0065\U000e0063\U000e0075\U000e0073\U000e007f" + COUPLE_WITH_HEART_WOMAN_WOMAN_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + MAHJONG_TILE_BACK = "\U0001f02b" + FLAG_FOR_SAINT_ANDREW_BB_02 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0032\U000e007f" + FLAG_FOR_SOUTH_HOLLAND_NL_ZH = "\U0001f3f4\U000e006e\U000e006c\U000e007a\U000e0068\U000e007f" + FLAG_FOR_LAC_TD_LC = "\U0001f3f4\U000e0074\U000e0064\U000e006c\U000e0063\U000e007f" + FLAG_FOR_VELIKO_TARNOVO_BG_04 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0034\U000e007f" + FLAG_FOR_EASTERN_FJ_E = "\U0001f3f4\U000e0066\U000e006a\U000e0065\U000e007f" + COUPLE_WITH_HEART_MAN_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + FLAG_FOR_SHAMKIR_AZ_SKR = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e006b\U000e0072\U000e007f" + PEN_OVER_STAMPED_ENVELOPE = "\U0001f586" + FLAG_FOR_BALEARIC_ISLANDS_ES_IB = "\U0001f3f4\U000e0065\U000e0073\U000e0069\U000e0062\U000e007f" + FLAG_FOR_BATKEN_KG_B = "\U0001f3f4\U000e006b\U000e0067\U000e0062\U000e007f" + FLAG_FOR_NAKHCHIVAN_AR_AZ_NX = "\U0001f3f4\U000e0061\U000e007a\U000e006e\U000e0078\U000e007f" + FLAG_FOR_SAINT_LUCY_BB_07 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0037\U000e007f" + TAG_LATIN_SMALL_LETTER_N = "\U000e006e" + FLAG_FOR_INDIANA_US_IN = "\U0001f3f4\U000e0075\U000e0073\U000e0069\U000e006e\U000e007f" + FLAG_FOR_SAINT_JOSEPH_BB_06 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0036\U000e007f" + FAMILY_MAN_WOMAN_BABY_BOY = "\U0001f468\u200d\U0001f469\u200d\U0001f476\u200d\U0001f466" + FLAG_FOR_TARTAR_AZ_TAR = "\U0001f3f4\U000e0061\U000e007a\U000e0074\U000e0061\U000e0072\U000e007f" + CONJUNCTION = "\u260c" + FLAG_FOR_SAINT_ROMAN_MC_SR = "\U0001f3f4\U000e006d\U000e0063\U000e0073\U000e0072\U000e007f" + FLAG_FOR_BREST_BY_BR = "\U0001f3f4\U000e0062\U000e0079\U000e0062\U000e0072\U000e007f" + WOMAN_IN_TUXEDO_MEDIUM_SKIN_TONE = "\U0001f935\U0001f3fd\u200d\u2640\ufe0f" + FLAG_FOR_SASKATCHEWAN_CA_SK = "\U0001f3f4\U000e0063\U000e0061\U000e0073\U000e006b\U000e007f" + FLAG_FOR_SAINT_GEORGE_VC_04 = "\U0001f3f4\U000e0076\U000e0063\U000e0030\U000e0034\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f466\U0001f3fb" + MAHJONG_TILE_THREE_OF_CHARACTERS = "\U0001f009" + FLAG_FOR_SAINT_PHILIP_BB_10 = "\U0001f3f4\U000e0062\U000e0062\U000e0031\U000e0030\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_ZARDAB_AZ_ZAR = "\U0001f3f4\U000e0061\U000e007a\U000e007a\U000e0061\U000e0072\U000e007f" + FAMILY_MAN_MAN_BABY_BOY = "\U0001f468\u200d\U0001f468\u200d\U0001f476\u200d\U0001f466" + FLAG_FOR_BARISAL_BD_A = "\U0001f3f4\U000e0062\U000e0064\U000e0061\U000e007f" + FLAG_FOR_SANTO_DOMINGO_DE_LOS_TSACHILAS_EC_SD = "\U0001f3f4\U000e0065\U000e0063\U000e0073\U000e0064\U000e007f" + FLAG_FOR_ZANGILAN_AZ_ZAN = "\U0001f3f4\U000e0061\U000e007a\U000e007a\U000e0061\U000e006e\U000e007f" + INTERLOCKED_FEMALE_AND_MALE_SIGN = "\u26a4" + FLAG_FOR_WESTERN_LK_1 = "\U0001f3f4\U000e006c\U000e006b\U000e0031\U000e007f" + FLAG_FOR_KINGSTON_JM_01 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0031\U000e007f" + DIESEL_LOCOMOTIVE = "\U0001f6f2" + NOTE = "\U0001f5c8" + MAHJONG_TILE_EIGHT_OF_CHARACTERS = "\U0001f00e" + SIDEWAYS_WHITE_RIGHT_POINTING_INDEX = "\U0001f599" + TAG_LESS_THAN_SIGN = "\U000e003c" + FLAG_FOR_RAJSHAHI_DIVISION_BD_E = "\U0001f3f4\U000e0062\U000e0064\U000e0065\U000e007f" + KISS_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" + FAMILY_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_SARDINIA_IT_88 = "\U0001f3f4\U000e0069\U000e0074\U000e0038\U000e0038\U000e007f" + HEAVY_WHITE_DOWN_POINTING_TRIANGLE = "\u26db" + FLAG_FOR_KHULNA_DIVISION_BD_D = "\U0001f3f4\U000e0062\U000e0064\U000e0064\U000e007f" + FLAG_FOR_SAINT_PETER_BB_09 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0039\U000e007f" + MUSIC_SHARP_SIGN = "\u266f" + RIGHT_HANDED_INTERLACED_PENTAGRAM = "\u26e5" + TAG_LATIN_SMALL_LETTER_C = "\U000e0063" + FLAG_FOR_ADDIS_ABABA_ET_AA = "\U0001f3f4\U000e0065\U000e0074\U000e0061\U000e0061\U000e007f" + FLAG_FOR_PORTLAND_JM_04 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0034\U000e007f" + FLAG_FOR_MYMENSINGH_DIVISION_BD_H = "\U0001f3f4\U000e0062\U000e0064\U000e0068\U000e007f" + FLAG_FOR_PORT_OF_SPAIN_TT_POS = "\U0001f3f4\U000e0074\U000e0074\U000e0070\U000e006f\U000e0073\U000e007f" + FLAG_FOR_CASANARE_CO_CAS = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0061\U000e0073\U000e007f" + TAG_LATIN_CAPITAL_LETTER_Q = "\U000e0051" + TRIGRAM_FOR_THUNDER = "\u2633" + POCKET_CALCULATOR = "\U0001f5a9" + RIGHT_SPEAKER_WITH_ONE_SOUND_WAVE = "\U0001f569" + FLAG_FOR_LOS_SANTOS_PA_7 = "\U0001f3f4\U000e0070\U000e0061\U000e0037\U000e007f" + FLAG_FOR_LOWER_AUSTRIA_AT_3 = "\U0001f3f4\U000e0061\U000e0074\U000e0033\U000e007f" + FLAG_FOR_SUMQAYIT_AZ_SM = "\U0001f3f4\U000e0061\U000e007a\U000e0073\U000e006d\U000e007f" + FLAG_FOR_CASCADES_BF_02 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0032\U000e007f" + FLAG_FOR_BOUCLE_DU_MOUHOUN_BF_01 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0031\U000e007f" + FLAG_FOR_AL_HUDAYDAH_YE_HU = "\U0001f3f4\U000e0079\U000e0065\U000e0068\U000e0075\U000e007f" + FLAG_FOR_SAINT_PATRICK_GD_06 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0036\U000e007f" + FLAG_FOR_NOVA_SCOTIA_CA_NS = "\U0001f3f4\U000e0063\U000e0061\U000e006e\U000e0073\U000e007f" + FLAG_FOR_MINAS_GERAIS_BR_MG = "\U0001f3f4\U000e0062\U000e0072\U000e006d\U000e0067\U000e007f" + FLAG_FOR_CENTRE_SUD_BF_07 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0037\U000e007f" + MUSICAL_KEYBOARD_WITH_JACKS = "\U0001f398" + FLAG_FOR_BENGO_AO_BGO = "\U0001f3f4\U000e0061\U000e006f\U000e0062\U000e0067\U000e006f\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + FLAG_FOR_CENTRE_OUEST_BF_06 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0036\U000e007f" + GEAR_WITHOUT_HUB = "\u26ed" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_CENTRE_BF_03 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0033\U000e007f" + FAMILY_WOMAN_MAN_GIRL_GIRL = "\U0001f469\u200d\U0001f468\u200d\U0001f467\u200d\U0001f467" + WHITE_TWO_WAY_LEFT_WAY_TRAFFIC = "\u26d7" + FLAG_FOR_HOWLAND_ISLAND_UM_84 = "\U0001f3f4\U000e0075\U000e006d\U000e0038\U000e0034\U000e007f" + FLAG_FOR_EST_BF_08 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0038\U000e007f" + FLAG_FOR_ELBASAN_COUNTY_AL_03 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0033\U000e007f" + FLAG_FOR_RATAK_CHAIN_MH_T = "\U0001f3f4\U000e006d\U000e0068\U000e0074\U000e007f" + FLAG_FOR_CANARY_ISLANDS_ES_CN = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e006e\U000e007f" + FLAG_FOR_PLATEAU_CENTRAL_BF_11 = "\U0001f3f4\U000e0062\U000e0066\U000e0031\U000e0031\U000e007f" + FLAG_FOR_DOUKKALA_ABDA_MA_10 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0030\U000e007f" + FLAG_FOR_TERENGGANU_MY_11 = "\U0001f3f4\U000e006d\U000e0079\U000e0031\U000e0031\U000e007f" + MAN_WITH_HEADSCARF_MEDIUM_DARK_SKIN_TONE = "\U0001f9d5\U0001f3fe\u200d\u2642\ufe0f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + FLAG_FOR_SANTA_CRUZ_AR_Z = "\U0001f3f4\U000e0061\U000e0072\U000e007a\U000e007f" + FLAG_FOR_DHAKA_DIVISION_BD_C = "\U0001f3f4\U000e0062\U000e0064\U000e0063\U000e007f" + FLAG_FOR_JUJUY_AR_Y = "\U0001f3f4\U000e0061\U000e0072\U000e0079\U000e007f" + CIRCLED_INFORMATION_SOURCE = "\U0001f6c8" + FLAG_FOR_SYLHET_DIVISION_BD_G = "\U0001f3f4\U000e0062\U000e0064\U000e0067\U000e007f" + FLAG_FOR_VIDIN_BG_05 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0035\U000e007f" + FLAG_FOR_ARKHANGELSK_RU_ARK = "\U0001f3f4\U000e0072\U000e0075\U000e0061\U000e0072\U000e006b\U000e007f" + MAHJONG_TILE_ONE_OF_CHARACTERS = "\U0001f007" + FLAG_FOR_BADAKHSHAN_AF_BDS = "\U0001f3f4\U000e0061\U000e0066\U000e0062\U000e0064\U000e0073\U000e007f" + FLAG_FOR_ALGIERS_DZ_16 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0036\U000e007f" + FLAG_FOR_STEPANAKERT_AZ_XA = "\U0001f3f4\U000e0061\U000e007a\U000e0078\U000e0061\U000e007f" FLAG_FOR_GABROVO_BG_07 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0037\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_PERNIK_BG_14 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0034\U000e007f" - FLAG_FOR_LIBERTADOR_GENERAL_BERNARDO_O_HIGGINS_CL_LI = "\U0001f3f4\U000e0063\U000e006c\U000e006c\U000e0069\U000e007f" + FLAG_FOR_BUENOS_AIRES_PROVINCE_AR_B = "\U0001f3f4\U000e0061\U000e0072\U000e0062\U000e007f" + FLAG_FOR_DOBRICH_BG_08 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0038\U000e007f" + BLACK_PENNANT = "\U0001f3f2" + FLAG_FOR_CENTRE_EST_BF_04 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0034\U000e007f" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + KISS_MAN_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + FLAG_FOR_BAHIA_BR_BA = "\U0001f3f4\U000e0062\U000e0072\U000e0062\U000e0061\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + MAHJONG_TILE_FIVE_OF_CHARACTERS = "\U0001f00b" KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_PAZARDZHIK_BG_13 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0033\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - FLAG_FOR_FRENCH_SOUTHERN_TERRITORIES_FR_TF = "\U0001f3f4\U000e0066\U000e0072\U000e0074\U000e0066\U000e007f" + FLAG_FOR_AKITA_JP_05 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0035\U000e007f" FLAG_FOR_KYUSTENDIL_BG_10 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0030\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" + CHIRON = "\u26b7" + FLAG_FOR_RALIK_CHAIN_MH_L = "\U0001f3f4\U000e006d\U000e0068\U000e006c\U000e007f" FLAG_FOR_LOVECH_BG_11 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0031\U000e007f" - FLAG_FOR_PLEVEN_BG_15 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0035\U000e007f" - FLAG_FOR_CUNENE_AO_CNN = "\U0001f3f4\U000e0061\U000e006f\U000e0063\U000e006e\U000e006e\U000e007f" - FLAG_FOR_SMOLYAN_BG_21 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0031\U000e007f" - TAG_SOLIDUS = "\U000e002f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" - FLAG_FOR_HAMBURG_DE_HH = "\U0001f3f4\U000e0064\U000e0065\U000e0068\U000e0068\U000e007f" - FLAG_FOR_VALLEE_DU_BANDAMA_CI_VB = "\U0001f3f4\U000e0063\U000e0069\U000e0076\U000e0062\U000e007f" - FLAG_FOR_PLOVDIV_BG_16 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0036\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_SLIVEN_BG_20 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0030\U000e007f" + FLAG_FOR_VAYOTS_DZOR_AM_VD = "\U0001f3f4\U000e0061\U000e006d\U000e0076\U000e0064\U000e007f" + FLAG_FOR_BANTEAY_MEANCHEY_KH_1 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e007f" + FLAG_FOR_PAZARDZHIK_BG_13 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0033\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" + DIE_FACE_5 = "\u2684" + FAMILY_WOMAN_WOMAN_BABY_GIRL = "\U0001f469\u200d\U0001f469\u200d\U0001f476\u200d\U0001f467" FLAG_FOR_BLAGOEVGRAD_BG_01 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0031\U000e007f" + FLAG_FOR_CARRIACOU_AND_PETITE_MARTINIQUE_GD_10 = "\U0001f3f4\U000e0067\U000e0064\U000e0031\U000e0030\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_PLOVDIV_BG_16 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0036\U000e007f" + FLAG_FOR_PLEVEN_BG_15 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0035\U000e007f" + FLAG_FOR_NORD_BF_10 = "\U0001f3f4\U000e0062\U000e0066\U000e0031\U000e0030\U000e007f" + FLAG_FOR_KURDISTAN_IR_16 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0036\U000e007f" + FLAG_FOR_DASHKASAN_AZ_DAS = "\U0001f3f4\U000e0061\U000e007a\U000e0064\U000e0061\U000e0073\U000e007f" COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468" - FLAG_FOR_RAZGRAD_BG_17 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0037\U000e007f" - FLAG_FOR_WALLONIA_BE_WAL = "\U0001f3f4\U000e0062\U000e0065\U000e0077\U000e0061\U000e006c\U000e007f" FLAG_FOR_BORDJ_BOU_ARRERIDJ_DZ_34 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0034\U000e007f" - DIGRAM_FOR_GREATER_YANG = "\u268c" - FLAG_FOR_RED_SEA_EG_BA = "\U0001f3f4\U000e0065\U000e0067\U000e0062\U000e0061\U000e007f" - FLAG_FOR_TARGOVISHTE_BG_25 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0035\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f467\U0001f3fc" - WOMAN_WITH_HEADSCARF_LIGHT_SKIN_TONE = "\U0001f9d5\U0001f3fb\u200d\u2640\ufe0f" - FLAG_FOR_YOBE_NG_YO = "\U0001f3f4\U000e006e\U000e0067\U000e0079\U000e006f\U000e007f" + TAG_AMPERSAND = "\U000e0026" + FLAG_FOR_VALLEE_DU_BANDAMA_CI_VB = "\U0001f3f4\U000e0063\U000e0069\U000e0076\U000e0062\U000e007f" + FLAG_FOR_RAZGRAD_BG_17 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0037\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" FLAG_FOR_SOFIA_BG_22 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0032\U000e007f" - TAG_REVERSE_SOLIDUS = "\U000e005c" - STAFF_OF_HERMES = "\u269a" - KISS_MAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" FLAG_FOR_SOFIA_DISTRICT_BG_23 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0033\U000e007f" - FLAG_FOR_YAMBOL_BG_28 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0038\U000e007f" - FLAG_FOR_CAPITAL_BH_13 = "\U0001f3f4\U000e0062\U000e0068\U000e0031\U000e0033\U000e007f" + FLAG_FOR_TARGOVISHTE_BG_25 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0035\U000e007f" + FLAG_FOR_LOPBURI_TH_16 = "\U0001f3f4\U000e0074\U000e0068\U000e0031\U000e0036\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_CUNENE_AO_CNN = "\U0001f3f4\U000e0061\U000e006f\U000e0063\U000e006e\U000e006e\U000e007f" + FLAG_FOR_ADJARA_GE_AJ = "\U0001f3f4\U000e0067\U000e0065\U000e0061\U000e006a\U000e007f" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + FLAG_FOR_VARNA_BG_03 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0033\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_YOBE_NG_YO = "\U0001f3f4\U000e006e\U000e0067\U000e0079\U000e006f\U000e007f" + FLAG_FOR_PERNIK_BG_14 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0034\U000e007f" + FLAG_FOR_BAY_SOMALIA_SO_BY = "\U0001f3f4\U000e0073\U000e006f\U000e0062\U000e0079\U000e007f" + FLAG_FOR_SAINT_GEORGE_BB_03 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0033\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" + WOMAN_WITH_HEADSCARF_MEDIUM_LIGHT_SKIN_TONE = "\U0001f9d5\U0001f3fc\u200d\u2640\ufe0f" + FLAG_FOR_WESTERN_CAPE_ZA_WC = "\U0001f3f4\U000e007a\U000e0061\U000e0077\U000e0063\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" FLAG_FOR_HASKOVO_BG_26 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0036\U000e007f" + FLAG_FOR_YAMBOL_BG_28 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0038\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" FLAG_FOR_SCHAAN_LI_07 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0037\U000e007f" - TAG_LATIN_SMALL_LETTER_L = "\U000e006c" - FLAG_FOR_REPUBLIKA_SRPSKA_BA_SRP = "\U0001f3f4\U000e0062\U000e0061\U000e0073\U000e0072\U000e0070\U000e007f" - WOMAN_WITH_HEADSCARF_MEDIUM_SKIN_TONE = "\U0001f9d5\U0001f3fd\u200d\u2640\ufe0f" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_SOUTHERN_BH_14 = "\U0001f3f4\U000e0062\U000e0068\U000e0031\U000e0034\U000e007f" - FLAG_FOR_NORTHERN_BH_17 = "\U0001f3f4\U000e0062\U000e0068\U000e0031\U000e0037\U000e007f" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469" - NKO_SYMBOL_GBAKURUNEN = "\u07f7" - FLAG_FOR_BUBANZA_BI_BB = "\U0001f3f4\U000e0062\U000e0069\U000e0062\U000e0062\U000e007f" - FLAG_FOR_SOUTH_AUSTRALIA_AU_SA = "\U0001f3f4\U000e0061\U000e0075\U000e0073\U000e0061\U000e007f" + FLAG_FOR_STREDOCESKY_KRAJ_CZ_20 = "\U0001f3f4\U000e0063\U000e007a\U000e0032\U000e0030\U000e007f" + FLAG_FOR_ZAVRC_SI_143 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0034\U000e0033\U000e007f" COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - FLAG_FOR_MUHARRAQ_BH_15 = "\U0001f3f4\U000e0062\U000e0068\U000e0031\U000e0035\U000e007f" + FLAG_FOR_TACHIRA_VE_S = "\U0001f3f4\U000e0076\U000e0065\U000e0073\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_SOUTHERN_BH_14 = "\U0001f3f4\U000e0062\U000e0068\U000e0031\U000e0034\U000e007f" FLAG_FOR_SIBIU_RO_SB = "\U0001f3f4\U000e0072\U000e006f\U000e0073\U000e0062\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd" - FAMILY_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_BEAU_BASSIN_ROSE_HILL_MU_BR = "\U0001f3f4\U000e006d\U000e0075\U000e0062\U000e0072\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_SA_DAH_YE_SD = "\U0001f3f4\U000e0079\U000e0065\U000e0073\U000e0064\U000e007f" - WOMAN_IN_BUSINESS_SUIT_LEVITATING_MEDIUM_LIGHT_SKIN_TONE = "\U0001f574\U0001f3fc\u200d\u2640\ufe0f" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469" + DIE_FACE_1 = "\u2680" + FAMILY_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_SOUTHERN_IS_8 = "\U0001f3f4\U000e0069\U000e0073\U000e0038\U000e007f" + FLAG_FOR_MUHARRAQ_BH_15 = "\U0001f3f4\U000e0062\U000e0068\U000e0031\U000e0035\U000e007f" + FLAG_FOR_BRUSSELS_BE_BRU = "\U0001f3f4\U000e0062\U000e0065\U000e0062\U000e0072\U000e0075\U000e007f" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" + WOMAN_WITH_HEADSCARF_MEDIUM_SKIN_TONE = "\U0001f9d5\U0001f3fd\u200d\u2640\ufe0f" + FLAG_FOR_CENTRE_NORD_BF_05 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0035\U000e007f" + ENVELOPE_WITH_LIGHTNING = "\U0001f584" + FLAG_FOR_COLORADO_US_CO = "\U0001f3f4\U000e0075\U000e0073\U000e0063\U000e006f\U000e007f" + FLAG_FOR_CAPITAL_BH_13 = "\U0001f3f4\U000e0062\U000e0068\U000e0031\U000e0033\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_TATARSTAN_RU_TA = "\U0001f3f4\U000e0072\U000e0075\U000e0074\U000e0061\U000e007f" + FLAG_FOR_NORTHERN_BH_17 = "\U0001f3f4\U000e0062\U000e0068\U000e0031\U000e0037\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" FLAG_FOR_BUJUMBURA_BI_BM = "\U0001f3f4\U000e0062\U000e0069\U000e0062\U000e006d\U000e007f" - FLAG_FOR_NORD_EST_HT_NE = "\U0001f3f4\U000e0068\U000e0074\U000e006e\U000e0065\U000e007f" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" - FLAG_FOR_HARBOUR_ISLAND_BS_HI = "\U0001f3f4\U000e0062\U000e0073\U000e0068\U000e0069\U000e007f" + WEST_SYRIAC_CROSS = "\u2670" + FLAG_FOR_SA_DAH_YE_SD = "\U0001f3f4\U000e0079\U000e0065\U000e0073\U000e0064\U000e007f" + FLAG_FOR_AL_QASSIM_SA_05 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0035\U000e007f" FLAG_FOR_CANKUZO_BI_CA = "\U0001f3f4\U000e0062\U000e0069\U000e0063\U000e0061\U000e007f" - FLAG_FOR_BURURI_BI_BR = "\U0001f3f4\U000e0062\U000e0069\U000e0062\U000e0072\U000e007f" - FLAG_FOR_CHITTAGONG_DIVISION_BD_B = "\U0001f3f4\U000e0062\U000e0064\U000e0062\U000e007f" - FLAG_FOR_SANTIAGO_DE_CUBA_CU_13 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0033\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_RIO_NEGRO_AR_R = "\U0001f3f4\U000e0061\U000e0072\U000e0072\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_NORTHERN_TERRITORY_AU_NT = "\U0001f3f4\U000e0061\U000e0075\U000e006e\U000e0074\U000e007f" + CROSS_OF_JERUSALEM = "\u2629" + FLAG_FOR_CHUKOTKA_OKRUG_RU_CHU = "\U0001f3f4\U000e0072\U000e0075\U000e0063\U000e0068\U000e0075\U000e007f" FLAG_FOR_KARDZHALI_BG_09 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0039\U000e007f" FLAG_FOR_SALA_LV_085 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0035\U000e007f" - FLAG_FOR_BAJA_CALIFORNIA_SUR_MX_BCS = "\U0001f3f4\U000e006d\U000e0078\U000e0062\U000e0063\U000e0073\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_RUMONGE_BI_RM = "\U0001f3f4\U000e0062\U000e0069\U000e0072\U000e006d\U000e007f" - FLAG_FOR_RUYIGI_BI_RY = "\U0001f3f4\U000e0062\U000e0069\U000e0072\U000e0079\U000e007f" - FLAG_FOR_KAYANZA_BI_KY = "\U0001f3f4\U000e0062\U000e0069\U000e006b\U000e0079\U000e007f" - FLAG_FOR_KIRUNDO_BI_KI = "\U0001f3f4\U000e0062\U000e0069\U000e006b\U000e0069\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb" - MEDIUM_SMALL_WHITE_CIRCLE = "\u26ac" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc" - FLAG_FOR_NGOZI_BI_NG = "\U0001f3f4\U000e0062\U000e0069\U000e006e\U000e0067\U000e007f" - FLAG_FOR_TRANS_NZOIA_KE_42 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0032\U000e007f" - FLAG_FOR_TIANJIN_CN_12 = "\U0001f3f4\U000e0063\U000e006e\U000e0031\U000e0032\U000e007f" - UNMARRIED_PARTNERSHIP_SYMBOL = "\u26af" + FLAG_FOR_CENTRAL_DENMARK_DK_82 = "\U0001f3f4\U000e0064\U000e006b\U000e0038\U000e0032\U000e007f" + FLAG_FOR_BURURI_BI_BR = "\U0001f3f4\U000e0062\U000e0069\U000e0062\U000e0072\U000e007f" + FLAG_FOR_WALLONIA_BE_WAL = "\U0001f3f4\U000e0062\U000e0065\U000e0077\U000e0061\U000e006c\U000e007f" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + TAG_LATIN_SMALL_LETTER_G = "\U000e0067" + FLAG_FOR_MARTINIQUE_FR_MQ = "\U0001f3f4\U000e0066\U000e0072\U000e006d\U000e0071\U000e007f" FLAG_FOR_KARUZI_BI_KR = "\U0001f3f4\U000e0062\U000e0069\U000e006b\U000e0072\U000e007f" - FLAG_FOR_FLANDERS_BE_VLG = "\U0001f3f4\U000e0062\U000e0065\U000e0076\U000e006c\U000e0067\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_BABYLON_IQ_BB = "\U0001f3f4\U000e0069\U000e0071\U000e0062\U000e0062\U000e007f" + FLAG_FOR_KIRUNDO_BI_KI = "\U0001f3f4\U000e0062\U000e0069\U000e006b\U000e0069\U000e007f" + FLAG_FOR_LANKARAN_DISTRICT_AZ_LAN = "\U0001f3f4\U000e0061\U000e007a\U000e006c\U000e0061\U000e006e\U000e007f" FLAG_FOR_MURAMVYA_BI_MU = "\U0001f3f4\U000e0062\U000e0069\U000e006d\U000e0075\U000e007f" - FLAG_FOR_SHUMEN_BG_27 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0037\U000e007f" - FLAG_FOR_RUTANA_BI_RT = "\U0001f3f4\U000e0062\U000e0069\U000e0072\U000e0074\U000e007f" - FLAG_FOR_LAAYOUNE_BOUJDOUR_SAKIA_EL_HAMRA_MA_15 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0035\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f476\U0001f3fd" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" FLAG_FOR_MUYINGA_BI_MY = "\U0001f3f4\U000e0062\U000e0069\U000e006d\U000e0079\U000e007f" - FLAG_FOR_SAHEL_BF_12 = "\U0001f3f4\U000e0062\U000e0066\U000e0031\U000e0032\U000e007f" + FLAG_FOR_TIANJIN_CN_12 = "\U0001f3f4\U000e0063\U000e006e\U000e0031\U000e0032\U000e007f" + FLAG_FOR_LAAYOUNE_BOUJDOUR_SAKIA_EL_HAMRA_MA_15 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0035\U000e007f" + DIGRAM_FOR_GREATER_YANG = "\u268c" + FLAG_FOR_SHUMEN_BG_27 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0037\U000e007f" + RECYCLED_PAPER_SYMBOL = "\u267c" + FLAG_FOR_NGOZI_BI_NG = "\U0001f3f4\U000e0062\U000e0069\U000e006e\U000e0067\U000e007f" + FAMILY_WOMAN_MAN_BOY_BOY = "\U0001f469\u200d\U0001f468\u200d\U0001f466\u200d\U0001f466" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + FLAG_FOR_SISTAN_AND_BALUCHESTAN_IR_13 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0033\U000e007f" + FLAG_FOR_RUMONGE_BI_RM = "\U0001f3f4\U000e0062\U000e0069\U000e0072\U000e006d\U000e007f" + FLAG_FOR_AOSTA_VALLEY_IT_23 = "\U0001f3f4\U000e0069\U000e0074\U000e0032\U000e0033\U000e007f" FLAG_FOR_NOVO_MESTO_SI_085 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0038\U000e0035\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc" + BEAMED_SIXTEENTH_NOTES = "\u266c" + FAMILY_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" FLAG_FOR_HAUTS_DE_FRANCE_FR_HDF = "\U0001f3f4\U000e0066\U000e0072\U000e0068\U000e0064\U000e0066\U000e007f" + FLAG_FOR_RIO_NEGRO_AR_R = "\U0001f3f4\U000e0061\U000e0072\U000e0072\U000e007f" + WHITE_CHESS_KNIGHT = "\u2658" FLAG_FOR_ALIBORI_BJ_AL = "\U0001f3f4\U000e0062\U000e006a\U000e0061\U000e006c\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd" - FLAG_FOR_ATAKORA_BJ_AK = "\U0001f3f4\U000e0062\U000e006a\U000e0061\U000e006b\U000e007f" - BLACK_RIGHT_POINTING_BACKHAND_INDEX = "\U0001f59d" FLAG_FOR_DONGA_BJ_DO = "\U0001f3f4\U000e0062\U000e006a\U000e0064\U000e006f\U000e007f" + FLAG_FOR_HAMBURG_DE_HH = "\U0001f3f4\U000e0064\U000e0065\U000e0068\U000e0068\U000e007f" + FLAG_FOR_SAHEL_BF_12 = "\U0001f3f4\U000e0062\U000e0066\U000e0031\U000e0032\U000e007f" + FLAG_FOR_ATAKORA_BJ_AK = "\U0001f3f4\U000e0062\U000e006a\U000e0061\U000e006b\U000e007f" + FLAG_FOR_RUYIGI_BI_RY = "\U0001f3f4\U000e0062\U000e0069\U000e0072\U000e0079\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469" + FLAG_FOR_MA_AN_JO_MN = "\U0001f3f4\U000e006a\U000e006f\U000e006d\U000e006e\U000e007f" + FLAG_FOR_SMOLYAN_BG_21 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0031\U000e007f" FLAG_FOR_LITTORAL_BJ_LI = "\U0001f3f4\U000e0062\U000e006a\U000e006c\U000e0069\U000e007f" - FLAG_FOR_ZOU_BJ_ZO = "\U0001f3f4\U000e0062\U000e006a\U000e007a\U000e006f\U000e007f" - FLAG_FOR_ENTRE_RIOS_AR_E = "\U0001f3f4\U000e0061\U000e0072\U000e0065\U000e007f" - GEAR_WITH_HANDLES = "\u26ee" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_BORGOU_BJ_BO = "\U0001f3f4\U000e0062\U000e006a\U000e0062\U000e006f\U000e007f" - FLAG_FOR_NORTH_DAKOTA_US_ND = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0064\U000e007f" - FLAG_FOR_ASHANTI_GH_AH = "\U0001f3f4\U000e0067\U000e0068\U000e0061\U000e0068\U000e007f" FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_KOUFFO_BJ_KO = "\U0001f3f4\U000e0062\U000e006a\U000e006b\U000e006f\U000e007f" - FAMILY_WOMAN_WOMAN_GIRL_BABY = "\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f476" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" + FLAG_FOR_ZOU_BJ_ZO = "\U0001f3f4\U000e0062\U000e006a\U000e007a\U000e006f\U000e007f" + FLAG_FOR_RED_SEA_EG_BA = "\U0001f3f4\U000e0065\U000e0067\U000e0062\U000e0061\U000e007f" + FLAG_FOR_VLORE_COUNTY_AL_12 = "\U0001f3f4\U000e0061\U000e006c\U000e0031\U000e0032\U000e007f" + FLAG_FOR_KOPER_SI_050 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0030\U000e007f" KISS_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - TAG_LATIN_CAPITAL_LETTER_G = "\U000e0047" - FLAG_FOR_SAO_PAULO_BR_SP = "\U0001f3f4\U000e0062\U000e0072\U000e0073\U000e0070\U000e007f" - WOMAN_WITH_HEADSCARF_MEDIUM_DARK_SKIN_TONE = "\U0001f9d5\U0001f3fe\u200d\u2640\ufe0f" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_OUEME_BJ_OU = "\U0001f3f4\U000e0062\U000e006a\U000e006f\U000e0075\U000e007f" - FLAG_FOR_TEMBURONG_BN_TE = "\U0001f3f4\U000e0062\U000e006e\U000e0074\U000e0065\U000e007f" - FLAG_FOR_TUTONG_BN_TU = "\U0001f3f4\U000e0062\U000e006e\U000e0074\U000e0075\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe" + FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_MANAWATU_WANGANUI_NZ_MWT = "\U0001f3f4\U000e006e\U000e007a\U000e006d\U000e0077\U000e0074\U000e007f" + FLAG_FOR_ENTRE_RIOS_AR_E = "\U0001f3f4\U000e0061\U000e0072\U000e0065\U000e007f" + FLAG_FOR_NORTH_DAKOTA_US_ND = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e0064\U000e007f" + MEDIUM_SMALL_WHITE_CIRCLE = "\u26ac" FLAG_FOR_BEQAA_LB_BI = "\U0001f3f4\U000e006c\U000e0062\U000e0062\U000e0069\U000e007f" - FLAG_FOR_VRATSA_BG_06 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0036\U000e007f" - FLAG_FOR_BELAIT_BN_BE = "\U0001f3f4\U000e0062\U000e006e\U000e0062\U000e0065\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468" - FLAG_FOR_BRUNEI_MUARA_BN_BM = "\U0001f3f4\U000e0062\U000e006e\U000e0062\U000e006d\U000e007f" + FLAG_FOR_SEKONG_LA_XE = "\U0001f3f4\U000e006c\U000e0061\U000e0078\U000e0065\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_OUEME_BJ_OU = "\U0001f3f4\U000e0062\U000e006a\U000e006f\U000e0075\U000e007f" COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - FLAG_FOR_CHUQUISACA_BO_H = "\U0001f3f4\U000e0062\U000e006f\U000e0068\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_COCHABAMBA_BO_C = "\U0001f3f4\U000e0062\U000e006f\U000e0063\U000e007f" - FLAG_FOR_STARA_ZAGORA_BG_24 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0034\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd" + BALLOT_BOX_WITH_SCRIPT_X = "\U0001f5f5" + FLAG_FOR_TUTONG_BN_TU = "\U0001f3f4\U000e0062\U000e006e\U000e0074\U000e0075\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + FLAG_FOR_VRATSA_BG_06 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0036\U000e007f" + MAN_WITH_HEADSCARF = "\U0001f9d5\u200d\u2642\ufe0f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" FLAG_FOR_KHENTII_MN_039 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0033\U000e0039\U000e007f" FLAG_FOR_DELTA_AMACURO_VE_Y = "\U0001f3f4\U000e0076\U000e0065\U000e0079\U000e007f" - FLAG_FOR_LA_PAZ_BO_L = "\U0001f3f4\U000e0062\U000e006f\U000e006c\U000e007f" + RECYCLING_SYMBOL_FOR_GENERIC_MATERIALS = "\u267a" + FLAG_FOR_ASHANTI_GH_AH = "\U0001f3f4\U000e0067\U000e0068\U000e0061\U000e0068\U000e007f" FLAG_FOR_DOLNENI_MK_27 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0037\U000e007f" - FLAG_FOR_SOUTH_AEGEAN_GR_L = "\U0001f3f4\U000e0067\U000e0072\U000e006c\U000e007f" + BLACK_TRUCK = "\u26df" + KISS_WOMAN_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" + FLAG_FOR_BORGOU_BJ_BO = "\U0001f3f4\U000e0062\U000e006a\U000e0062\U000e006f\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_SAINT_JAMES_BB_04 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0034\U000e007f" FLAG_FOR_PANDO_BO_N = "\U0001f3f4\U000e0062\U000e006f\U000e006e\U000e007f" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - KISS_WOMAN_MAN_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - FLAG_FOR_ACRE_BR_AC = "\U0001f3f4\U000e0062\U000e0072\U000e0061\U000e0063\U000e007f" - DIE_FACE_6 = "\u2685" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468" - FLAG_FOR_KICEVO_MK_40 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0030\U000e007f" - FLAG_FOR_KAOHSIUNG_TW_KHH = "\U0001f3f4\U000e0074\U000e0077\U000e006b\U000e0068\U000e0068\U000e007f" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_LA_PAZ_BO_L = "\U0001f3f4\U000e0062\U000e006f\U000e006c\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_STARA_ZAGORA_BG_24 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0034\U000e007f" + FLAG_FOR_CHUQUISACA_BO_H = "\U0001f3f4\U000e0062\U000e006f\U000e0068\U000e007f" + FLAG_FOR_GUMUSHANE_TR_29 = "\U0001f3f4\U000e0074\U000e0072\U000e0032\U000e0039\U000e007f" + FLAG_FOR_PANJSHIR_AF_PAN = "\U0001f3f4\U000e0061\U000e0066\U000e0070\U000e0061\U000e006e\U000e007f" + FLAG_FOR_COCHABAMBA_BO_C = "\U0001f3f4\U000e0062\U000e006f\U000e0063\U000e007f" FLAG_FOR_ROCHE_CAIMAN_SC_25 = "\U0001f3f4\U000e0073\U000e0063\U000e0032\U000e0035\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FAMILY_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" FLAG_FOR_BRCKO_DISTRICT_BA_BRC = "\U0001f3f4\U000e0062\U000e0061\U000e0062\U000e0072\U000e0063\U000e007f" + FLAG_FOR_BRETAGNE_FR_BRE = "\U0001f3f4\U000e0066\U000e0072\U000e0062\U000e0072\U000e0065\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FLAG_FOR_CHECHEN_RU_CE = "\U0001f3f4\U000e0072\U000e0075\U000e0063\U000e0065\U000e007f" + FLAG_FOR_KICEVO_MK_40 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0030\U000e007f" + FLAG_FOR_SAINT_JOHN_BB_05 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0035\U000e007f" + FLAG_FOR_NORTHERN_MARIANA_ISLANDS_US_MP = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0070\U000e007f" + KISS_WOMAN_MAN_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" FLAG_FOR_KAUNAS_COUNTY_LT_KU = "\U0001f3f4\U000e006c\U000e0074\U000e006b\U000e0075\U000e007f" FLAG_FOR_GJIROKASTER_COUNTY_AL_05 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0035\U000e007f" - COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc" KISS_MAN_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" - FLAG_FOR_AMAPA_BR_AP = "\U0001f3f4\U000e0062\U000e0072\U000e0061\U000e0070\U000e007f" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" KISS_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" - KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - FLAG_FOR_MARANHAO_BR_MA = "\U0001f3f4\U000e0062\U000e0072\U000e006d\U000e0061\U000e007f" - FLAG_FOR_ESPIRITO_SANTO_BR_ES = "\U0001f3f4\U000e0062\U000e0072\U000e0065\U000e0073\U000e007f" - COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - FLAG_FOR_AMAZONAS_BR_AM = "\U0001f3f4\U000e0062\U000e0072\U000e0061\U000e006d\U000e007f" COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + KISS_WOMAN_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" + FLAG_FOR_LENART_SI_058 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0035\U000e0038\U000e007f" + FLAG_FOR_TEMBURONG_BN_TE = "\U0001f3f4\U000e0062\U000e006e\U000e0074\U000e0065\U000e007f" + FLAG_FOR_BELAIT_BN_BE = "\U0001f3f4\U000e0062\U000e006e\U000e0062\U000e0065\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" FLAG_FOR_POTOSI_BO_P = "\U0001f3f4\U000e0062\U000e006f\U000e0070\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb" - KISS_MAN_MEDIUM_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - FLAG_FOR_MADEIRA_PT_30 = "\U0001f3f4\U000e0070\U000e0074\U000e0033\U000e0030\U000e007f" - FLAG_FOR_CENTRAL_SINGAPORE_SG_01 = "\U0001f3f4\U000e0073\U000e0067\U000e0030\U000e0031\U000e007f" - KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" + MAN_WITH_HEADSCARF_DARK_SKIN_TONE = "\U0001f9d5\U0001f3ff\u200d\u2642\ufe0f" KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" - FLAG_FOR_PREAH_VIHEAR_KH_13 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0033\U000e007f" - KISS_WOMAN_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" - KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - FLAG_FOR_SOUTHERN_NATIONS_NATIONALITIES_AND_PEOPLES_ET_SN = "\U0001f3f4\U000e0065\U000e0074\U000e0073\U000e006e\U000e007f" - KISS_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" - KISS_WOMAN_MEDIUM_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - KISS_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - KISS_MAN_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - KISS_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" - KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" - KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - FLAG_FOR_SAN_SALVADOR_SV_SS = "\U0001f3f4\U000e0073\U000e0076\U000e0073\U000e0073\U000e007f" - KISS_WOMAN_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - KISS_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" - FAMILY_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_COLLINES_BJ_CO = "\U0001f3f4\U000e0062\U000e006a\U000e0063\U000e006f\U000e007f" - KISS_WOMAN_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" - FLAG_FOR_BUJUMBURA_RURAL_BI_BL = "\U0001f3f4\U000e0062\U000e0069\U000e0062\U000e006c\U000e007f" - FLAG_FOR_PLATEAU_BJ_PL = "\U0001f3f4\U000e0062\U000e006a\U000e0070\U000e006c\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" - FLAG_FOR_MATO_GROSSO_BR_MT = "\U0001f3f4\U000e0062\U000e0072\U000e006d\U000e0074\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" - TAG_LATIN_CAPITAL_LETTER_X = "\U000e0058" - COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - FLAG_FOR_BURGAS_BG_02 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0032\U000e007f" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - COUPLE_WITH_HEART_MAN_MAN_MEDIUM_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" - COUPLE_WITH_HEART_WOMAN_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - FLAG_FOR_PYONGYANG_KP_01 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0031\U000e007f" - FLAG_FOR_CARRIACOU_AND_PETITE_MARTINIQUE_GD_10 = "\U0001f3f4\U000e0067\U000e0064\U000e0031\U000e0030\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - FAMILY_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - FLAG_FOR_PIAUI_BR_PI = "\U0001f3f4\U000e0062\U000e0072\U000e0070\U000e0069\U000e007f" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - WOMAN_IN_BUSINESS_SUIT_LEVITATING_MEDIUM_SKIN_TONE = "\U0001f574\U0001f3fd\u200d\u2640\ufe0f" - FLAG_FOR_RONDONIA_BR_RO = "\U0001f3f4\U000e0062\U000e0072\U000e0072\U000e006f\U000e007f" - FLAG_FOR_HAUTS_BASSINS_BF_09 = "\U0001f3f4\U000e0062\U000e0066\U000e0030\U000e0039\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - FAMILY_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff" - KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" - FLAG_FOR_ALAGOAS_BR_AL = "\U0001f3f4\U000e0062\U000e0072\U000e0061\U000e006c\U000e007f" - FLAG_FOR_RIO_GRANDE_DO_NORTE_BR_RN = "\U0001f3f4\U000e0062\U000e0072\U000e0072\U000e006e\U000e007f" - FLAG_FOR_MAKKAH_SA_02 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0032\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - WHITE_TOUCHTONE_TELEPHONE = "\U0001f57e" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - FLAG_FOR_DAUGAVPILS_MUNICIPALITY_LV_025 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0035\U000e007f" - COUPLE_WITH_HEART_WOMAN_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" - FAMILY_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_SERGIPE_BR_SE = "\U0001f3f4\U000e0062\U000e0072\U000e0073\U000e0065\U000e007f" - FLAG_FOR_PARANA_BR_PR = "\U0001f3f4\U000e0062\U000e0072\U000e0070\U000e0072\U000e007f" - FLAG_FOR_RORAIMA_BR_RR = "\U0001f3f4\U000e0062\U000e0072\U000e0072\U000e0072\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" - FLAG_FOR_TIARET_DZ_14 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0034\U000e007f" - FLAG_FOR_BIMINI_BS_BI = "\U0001f3f4\U000e0062\U000e0073\U000e0062\U000e0069\U000e007f" - FLAG_FOR_SVETI_ANDRAZ_V_SLOVENSKIH_GORICAH_SI_182 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0032\U000e007f" - FLAG_FOR_ORURO_BO_O = "\U0001f3f4\U000e0062\U000e006f\U000e006f\U000e007f" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469" - BITCOIN_SIGN = "\u20bf" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - FLAG_FOR_SOGN_OG_FJORDANE_NO_14 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0034\U000e007f" - KISS_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - KISS_MAN_MAN_MEDIUM_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" - FLAG_FOR_TOCANTINS_BR_TO = "\U0001f3f4\U000e0062\U000e0072\U000e0074\U000e006f\U000e007f" - FLAG_FOR_EAST_GRAND_BAHAMA_BS_EG = "\U0001f3f4\U000e0062\U000e0073\U000e0065\U000e0067\U000e007f" - FLAG_FOR_MAKAMBA_BI_MA = "\U0001f3f4\U000e0062\U000e0069\U000e006d\U000e0061\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - FLAG_FOR_FEDERAL_DISTRICT_BR_DF = "\U0001f3f4\U000e0062\U000e0072\U000e0064\U000e0066\U000e007f" - FLAG_FOR_CROOKED_ISLAND_BS_CK = "\U0001f3f4\U000e0062\U000e0073\U000e0063\U000e006b\U000e007f" - TAG_DIGIT_TWO = "\U000e0032" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_CENTRAL_ELEUTHERA_BS_CE = "\U0001f3f4\U000e0062\U000e0073\U000e0063\U000e0065\U000e007f" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" - FLAG_FOR_GALICIA_ES_GA = "\U0001f3f4\U000e0065\U000e0073\U000e0067\U000e0061\U000e007f" - FLAG_FOR_EXUMA_BS_EX = "\U0001f3f4\U000e0062\U000e0073\U000e0065\U000e0078\U000e007f" - SIDEWAYS_BLACK_RIGHT_POINTING_INDEX = "\U0001f59b" - FLAG_FOR_ILE_DE_FRANCE_FR_IDF = "\U0001f3f4\U000e0066\U000e0072\U000e0069\U000e0064\U000e0066\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_CENTRAL_ANDROS_BS_CS = "\U0001f3f4\U000e0062\U000e0073\U000e0063\U000e0073\U000e007f" - FLAG_FOR_GRAND_CAY_BS_GC = "\U0001f3f4\U000e0062\U000e0073\U000e0067\U000e0063\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f466\U0001f3fb" - FLAG_FOR_FREEPORT_BS_FP = "\U0001f3f4\U000e0062\U000e0073\U000e0066\U000e0070\U000e007f" - COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - FLAG_FOR_NORTH_ABACO_BS_NO = "\U0001f3f4\U000e0062\U000e0073\U000e006e\U000e006f\U000e007f" - FLAG_FOR_INAGUA_BS_IN = "\U0001f3f4\U000e0062\U000e0073\U000e0069\U000e006e\U000e007f" - KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - FLAG_FOR_BOHINJ_SI_004 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0034\U000e007f" FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" + COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" + SQUARE_FOUR_CORNERS = "\u26f6" + KISS_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" + KISS_MAN_MEDIUM_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + MAHJONG_TILE_ONE_OF_BAMBOOS = "\U0001f010" + FLAG_FOR_TARIJA_BO_T = "\U0001f3f4\U000e0062\U000e006f\U000e0074\U000e007f" + BLACK_CHESS_ROOK = "\u265c" + FLAG_FOR_PREAH_VIHEAR_KH_13 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0033\U000e007f" + TRIGRAM_FOR_WATER = "\u2635" + FLAG_FOR_VICTORIA_AU_VIC = "\U0001f3f4\U000e0061\U000e0075\U000e0076\U000e0069\U000e0063\U000e007f" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" + FLAG_FOR_ANDORRA_LA_VELLA_AD_07 = "\U0001f3f4\U000e0061\U000e0064\U000e0030\U000e0037\U000e007f" + KISS_WOMAN_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" + FLAG_FOR_ACRE_BR_AC = "\U0001f3f4\U000e0062\U000e0072\U000e0061\U000e0063\U000e007f" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" + FLAG_FOR_URI_CH_UR = "\U0001f3f4\U000e0063\U000e0068\U000e0075\U000e0072\U000e007f" + KISS_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + KISS_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" + KISS_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" + FLAG_FOR_SAN_SALVADOR_SV_SS = "\U0001f3f4\U000e0073\U000e0076\U000e0073\U000e0073\U000e007f" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" + KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + FLAG_FOR_MADRID_AUTONOMOUS_COMMUNITY_ES_MD = "\U0001f3f4\U000e0065\U000e0073\U000e006d\U000e0064\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_COLLINES_BJ_CO = "\U0001f3f4\U000e0062\U000e006a\U000e0063\U000e006f\U000e007f" + KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + FLAG_FOR_KAYANZA_BI_KY = "\U0001f3f4\U000e0062\U000e0069\U000e006b\U000e0079\U000e007f" + FLAG_FOR_AOMORI_JP_02 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0032\U000e007f" + TURNED_OK_HAND_SIGN = "\U0001f58f" + BOOK = "\U0001f56e" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" + KISS_WOMAN_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" + FLAG_FOR_FARO_PT_08 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0038\U000e007f" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" + COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FALLING_DIAGONAL_IN_WHITE_CIRCLE_IN_BLACK_SQUARE = "\u26de" + FLAG_FOR_FRENCH_SOUTHERN_TERRITORIES_FR_TF = "\U0001f3f4\U000e0066\U000e0072\U000e0074\U000e0066\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + FLAG_FOR_ISTANBUL_TR_34 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0034\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" + FLAG_FOR_SUD_OUEST_BF_13 = "\U0001f3f4\U000e0062\U000e0066\U000e0031\U000e0033\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_FEDERAL_DEPENDENCIES_VE_W = "\U0001f3f4\U000e0076\U000e0065\U000e0077\U000e007f" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + FAMILY_MAN_WOMAN_GIRL_BABY = "\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f476" + FLAG_FOR_LONG_ISLAND_BS_LI = "\U0001f3f4\U000e0062\U000e0073\U000e006c\U000e0069\U000e007f" + FLAG_FOR_RANGPUR_DIVISION_BD_F = "\U0001f3f4\U000e0062\U000e0064\U000e0066\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + FLAG_FOR_ALAGOAS_BR_AL = "\U0001f3f4\U000e0062\U000e0072\U000e0061\U000e006c\U000e007f" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" + KISS_WOMAN_MAN_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" + FLAG_FOR_MAIDAN_WARDAK_AF_WAR = "\U0001f3f4\U000e0061\U000e0066\U000e0077\U000e0061\U000e0072\U000e007f" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" + COUPLE_WITH_HEART_WOMAN_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + FLAG_FOR_JALISCO_MX_JAL = "\U0001f3f4\U000e006d\U000e0078\U000e006a\U000e0061\U000e006c\U000e007f" + FLAG_FOR_LAZIO_IT_62 = "\U0001f3f4\U000e0069\U000e0074\U000e0036\U000e0032\U000e007f" + FLAG_FOR_SERGIPE_BR_SE = "\U0001f3f4\U000e0062\U000e0072\U000e0073\U000e0065\U000e007f" + KISS_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + FLAG_FOR_KOUFFO_BJ_KO = "\U0001f3f4\U000e0062\U000e006a\U000e006b\U000e006f\U000e007f" + TAG_LATIN_SMALL_LETTER_L = "\U000e006c" + TAG_LATIN_SMALL_LETTER_J = "\U000e006a" + FLAG_FOR_BAKU_AZ_BA = "\U0001f3f4\U000e0061\U000e007a\U000e0062\U000e0061\U000e007f" + FLAG_FOR_DAUGAVPILS_MUNICIPALITY_LV_025 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0035\U000e007f" + KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + FLAG_FOR_VINH_LONG_VN_49 = "\U0001f3f4\U000e0076\U000e006e\U000e0034\U000e0039\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + FLAG_FOR_STRASENI_MD_ST = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e0074\U000e007f" + FLAG_FOR_RORAIMA_BR_RR = "\U0001f3f4\U000e0062\U000e0072\U000e0072\U000e0072\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_BIMINI_BS_BI = "\U0001f3f4\U000e0062\U000e0073\U000e0062\U000e0069\U000e007f" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" + FLAG_FOR_NORTHERN_RED_SEA_ER_SK = "\U0001f3f4\U000e0065\U000e0072\U000e0073\U000e006b\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + FLAG_FOR_TIARET_DZ_14 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0034\U000e007f" + FLAG_FOR_SOGN_OG_FJORDANE_NO_14 = "\U0001f3f4\U000e006e\U000e006f\U000e0031\U000e0034\U000e007f" + WHITE_LEFT_LANE_MERGE = "\u26d9" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_KHACHMAZ_AZ_XAC = "\U0001f3f4\U000e0061\U000e007a\U000e0078\U000e0061\U000e0063\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + FLAG_FOR_SVETI_ANDRAZ_V_SLOVENSKIH_GORICAH_SI_182 = "\U0001f3f4\U000e0073\U000e0069\U000e0031\U000e0038\U000e0032\U000e007f" + FLAG_FOR_BALOCHISTAN_PK_BA = "\U0001f3f4\U000e0070\U000e006b\U000e0062\U000e0061\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_TOCANTINS_BR_TO = "\U0001f3f4\U000e0062\U000e0072\U000e0074\U000e006f\U000e007f" + FAMILY_WOMAN_MAN_BABY_GIRL = "\U0001f469\u200d\U0001f468\u200d\U0001f476\u200d\U0001f467" + TAG_SEMICOLON = "\U000e003b" + FLAG_FOR_EAST_GRAND_BAHAMA_BS_EG = "\U0001f3f4\U000e0062\U000e0073\U000e0065\U000e0067\U000e007f" + FLAG_FOR_SOUTH_AEGEAN_GR_L = "\U0001f3f4\U000e0067\U000e0072\U000e006c\U000e007f" + WOMAN_IN_BUSINESS_SUIT_LEVITATING = "\U0001f574\ufe0f\u200d\u2640\ufe0f" + FLAG_FOR_MAKAMBA_BI_MA = "\U0001f3f4\U000e0062\U000e0069\U000e006d\U000e0061\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" + FLAG_FOR_CROOKED_ISLAND_BS_CK = "\U0001f3f4\U000e0062\U000e0073\U000e0063\U000e006b\U000e007f" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" + TAG_LATIN_SMALL_LETTER_K = "\U000e006b" + FLAG_FOR_EXUMA_BS_EX = "\U0001f3f4\U000e0062\U000e0073\U000e0065\U000e0078\U000e007f" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FAMILY_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_PLATEAU_BJ_PL = "\U0001f3f4\U000e0062\U000e006a\U000e0070\U000e006c\U000e007f" + KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" + FLAG_FOR_FEDERAL_DISTRICT_BR_DF = "\U0001f3f4\U000e0062\U000e0072\U000e0064\U000e0066\U000e007f" + FLAG_FOR_NEW_SOUTH_WALES_AU_NSW = "\U0001f3f4\U000e0061\U000e0075\U000e006e\U000e0073\U000e0077\U000e007f" + FLAG_FOR_NORTH_ABACO_BS_NO = "\U0001f3f4\U000e0062\U000e0073\U000e006e\U000e006f\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_JERUSALEM_IL_JM = "\U0001f3f4\U000e0069\U000e006c\U000e006a\U000e006d\U000e007f" + FLAG_FOR_INAGUA_BS_IN = "\U0001f3f4\U000e0062\U000e0073\U000e0069\U000e006e\U000e007f" + FLAG_FOR_BOHINJ_SI_004 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0030\U000e0034\U000e007f" + FLAG_FOR_FREEPORT_BS_FP = "\U0001f3f4\U000e0062\U000e0073\U000e0066\U000e0070\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_CENTRAL_ELEUTHERA_BS_CE = "\U0001f3f4\U000e0062\U000e0073\U000e0063\U000e0065\U000e007f" + FLAG_FOR_GRAND_CAY_BS_GC = "\U0001f3f4\U000e0062\U000e0073\U000e0067\U000e0063\U000e007f" + TAG_LATIN_SMALL_LETTER_A = "\U000e0061" FLAG_FOR_MAYAGUANA_BS_MG = "\U0001f3f4\U000e0062\U000e0073\U000e006d\U000e0067\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" - FAMILY_MAN_MAN_BABY = "\U0001f468\u200d\U0001f468\u200d\U0001f476" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469" - COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469" - FLAG_FOR_EAST_AZERBAIJAN_IR_01 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0031\U000e007f" - COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - FLAG_FOR_NORTH_ANDROS_BS_NS = "\U0001f3f4\U000e0062\U000e0073\U000e006e\U000e0073\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" - FAMILY_MAN_BOY_BABY = "\U0001f468\u200d\U0001f466\u200d\U0001f476" + FLAG_FOR_SOUTH_AUSTRALIA_AU_SA = "\U0001f3f4\U000e0061\U000e0075\U000e0073\U000e0061\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f466\U0001f3fb" COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + FLAG_FOR_KAOHSIUNG_TW_KHH = "\U0001f3f4\U000e0074\U000e0077\U000e006b\U000e0068\U000e0068\U000e007f" + WOMAN_IN_BUSINESS_SUIT_LEVITATING_MEDIUM_DARK_SKIN_TONE = "\U0001f574\U0001f3fe\u200d\u2640\ufe0f" + FLAG_FOR_TRANS_NZOIA_KE_42 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0032\U000e007f" + COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + FLAG_FOR_NORTH_ANDROS_BS_NS = "\U0001f3f4\U000e0062\U000e0073\U000e006e\U000e0073\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + FAMILY_WOMAN_MAN_BOY_BABY = "\U0001f469\u200d\U0001f468\u200d\U0001f466\u200d\U0001f476" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f476\U0001f3fd" + FAMILY_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_OREGON_US_OR = "\U0001f3f4\U000e0075\U000e0073\U000e006f\U000e0072\U000e007f" + KISS_MAN_LIGHT_SKIN_TONE_MAN = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" + FAMILY_MAN_BOY_BABY = "\U0001f468\u200d\U0001f466\u200d\U0001f476" + FAMILY_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f467\U0001f3fb" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" + FLAG_FOR_OCCITANIE_FR_OCC = "\U0001f3f4\U000e0066\U000e0072\U000e006f\U000e0063\U000e0063\U000e007f" + FLAG_FOR_EAST_AZERBAIJAN_IR_01 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0031\U000e007f" + FLAG_FOR_SOUTH_ANDROS_BS_SA = "\U0001f3f4\U000e0062\U000e0073\U000e0073\U000e0061\U000e007f" + FLAG_FOR_AMAZONAS_BR_AM = "\U0001f3f4\U000e0062\U000e0072\U000e0061\U000e006d\U000e007f" + FLAG_FOR_TANA_RIVER_KE_40 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0030\U000e007f" + KISS_MAN_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" + GEAR_WITH_HANDLES = "\u26ee" + FLAG_FOR_SOUTH_ELEUTHERA_BS_SE = "\U0001f3f4\U000e0062\U000e0073\U000e0073\U000e0065\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f469" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" KISS_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" KISS_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - KISS_WOMAN_WOMAN_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - FLAG_FOR_MADHYA_PRADESH_IN_MP = "\U0001f3f4\U000e0069\U000e006e\U000e006d\U000e0070\U000e007f" - FAMILY_MAN_BABY_GIRL = "\U0001f468\u200d\U0001f476\u200d\U0001f467" - KISS_MAN_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - KISS_MAN_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" - FLAG_FOR_SOUTH_ELEUTHERA_BS_SE = "\U0001f3f4\U000e0062\U000e0073\U000e0073\U000e0065\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f476\U0001f3fd" - KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" - FLAG_FOR_SOUTH_ANDROS_BS_SA = "\U0001f3f4\U000e0062\U000e0073\U000e0073\U000e0061\U000e007f" - FAMILY_WOMAN_MAN_BOY_BABY = "\U0001f469\u200d\U0001f468\u200d\U0001f466\u200d\U0001f476" - KISS_MAN_MAN_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - KISS_MAN_LIGHT_SKIN_TONE_MAN = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" - FLAG_FOR_CIEGO_DE_AVILA_CU_08 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0038\U000e007f" - FLAG_FOR_RUM_CAY_BS_RC = "\U0001f3f4\U000e0062\U000e0073\U000e0072\U000e0063\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" - KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" - KISS_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" - COUPLE_WITH_HEART_MAN_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - KISS_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - FLAG_FOR_PENANG_MY_07 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0037\U000e007f" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc" - KISS_WOMAN_MEDIUM_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" KISS_WOMAN_LIGHT_SKIN_TONE_MAN = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" - KISS_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" - FLAG_FOR_BERAT_COUNTY_AL_01 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0031\U000e007f" - KISS_WOMAN_MEDIUM_SKIN_TONE_MAN = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468" - FLAG_FOR_SOUTH_ABACO_BS_SO = "\U0001f3f4\U000e0062\U000e0073\U000e0073\U000e006f\U000e007f" - KISS_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" + COUPLE_WITH_HEART_MAN_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" + KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468" + KISS_WOMAN_MEDIUM_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" + FLAG_FOR_BUDAPEST_HU_BU = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e0075\U000e007f" + KISS_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" KISS_MAN_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" + SIDEWAYS_BLACK_RIGHT_POINTING_INDEX = "\U0001f59b" + KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" + KISS_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" KISS_WOMAN_DARK_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" - COUPLE_WITH_HEART_WOMAN_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - FLAG_FOR_NORTH_ELEUTHERA_BS_NE = "\U0001f3f4\U000e0062\U000e0073\U000e006e\U000e0065\U000e007f" - FAMILY_MAN_GIRL_BABY = "\U0001f468\u200d\U0001f467\u200d\U0001f476" - COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_SOUTH_ABACO_BS_SO = "\U0001f3f4\U000e0062\U000e0073\U000e0073\U000e006f\U000e007f" KISS_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" - COUPLE_WITH_HEART_WOMAN_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + FLAG_FOR_RUM_CAY_BS_RC = "\U0001f3f4\U000e0062\U000e0073\U000e0072\U000e0063\U000e007f" + TAG_SOLIDUS = "\U000e002f" COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fc" + FAMILY_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd" COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" FAMILY_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f476\U0001f3ff" - COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" - COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469" - FLAG_FOR_HAA_BT_13 = "\U0001f3f4\U000e0062\U000e0074\U000e0031\U000e0033\U000e007f" - KISS_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FAMILY_WOMAN_BOY_GIRL = "\U0001f469\u200d\U0001f466\u200d\U0001f467" COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - FLAG_FOR_THIMPHU_BT_15 = "\U0001f3f4\U000e0062\U000e0074\U000e0031\U000e0035\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - FLAG_FOR_PARO_BT_11 = "\U0001f3f4\U000e0062\U000e0074\U000e0031\U000e0031\U000e007f" - FLAG_FOR_WEST_GRAND_BAHAMA_BS_WG = "\U0001f3f4\U000e0062\U000e0073\U000e0077\U000e0067\U000e007f" - FLAG_FOR_BENI_BO_B = "\U0001f3f4\U000e0062\U000e006f\U000e0062\U000e007f" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_ANSE_ROYALE_SC_05 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0035\U000e007f" FLAG_FOR_DELHI_IN_DL = "\U0001f3f4\U000e0069\U000e006e\U000e0064\U000e006c\U000e007f" - COUPLE_WITH_HEART_MAN_WOMAN_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" - FAMILY_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" - FAMILY_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_BUMTHANG_BT_33 = "\U0001f3f4\U000e0062\U000e0074\U000e0033\U000e0033\U000e007f" - FLAG_FOR_TRONGSA_BT_32 = "\U0001f3f4\U000e0062\U000e0074\U000e0033\U000e0032\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_PUNAKHA_BT_23 = "\U0001f3f4\U000e0062\U000e0074\U000e0032\U000e0033\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - FLAG_FOR_WANGDUE_PHODRANG_BT_24 = "\U0001f3f4\U000e0062\U000e0074\U000e0032\U000e0034\U000e007f" - COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" - FLAG_FOR_MONGAR_BT_42 = "\U0001f3f4\U000e0062\U000e0074\U000e0034\U000e0032\U000e007f" - COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - FLAG_FOR_PARAIBA_BR_PB = "\U0001f3f4\U000e0062\U000e0072\U000e0070\U000e0062\U000e007f" - FLAG_FOR_ACKLINS_BS_AK = "\U0001f3f4\U000e0062\U000e0073\U000e0061\U000e006b\U000e007f" - FLAG_FOR_SAMTSE_BT_14 = "\U0001f3f4\U000e0062\U000e0074\U000e0031\U000e0034\U000e007f" - FLAG_FOR_SARPANG_BT_31 = "\U0001f3f4\U000e0062\U000e0074\U000e0033\U000e0031\U000e007f" - FLAG_FOR_ZHEMGANG_BT_34 = "\U0001f3f4\U000e0062\U000e0074\U000e0033\U000e0034\U000e007f" - FLAG_FOR_TRASHIGANG_BT_41 = "\U0001f3f4\U000e0062\U000e0074\U000e0034\U000e0031\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" + FAMILY_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" + KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" + FLAG_FOR_THIMPHU_BT_15 = "\U0001f3f4\U000e0062\U000e0074\U000e0031\U000e0035\U000e007f" + FLAG_FOR_CIEGO_DE_AVILA_CU_08 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0038\U000e007f" + FLAG_FOR_PARO_BT_11 = "\U0001f3f4\U000e0062\U000e0074\U000e0031\U000e0031\U000e007f" + KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fe" + FLAG_FOR_HAA_BT_13 = "\U0001f3f4\U000e0062\U000e0074\U000e0031\U000e0033\U000e007f" + FLAG_FOR_MADHYA_PRADESH_IN_MP = "\U0001f3f4\U000e0069\U000e006e\U000e006d\U000e0070\U000e007f" + KISS_MAN_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + FAMILY_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_WEST_GRAND_BAHAMA_BS_WG = "\U0001f3f4\U000e0062\U000e0073\U000e0077\U000e0067\U000e007f" + FLAG_FOR_PYONGYANG_KP_01 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0031\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" FLAG_FOR_DAGANA_BT_22 = "\U0001f3f4\U000e0062\U000e0074\U000e0032\U000e0032\U000e007f" - FLAG_FOR_SAN_SALVADOR_BS_SS = "\U0001f3f4\U000e0062\U000e0073\U000e0073\U000e0073\U000e007f" + FLAG_FOR_ZHEMGANG_BT_34 = "\U0001f3f4\U000e0062\U000e0074\U000e0033\U000e0034\U000e007f" + FLAG_FOR_SARPANG_BT_31 = "\U0001f3f4\U000e0062\U000e0074\U000e0033\U000e0031\U000e007f" + KISS_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" + FLAG_FOR_KUNDUZ_AF_KDZ = "\U0001f3f4\U000e0061\U000e0066\U000e006b\U000e0064\U000e007a\U000e007f" + FLAG_FOR_TRASHIGANG_BT_41 = "\U0001f3f4\U000e0062\U000e0074\U000e0034\U000e0031\U000e007f" + COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" + FLAG_FOR_TRONGSA_BT_32 = "\U0001f3f4\U000e0062\U000e0074\U000e0033\U000e0032\U000e007f" + FLAG_FOR_BUMTHANG_BT_33 = "\U0001f3f4\U000e0062\U000e0074\U000e0033\U000e0033\U000e007f" + FLAG_FOR_MONGAR_BT_42 = "\U0001f3f4\U000e0062\U000e0074\U000e0034\U000e0032\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" KISS_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" - FLAG_FOR_METRO_MANILA_PH_00 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0030\U000e007f" - FLAG_FOR_CENTRAL_BW_CE = "\U0001f3f4\U000e0062\U000e0077\U000e0063\U000e0065\U000e007f" - FLAG_FOR_MASSACHUSETTS_US_MA = "\U0001f3f4\U000e0075\U000e0073\U000e006d\U000e0061\U000e007f" - COUPLE_WITH_HEART_MAN_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" + FLAG_FOR_PEMAGATSHEL_BT_43 = "\U0001f3f4\U000e0062\U000e0074\U000e0034\U000e0033\U000e007f" + FLAG_FOR_ACKLINS_BS_AK = "\U0001f3f4\U000e0062\U000e0073\U000e0061\U000e006b\U000e007f" + FLAG_FOR_CHOBE_BW_CH = "\U0001f3f4\U000e0062\U000e0077\U000e0063\U000e0068\U000e007f" + FLAG_FOR_SALTA_AR_A = "\U0001f3f4\U000e0061\U000e0072\U000e0061\U000e007f" FLAG_FOR_LHUNTSE_BT_44 = "\U0001f3f4\U000e0062\U000e0074\U000e0034\U000e0034\U000e007f" FLAG_FOR_TRASHIYANGTSE_BT_TY = "\U0001f3f4\U000e0062\U000e0074\U000e0074\U000e0079\U000e007f" - FLAG_FOR_CHOBE_BW_CH = "\U0001f3f4\U000e0062\U000e0077\U000e0063\U000e0068\U000e007f" - FLAG_FOR_PEMAGATSHEL_BT_43 = "\U0001f3f4\U000e0062\U000e0074\U000e0034\U000e0033\U000e007f" - FLAG_FOR_GASA_BT_GA = "\U0001f3f4\U000e0062\U000e0074\U000e0067\U000e0061\U000e007f" - FLAG_FOR_FRANCISTOWN_BW_FR = "\U0001f3f4\U000e0062\U000e0077\U000e0066\U000e0072\U000e007f" - COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469" - FLAG_FOR_SAMDRUP_JONGKHAR_BT_45 = "\U0001f3f4\U000e0062\U000e0074\U000e0034\U000e0035\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468" - FAMILY_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_TSIRANG_BT_21 = "\U0001f3f4\U000e0062\U000e0074\U000e0032\U000e0031\U000e007f" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + COUPLE_WITH_HEART_MAN_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" + FLAG_FOR_NEW_MEXICO_US_NM = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e006d\U000e007f" + FAMILY_MAN_MAN_BABY = "\U0001f468\u200d\U0001f468\u200d\U0001f476" + LIGHTNING_MOOD_BUBBLE = "\U0001f5f1" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f467\U0001f3fc" FLAG_FOR_JWANENG_BW_JW = "\U0001f3f4\U000e0062\U000e0077\U000e006a\U000e0077\U000e007f" - FLAG_FOR_MANGROVE_CAY_BS_MC = "\U0001f3f4\U000e0062\U000e0073\U000e006d\U000e0063\U000e007f" - COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" - FLAG_FOR_KGALAGADI_BW_KG = "\U0001f3f4\U000e0062\U000e0077\U000e006b\U000e0067\U000e007f" - FLAG_FOR_KWENENG_BW_KW = "\U0001f3f4\U000e0062\U000e0077\U000e006b\U000e0077\U000e007f" - FLAG_FOR_NORTH_WEST_BW_NW = "\U0001f3f4\U000e0062\U000e0077\U000e006e\U000e0077\U000e007f" - FLAG_FOR_KGATLENG_BW_KL = "\U0001f3f4\U000e0062\U000e0077\U000e006b\U000e006c\U000e007f" - FLAG_FOR_GHANZI_BW_GH = "\U0001f3f4\U000e0062\U000e0077\U000e0067\U000e0068\U000e007f" - FAMILY_WOMAN_MAN_BABY_BABY = "\U0001f469\u200d\U0001f468\u200d\U0001f476\u200d\U0001f476" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" - FAMILY_WOMAN_WOMAN_BABY_BOY = "\U0001f469\u200d\U0001f469\u200d\U0001f476\u200d\U0001f466" + FAMILY_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fb" + COUPLE_WITH_HEART_MAN_MEDIUM_SKIN_TONE_MAN = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468" FLAG_FOR_SOUTH_EAST_BW_SE = "\U0001f3f4\U000e0062\U000e0077\U000e0073\U000e0065\U000e007f" + LEFT_HANDED_INTERLACED_PENTAGRAM = "\u26e6" FLAG_FOR_ATLANTIQUE_BJ_AQ = "\U0001f3f4\U000e0062\U000e006a\U000e0061\U000e0071\U000e007f" + FLAG_FOR_CENTRAL_BW_CE = "\U0001f3f4\U000e0062\U000e0077\U000e0063\U000e0065\U000e007f" + FLAG_FOR_WANGDUE_PHODRANG_BT_24 = "\U0001f3f4\U000e0062\U000e0074\U000e0032\U000e0034\U000e007f" + FLAG_FOR_KGATLENG_BW_KL = "\U0001f3f4\U000e0062\U000e0077\U000e006b\U000e006c\U000e007f" + FLAG_FOR_RONDONIA_BR_RO = "\U0001f3f4\U000e0062\U000e0072\U000e0072\U000e006f\U000e007f" + FLAG_FOR_CENTRAL_FINLAND_FI_08 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0038\U000e007f" + KISS_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" + FLAG_FOR_RUTANA_BI_RT = "\U0001f3f4\U000e0062\U000e0069\U000e0072\U000e0074\U000e007f" + FLAG_FOR_GHANZI_BW_GH = "\U0001f3f4\U000e0062\U000e0077\U000e0067\U000e0068\U000e007f" + FLAG_FOR_KGALAGADI_BW_KG = "\U0001f3f4\U000e0062\U000e0077\U000e006b\U000e0067\U000e007f" FLAG_FOR_NORTH_EAST_BW_NE = "\U0001f3f4\U000e0062\U000e0077\U000e006e\U000e0065\U000e007f" - FLAG_FOR_SOWA_TOWN_BW_ST = "\U0001f3f4\U000e0062\U000e0077\U000e0073\U000e0074\U000e007f" + FLAG_FOR_TISINA_SI_010 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0031\U000e0030\U000e007f" + FLAG_FOR_KWENENG_BW_KW = "\U0001f3f4\U000e0062\U000e0077\U000e006b\U000e0077\U000e007f" COUPLE_WITH_HEART_WOMAN_MAN_LIGHT_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - FAMILY_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" - KISS_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" - FAMILY_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" - FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_SAMDRUP_JONGKHAR_BT_45 = "\U0001f3f4\U000e0062\U000e0074\U000e0034\U000e0035\U000e007f" + FLAG_FOR_SAMTSE_BT_14 = "\U0001f3f4\U000e0062\U000e0074\U000e0031\U000e0034\U000e007f" + FLAG_FOR_JIHOCESKY_KRAJ_CZ_31 = "\U0001f3f4\U000e0063\U000e007a\U000e0033\U000e0031\U000e007f" + FLAG_FOR_CHRIST_CHURCH_BB_01 = "\U0001f3f4\U000e0062\U000e0062\U000e0030\U000e0031\U000e007f" FLAG_FOR_SELIBE_PHIKWE_BW_SP = "\U0001f3f4\U000e0062\U000e0077\U000e0073\U000e0070\U000e007f" + KISS_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + FAMILY_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_NORTH_WEST_BW_NW = "\U0001f3f4\U000e0062\U000e0077\U000e006e\U000e0077\U000e007f" COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468" - FLAG_FOR_SOUTHERN_BW_SO = "\U0001f3f4\U000e0062\U000e0077\U000e0073\U000e006f\U000e007f" - COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_MINSK_BY_HM = "\U0001f3f4\U000e0062\U000e0079\U000e0068\U000e006d\U000e007f" - FLAG_FOR_HOMEL_BY_HO = "\U0001f3f4\U000e0062\U000e0079\U000e0068\U000e006f\U000e007f" - FLAG_FOR_ZURICH_CH_ZH = "\U0001f3f4\U000e0063\U000e0068\U000e007a\U000e0068\U000e007f" - TAG_LATIN_CAPITAL_LETTER_Y = "\U000e0059" + FLAG_FOR_SOWA_TOWN_BW_ST = "\U0001f3f4\U000e0062\U000e0077\U000e0073\U000e0074\U000e007f" + FAMILY_WOMAN_MAN_BABY_BABY = "\U0001f469\u200d\U0001f468\u200d\U0001f476\u200d\U0001f476" + WHITE_CHESS_KING = "\u2654" + FLAG_FOR_ORURO_BO_O = "\U0001f3f4\U000e0062\U000e006f\U000e006f\U000e007f" + FLAG_FOR_PHOENIX_ISLANDS_KI_P = "\U0001f3f4\U000e006b\U000e0069\U000e0070\U000e007f" + FLAG_FOR_PIAUI_BR_PI = "\U0001f3f4\U000e0062\U000e0072\U000e0070\U000e0069\U000e007f" FLAG_FOR_HRODNA_BY_HR = "\U0001f3f4\U000e0062\U000e0079\U000e0068\U000e0072\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_MONO_BJ_MO = "\U0001f3f4\U000e0062\U000e006a\U000e006d\U000e006f\U000e007f" - COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" - FLAG_FOR_MAGILEU_BY_MA = "\U0001f3f4\U000e0062\U000e0079\U000e006d\U000e0061\U000e007f" - FLAG_FOR_MINSK_REGION_BY_MI = "\U0001f3f4\U000e0062\U000e0079\U000e006d\U000e0069\U000e007f" - KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" - FLAG_FOR_EXTREMADURA_ES_EX = "\U0001f3f4\U000e0065\U000e0073\U000e0065\U000e0078\U000e007f" - FLAG_FOR_VITEBSK_BY_VI = "\U0001f3f4\U000e0062\U000e0079\U000e0076\U000e0069\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_HOMEL_BY_HO = "\U0001f3f4\U000e0062\U000e0079\U000e0068\U000e006f\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_MINSK_BY_HM = "\U0001f3f4\U000e0062\U000e0079\U000e0068\U000e006d\U000e007f" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" + FLAG_FOR_CHITTAGONG_DIVISION_BD_B = "\U0001f3f4\U000e0062\U000e0064\U000e0062\U000e007f" + MAP_SYMBOL_FOR_LIGHTHOUSE = "\u26ef" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f476\U0001f3ff" FLAG_FOR_MOORE_S_ISLAND_BS_MI = "\U0001f3f4\U000e0062\U000e0073\U000e006d\U000e0069\U000e007f" - FLAG_FOR_MONTANA_BG_12 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0032\U000e007f" - FLAG_FOR_HOPE_TOWN_BS_HT = "\U0001f3f4\U000e0062\U000e0073\U000e0068\U000e0074\U000e007f" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468" - FLAG_FOR_SPANISH_WELLS_BS_SW = "\U0001f3f4\U000e0062\U000e0073\U000e0073\U000e0077\U000e007f" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" - FLAG_FOR_STANN_CREEK_BZ_SC = "\U0001f3f4\U000e0062\U000e007a\U000e0073\U000e0063\U000e007f" - KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fd" - FAMILY_MAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" - FAMILY_WOMAN_MAN_GIRL_BOY = "\U0001f469\u200d\U0001f468\u200d\U0001f467\u200d\U0001f466" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_TOLEDO_BZ_TOL = "\U0001f3f4\U000e0062\U000e007a\U000e0074\U000e006f\U000e006c\U000e007f" - COUPLE_WITH_HEART_WOMAN_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + FLAG_FOR_MINSK_REGION_BY_MI = "\U0001f3f4\U000e0062\U000e0079\U000e006d\U000e0069\U000e007f" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_GUARDA_PT_09 = "\U0001f3f4\U000e0070\U000e0074\U000e0030\U000e0039\U000e007f" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb" + FAMILY_WOMAN_BABY_GIRL = "\U0001f469\u200d\U0001f476\u200d\U0001f467" + FAMILY_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f466\U0001f3fb" + FLAG_FOR_VITEBSK_BY_VI = "\U0001f3f4\U000e0062\U000e0079\U000e0076\U000e0069\U000e007f" + FLAG_FOR_CASTILE_LA_MANCHA_ES_CM = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e006d\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_ALMATY_KZ_ALA = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e006c\U000e0061\U000e007f" + FLAG_FOR_METRO_MANILA_PH_00 = "\U0001f3f4\U000e0070\U000e0068\U000e0030\U000e0030\U000e007f" + FLAG_FOR_MAGILEU_BY_MA = "\U0001f3f4\U000e0062\U000e0079\U000e006d\U000e0061\U000e007f" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_WOMAN = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469" FLAG_FOR_SILISTRA_BG_19 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0039\U000e007f" - FLAG_FOR_IZMIR_TR_35 = "\U0001f3f4\U000e0074\U000e0072\U000e0033\U000e0035\U000e007f" - FLAG_FOR_COROZAL_BZ_CZL = "\U0001f3f4\U000e0062\U000e007a\U000e0063\U000e007a\U000e006c\U000e007f" - FLAG_FOR_TRISTAN_DA_CUNHA_SH_TA = "\U0001f3f4\U000e0073\U000e0068\U000e0074\U000e0061\U000e007f" - FLAG_FOR_LOBATSE_BW_LO = "\U0001f3f4\U000e0062\U000e0077\U000e006c\U000e006f\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" + FAMILY_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_STANN_CREEK_BZ_SC = "\U0001f3f4\U000e0062\U000e007a\U000e0073\U000e0063\U000e007f" + FLAG_FOR_NORTH_ELEUTHERA_BS_NE = "\U0001f3f4\U000e0062\U000e0073\U000e006e\U000e0065\U000e007f" + FLAG_FOR_NEW_BRUNSWICK_CA_NB = "\U0001f3f4\U000e0063\U000e0061\U000e006e\U000e0062\U000e007f" + FAMILY_MAN_GIRL_BABY = "\U0001f468\u200d\U0001f467\u200d\U0001f476" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468" + COUPLE_WITH_HEART_WOMAN_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3ff" + FLAG_FOR_TOLEDO_BZ_TOL = "\U0001f3f4\U000e0062\U000e007a\U000e0074\U000e006f\U000e006c\U000e007f" KISS_WOMAN_MEDIUM_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - KISS_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" - FLAG_FOR_RAGGED_ISLAND_BS_RI = "\U0001f3f4\U000e0062\U000e0073\U000e0072\U000e0069\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f467\U0001f3fc" + KISS_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + FAMILY_MAN_MAN_BABY_BABY = "\U0001f468\u200d\U0001f468\u200d\U0001f476\u200d\U0001f476" + FLAG_FOR_TAMAULIPAS_MX_TAM = "\U0001f3f4\U000e006d\U000e0078\U000e0074\U000e0061\U000e006d\U000e007f" + FLAG_FOR_TRISTAN_DA_CUNHA_SH_TA = "\U0001f3f4\U000e0073\U000e0068\U000e0074\U000e0061\U000e007f" + FAMILY_MAN_WOMAN_BABY_BABY = "\U0001f468\u200d\U0001f469\u200d\U0001f476\u200d\U0001f476" + FLAG_FOR_SAN_LUIS_POTOSI_MX_SLP = "\U0001f3f4\U000e006d\U000e0078\U000e0073\U000e006c\U000e0070\U000e007f" FLAG_FOR_VIENTIANE_PROVINCE_LA_VI = "\U0001f3f4\U000e006c\U000e0061\U000e0076\U000e0069\U000e007f" - FLAG_FOR_SUDUR_PASHCHIMANCHAL_NP_5 = "\U0001f3f4\U000e006e\U000e0070\U000e0035\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" - FLAG_FOR_MONGALA_CD_MO = "\U0001f3f4\U000e0063\U000e0064\U000e006d\U000e006f\U000e007f" - FLAG_FOR_KWANGO_CD_KG = "\U0001f3f4\U000e0063\U000e0064\U000e006b\U000e0067\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" - FLAG_FOR_HAUT_UELE_CD_HU = "\U0001f3f4\U000e0063\U000e0064\U000e0068\U000e0075\U000e007f" - FLAG_FOR_OUHAM_CF_AC = "\U0001f3f4\U000e0063\U000e0066\U000e0061\U000e0063\U000e007f" - FLAG_FOR_BLACK_POINT_BS_BP = "\U0001f3f4\U000e0062\U000e0073\U000e0062\U000e0070\U000e007f" - FLAG_FOR_BAMINGUI_BANGORAN_CF_BB = "\U0001f3f4\U000e0063\U000e0066\U000e0062\U000e0062\U000e007f" - FLAG_FOR_MANIEMA_CD_MA = "\U0001f3f4\U000e0063\U000e0064\U000e006d\U000e0061\U000e007f" - FLAG_FOR_KINSHASA_CD_KN = "\U0001f3f4\U000e0063\U000e0064\U000e006b\U000e006e\U000e007f" - FLAG_FOR_SANKURU_CD_SA = "\U0001f3f4\U000e0063\U000e0064\U000e0073\U000e0061\U000e007f" - FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc" - FLAG_FOR_MAI_NDOMBE_CD_MN = "\U0001f3f4\U000e0063\U000e0064\U000e006d\U000e006e\U000e007f" - FLAG_FOR_ITURI_CD_IT = "\U0001f3f4\U000e0063\U000e0064\U000e0069\U000e0074\U000e007f" - FLAG_FOR_NORTH_KIVU_CD_NK = "\U0001f3f4\U000e0063\U000e0064\U000e006e\U000e006b\U000e007f" - FLAG_FOR_HAUT_KATANGA_CD_HK = "\U0001f3f4\U000e0063\U000e0064\U000e0068\U000e006b\U000e007f" - FLAG_FOR_HAUT_LOMAMI_CD_HL = "\U0001f3f4\U000e0063\U000e0064\U000e0068\U000e006c\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_TSHOPO_CD_TO = "\U0001f3f4\U000e0063\U000e0064\U000e0074\U000e006f\U000e007f" - FLAG_FOR_TSHUAPA_CD_TU = "\U0001f3f4\U000e0063\U000e0064\U000e0074\U000e0075\U000e007f" - FLAG_FOR_BANGUI_CF_BGF = "\U0001f3f4\U000e0063\U000e0066\U000e0062\U000e0067\U000e0066\U000e007f" - FLAG_FOR_KASAI_ORIENTAL_CD_KE = "\U0001f3f4\U000e0063\U000e0064\U000e006b\U000e0065\U000e007f" - FLAG_FOR_SOUTH_KIVU_CD_SK = "\U0001f3f4\U000e0063\U000e0064\U000e0073\U000e006b\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_SOUTHERN_BW_SO = "\U0001f3f4\U000e0062\U000e0077\U000e0073\U000e006f\U000e007f" FLAG_FOR_MAMBERE_KADEI_CF_HS = "\U0001f3f4\U000e0063\U000e0066\U000e0068\U000e0073\U000e007f" + FLAG_FOR_ITURI_CD_IT = "\U0001f3f4\U000e0063\U000e0064\U000e0069\U000e0074\U000e007f" + NOTCHED_LEFT_SEMICIRCLE_WITH_THREE_DOTS = "\U0001f543" + FLAG_FOR_MAI_NDOMBE_CD_MN = "\U0001f3f4\U000e0063\U000e0064\U000e006d\U000e006e\U000e007f" + FLAG_FOR_SOUTH_KIVU_CD_SK = "\U0001f3f4\U000e0063\U000e0064\U000e0073\U000e006b\U000e007f" FLAG_FOR_KASAI_CENTRAL_CD_KC = "\U0001f3f4\U000e0063\U000e0064\U000e006b\U000e0063\U000e007f" + FLAG_FOR_HAUT_UELE_CD_HU = "\U0001f3f4\U000e0063\U000e0064\U000e0068\U000e0075\U000e007f" + FLAG_FOR_KWANGO_CD_KG = "\U0001f3f4\U000e0063\U000e0064\U000e006b\U000e0067\U000e007f" + FLAG_FOR_SWIETOKRZYSKIE_PL_SK = "\U0001f3f4\U000e0070\U000e006c\U000e0073\U000e006b\U000e007f" FLAG_FOR_KASAI_CD_KS = "\U0001f3f4\U000e0063\U000e0064\U000e006b\U000e0073\U000e007f" - FLAG_FOR_CUVETTE_CG_8 = "\U0001f3f4\U000e0063\U000e0067\U000e0038\U000e007f" - FLAG_FOR_LEKOUMOU_CG_2 = "\U0001f3f4\U000e0063\U000e0067\U000e0032\U000e007f" - FLAG_FOR_GANJA_AZ_GA = "\U0001f3f4\U000e0061\U000e007a\U000e0067\U000e0061\U000e007f" + FLAG_FOR_RAGGED_ISLAND_BS_RI = "\U0001f3f4\U000e0062\U000e0073\U000e0072\U000e0069\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_MANIEMA_CD_MA = "\U0001f3f4\U000e0063\U000e0064\U000e006d\U000e0061\U000e007f" + FLAG_FOR_SANKURU_CD_SA = "\U0001f3f4\U000e0063\U000e0064\U000e0073\U000e0061\U000e007f" + FLAG_FOR_MONTANA_BG_12 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0032\U000e007f" + FLAG_FOR_OUHAM_CF_AC = "\U0001f3f4\U000e0063\U000e0066\U000e0061\U000e0063\U000e007f" + FLAG_FOR_HAUT_LOMAMI_CD_HL = "\U0001f3f4\U000e0063\U000e0064\U000e0068\U000e006c\U000e007f" + FLAG_FOR_BAMINGUI_BANGORAN_CF_BB = "\U0001f3f4\U000e0063\U000e0066\U000e0062\U000e0062\U000e007f" + FLAG_FOR_BUBANZA_BI_BB = "\U0001f3f4\U000e0062\U000e0069\U000e0062\U000e0062\U000e007f" + FLAG_FOR_KINSHASA_CD_KN = "\U0001f3f4\U000e0063\U000e0064\U000e006b\U000e006e\U000e007f" + FLAG_FOR_KASAI_ORIENTAL_CD_KE = "\U0001f3f4\U000e0063\U000e0064\U000e006b\U000e0065\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_MONGALA_CD_MO = "\U0001f3f4\U000e0063\U000e0064\U000e006d\U000e006f\U000e007f" + FLAG_FOR_TSHUAPA_CD_TU = "\U0001f3f4\U000e0063\U000e0064\U000e0074\U000e0075\U000e007f" + FLAG_FOR_TSHOPO_CD_TO = "\U0001f3f4\U000e0063\U000e0064\U000e0074\U000e006f\U000e007f" FLAG_FOR_LUCERNE_CH_LU = "\U0001f3f4\U000e0063\U000e0068\U000e006c\U000e0075\U000e007f" - FLAG_FOR_NIDWALDEN_CH_NW = "\U0001f3f4\U000e0063\U000e0068\U000e006e\U000e0077\U000e007f" - FLAG_FOR_FEDERATION_OF_BOSNIA_AND_HERZEGOVINA_BA_BIH = "\U0001f3f4\U000e0062\U000e0061\U000e0062\U000e0069\U000e0068\U000e007f" - FLAG_FOR_SANGHA_CG_13 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0033\U000e007f" - FLAG_FOR_SCHAFFHAUSEN_CH_SH = "\U0001f3f4\U000e0063\U000e0068\U000e0073\U000e0068\U000e007f" - FLAG_FOR_KWILU_CD_KL = "\U0001f3f4\U000e0063\U000e0064\U000e006b\U000e006c\U000e007f" - FLAG_FOR_LOMAMI_CD_LO = "\U0001f3f4\U000e0063\U000e0064\U000e006c\U000e006f\U000e007f" - FLAG_FOR_KOUILOU_CG_5 = "\U0001f3f4\U000e0063\U000e0067\U000e0035\U000e007f" - FLAG_FOR_APPENZELL_INNERRHODEN_CH_AI = "\U0001f3f4\U000e0063\U000e0068\U000e0061\U000e0069\U000e007f" - FLAG_FOR_OMBELLA_M_POKO_CF_MP = "\U0001f3f4\U000e0063\U000e0066\U000e006d\U000e0070\U000e007f" - FLAG_FOR_BRAZZAVILLE_CG_BZV = "\U0001f3f4\U000e0063\U000e0067\U000e0062\U000e007a\U000e0076\U000e007f" - FLAG_FOR_FRIBOURG_CH_FR = "\U0001f3f4\U000e0063\U000e0068\U000e0066\U000e0072\U000e007f" - FLAG_FOR_KEMO_CF_KG = "\U0001f3f4\U000e0063\U000e0066\U000e006b\U000e0067\U000e007f" - FLAG_FOR_LIKOUALA_CG_7 = "\U0001f3f4\U000e0063\U000e0067\U000e0037\U000e007f" - FLAG_FOR_PLATEAUX_CG_14 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0034\U000e007f" - FLAG_FOR_SANGHA_MBAERE_CF_SE = "\U0001f3f4\U000e0063\U000e0066\U000e0073\U000e0065\U000e007f" + FLAG_FOR_RIO_GRANDE_DO_NORTE_BR_RN = "\U0001f3f4\U000e0062\U000e0072\U000e0072\U000e006e\U000e007f" + WOMAN_WITH_HEADSCARF_LIGHT_SKIN_TONE = "\U0001f9d5\U0001f3fb\u200d\u2640\ufe0f" FAMILY_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_SOLOTHURN_CH_SO = "\U0001f3f4\U000e0063\U000e0068\U000e0073\U000e006f\U000e007f" - FLAG_FOR_CUVETTE_OUEST_CG_15 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0035\U000e007f" - FLAG_FOR_OBWALDEN_CH_OW = "\U0001f3f4\U000e0063\U000e0068\U000e006f\U000e0077\U000e007f" - FLAG_FOR_GRAUBUNDEN_CH_GR = "\U0001f3f4\U000e0063\U000e0068\U000e0067\U000e0072\U000e007f" - FLAG_FOR_APPENZELL_AUSSERRHODEN_CH_AR = "\U0001f3f4\U000e0063\U000e0068\U000e0061\U000e0072\U000e007f" - FLAG_FOR_SCHWYZ_CH_SZ = "\U0001f3f4\U000e0063\U000e0068\U000e0073\U000e007a\U000e007f" - FLAG_FOR_ST_GALLEN_CH_SG = "\U0001f3f4\U000e0063\U000e0068\U000e0073\U000e0067\U000e007f" FLAG_FOR_LOBAYE_CF_LB = "\U0001f3f4\U000e0063\U000e0066\U000e006c\U000e0062\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_LOMAMI_CD_LO = "\U0001f3f4\U000e0063\U000e0064\U000e006c\U000e006f\U000e007f" + FLAG_FOR_KWILU_CD_KL = "\U0001f3f4\U000e0063\U000e0064\U000e006b\U000e006c\U000e007f" + FLAG_FOR_LOBATSE_BW_LO = "\U0001f3f4\U000e0062\U000e0077\U000e006c\U000e006f\U000e007f" + FLAG_FOR_SANGHA_CG_13 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0033\U000e007f" + FLAG_FOR_KOUILOU_CG_5 = "\U0001f3f4\U000e0063\U000e0067\U000e0035\U000e007f" + FLAG_FOR_LIKOUALA_CG_7 = "\U0001f3f4\U000e0063\U000e0067\U000e0037\U000e007f" + FLAG_FOR_BANGUI_CF_BGF = "\U0001f3f4\U000e0063\U000e0066\U000e0062\U000e0067\U000e0066\U000e007f" + FLAG_FOR_SANGHA_MBAERE_CF_SE = "\U0001f3f4\U000e0063\U000e0066\U000e0073\U000e0065\U000e007f" + FLAG_FOR_NIDWALDEN_CH_NW = "\U0001f3f4\U000e0063\U000e0068\U000e006e\U000e0077\U000e007f" + FLAG_FOR_ST_GALLEN_CH_SG = "\U0001f3f4\U000e0063\U000e0068\U000e0073\U000e0067\U000e007f" + FLAG_FOR_LEKOUMOU_CG_2 = "\U0001f3f4\U000e0063\U000e0067\U000e0032\U000e007f" + FLAG_FOR_MONO_BJ_MO = "\U0001f3f4\U000e0062\U000e006a\U000e006d\U000e006f\U000e007f" + FLAG_FOR_APPENZELL_INNERRHODEN_CH_AI = "\U0001f3f4\U000e0063\U000e0068\U000e0061\U000e0069\U000e007f" FLAG_FOR_AARGAU_CH_AG = "\U0001f3f4\U000e0063\U000e0068\U000e0061\U000e0067\U000e007f" - FLAG_FOR_LOS_LAGOS_CL_LL = "\U0001f3f4\U000e0063\U000e006c\U000e006c\U000e006c\U000e007f" - FLAG_FOR_WOROBA_CI_WR = "\U0001f3f4\U000e0063\U000e0069\U000e0077\U000e0072\U000e007f" + FLAG_FOR_CUVETTE_OUEST_CG_15 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0035\U000e007f" + FLAG_FOR_BRAZZAVILLE_CG_BZV = "\U0001f3f4\U000e0063\U000e0067\U000e0062\U000e007a\U000e0076\U000e007f" + FLAG_FOR_CUVETTE_CG_8 = "\U0001f3f4\U000e0063\U000e0067\U000e0038\U000e007f" FLAG_FOR_LOS_RIOS_CL_LR = "\U0001f3f4\U000e0063\U000e006c\U000e006c\U000e0072\U000e007f" - FLAG_FOR_MAULE_CL_ML = "\U0001f3f4\U000e0063\U000e006c\U000e006d\U000e006c\U000e007f" - FLAG_FOR_SAVANES_CI_SV = "\U0001f3f4\U000e0063\U000e0069\U000e0073\U000e0076\U000e007f" - FLAG_FOR_NORTH_CM_NO = "\U0001f3f4\U000e0063\U000e006d\U000e006e\U000e006f\U000e007f" - FLAG_FOR_MAGALLANES_REGION_CL_MA = "\U0001f3f4\U000e0063\U000e006c\U000e006d\U000e0061\U000e007f" - FLAG_FOR_DENGUELE_CI_DN = "\U0001f3f4\U000e0063\U000e0069\U000e0064\U000e006e\U000e007f" - FLAG_FOR_CENTRE_CM_CE = "\U0001f3f4\U000e0063\U000e006d\U000e0063\U000e0065\U000e007f" - FLAG_FOR_COMOE_CI_CM = "\U0001f3f4\U000e0063\U000e0069\U000e0063\U000e006d\U000e007f" - FLAG_FOR_ATACAMA_CL_AT = "\U0001f3f4\U000e0063\U000e006c\U000e0061\U000e0074\U000e007f" - FLAG_FOR_CENTRAL_ABACO_BS_CO = "\U0001f3f4\U000e0062\U000e0073\U000e0063\U000e006f\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc" - FLAG_FOR_SOUTHWEST_CM_SW = "\U0001f3f4\U000e0063\U000e006d\U000e0073\U000e0077\U000e007f" - FLAG_FOR_COQUIMBO_CL_CO = "\U0001f3f4\U000e0063\U000e006c\U000e0063\U000e006f\U000e007f" - FLAG_FOR_LITTORAL_CM_LT = "\U0001f3f4\U000e0063\U000e006d\U000e006c\U000e0074\U000e007f" + FLAG_FOR_MONTAGNES_CI_MG = "\U0001f3f4\U000e0063\U000e0069\U000e006d\U000e0067\U000e007f" FLAG_FOR_BAS_SASSANDRA_CI_BS = "\U0001f3f4\U000e0063\U000e0069\U000e0062\U000e0073\U000e007f" + FLAG_FOR_BASEL_STADT_CH_BS = "\U0001f3f4\U000e0063\U000e0068\U000e0062\U000e0073\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_LITTORAL_CM_LT = "\U0001f3f4\U000e0063\U000e006d\U000e006c\U000e0074\U000e007f" + FLAG_FOR_NORTHWEST_CM_NW = "\U0001f3f4\U000e0063\U000e006d\U000e006e\U000e0077\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_FRIBOURG_CH_FR = "\U0001f3f4\U000e0063\U000e0068\U000e0066\U000e0072\U000e007f" + FLAG_FOR_ATACAMA_CL_AT = "\U0001f3f4\U000e0063\U000e006c\U000e0061\U000e0074\U000e007f" + FLAG_FOR_SAVANES_CI_SV = "\U0001f3f4\U000e0063\U000e0069\U000e0073\U000e0076\U000e007f" + FLAG_FOR_COQUIMBO_CL_CO = "\U0001f3f4\U000e0063\U000e006c\U000e0063\U000e006f\U000e007f" + FLAG_FOR_ADAMAWA_CM_AD = "\U0001f3f4\U000e0063\U000e006d\U000e0061\U000e0064\U000e007f" + FLAG_FOR_AL_MADINAH_SA_03 = "\U0001f3f4\U000e0073\U000e0061\U000e0030\U000e0033\U000e007f" + FLAG_FOR_SOUTHWEST_CM_SW = "\U0001f3f4\U000e0063\U000e006d\U000e0073\U000e0077\U000e007f" + FLAG_FOR_NORTH_CM_NO = "\U0001f3f4\U000e0063\U000e006d\U000e006e\U000e006f\U000e007f" + COUPLE_WITH_HEART_MAN_WOMAN = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f469" + FLAG_FOR_DENGUELE_CI_DN = "\U0001f3f4\U000e0063\U000e0069\U000e0064\U000e006e\U000e007f" + FLAG_FOR_MAGALLANES_REGION_CL_MA = "\U0001f3f4\U000e0063\U000e006c\U000e006d\U000e0061\U000e007f" + FLAG_FOR_HAUT_KATANGA_CD_HK = "\U0001f3f4\U000e0063\U000e0064\U000e0068\U000e006b\U000e007f" + FLAG_FOR_GOH_DJIBOUA_CI_GD = "\U0001f3f4\U000e0063\U000e0069\U000e0067\U000e0064\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_WOROBA_CI_WR = "\U0001f3f4\U000e0063\U000e0069\U000e0077\U000e0072\U000e007f" + FLAG_FOR_COMOE_CI_CM = "\U0001f3f4\U000e0063\U000e0069\U000e0063\U000e006d\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc" FLAG_FOR_YAMOUSSOUKRO_CI_YM = "\U0001f3f4\U000e0063\U000e0069\U000e0079\U000e006d\U000e007f" FLAG_FOR_LACS_CI_LC = "\U0001f3f4\U000e0063\U000e0069\U000e006c\U000e0063\U000e007f" - FLAG_FOR_NORTHWEST_CM_NW = "\U0001f3f4\U000e0063\U000e006d\U000e006e\U000e0077\U000e007f" FLAG_FOR_TARAPACA_CL_TA = "\U0001f3f4\U000e0063\U000e006c\U000e0074\U000e0061\U000e007f" - FLAG_FOR_WEST_CM_OU = "\U0001f3f4\U000e0063\U000e006d\U000e006f\U000e0075\U000e007f" - FLAG_FOR_SANTIAGO_METROPOLITAN_CL_RM = "\U0001f3f4\U000e0063\U000e006c\U000e0072\U000e006d\U000e007f" - FLAG_FOR_ADAMAWA_CM_AD = "\U0001f3f4\U000e0063\U000e006d\U000e0061\U000e0064\U000e007f" - FLAG_FOR_PRINCE_EDWARD_ISLAND_CA_PE = "\U0001f3f4\U000e0063\U000e0061\U000e0070\U000e0065\U000e007f" - FLAG_FOR_MONTAGNES_CI_MG = "\U0001f3f4\U000e0063\U000e0069\U000e006d\U000e0067\U000e007f" - FLAG_FOR_BASEL_STADT_CH_BS = "\U0001f3f4\U000e0063\U000e0068\U000e0062\U000e0073\U000e007f" - FLAG_FOR_GOH_DJIBOUA_CI_GD = "\U0001f3f4\U000e0063\U000e0069\U000e0067\U000e0064\U000e007f" - FLAG_FOR_AYSEN_CL_AI = "\U0001f3f4\U000e0063\U000e006c\U000e0061\U000e0069\U000e007f" - FLAG_FOR_JIANGXI_CN_36 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0036\U000e007f" - FLAG_FOR_CAQUETA_CO_CAQ = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0061\U000e0071\U000e007f" - FLAG_FOR_XINJIANG_CN_65 = "\U0001f3f4\U000e0063\U000e006e\U000e0036\U000e0035\U000e007f" - FLAG_FOR_NEW_BRUNSWICK_CA_NB = "\U0001f3f4\U000e0063\U000e0061\U000e006e\U000e0062\U000e007f" + FLAG_FOR_PANEVEZYS_COUNTY_LT_PN = "\U0001f3f4\U000e006c\U000e0074\U000e0070\U000e006e\U000e007f" + FLAG_FOR_CENTRE_CM_CE = "\U0001f3f4\U000e0063\U000e006d\U000e0063\U000e0065\U000e007f" FLAG_FOR_GUANGXI_CN_45 = "\U0001f3f4\U000e0063\U000e006e\U000e0034\U000e0035\U000e007f" - FLAG_FOR_HUBEI_CN_42 = "\U0001f3f4\U000e0063\U000e006e\U000e0034\U000e0032\U000e007f" FLAG_FOR_HENAN_CN_41 = "\U0001f3f4\U000e0063\U000e006e\U000e0034\U000e0031\U000e007f" - FLAG_FOR_RUSE_BG_18 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0038\U000e007f" - FLAG_FOR_CALDAS_CO_CAL = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0061\U000e006c\U000e007f" - FLAG_FOR_FUJIAN_CN_35 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0035\U000e007f" - FLAG_FOR_BOYACA_CO_BOY = "\U0001f3f4\U000e0063\U000e006f\U000e0062\U000e006f\U000e0079\U000e007f" - FLAG_FOR_QINGHAI_CN_63 = "\U0001f3f4\U000e0063\U000e006e\U000e0036\U000e0033\U000e007f" FLAG_FOR_JIANGSU_CN_32 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0032\U000e007f" - FLAG_FOR_HAUTE_KOTTO_CF_HK = "\U0001f3f4\U000e0063\U000e0066\U000e0068\U000e006b\U000e007f" - FLAG_FOR_HUNAN_CN_43 = "\U0001f3f4\U000e0063\U000e006e\U000e0034\U000e0033\U000e007f" - FLAG_FOR_CHONGQING_CN_50 = "\U0001f3f4\U000e0063\U000e006e\U000e0035\U000e0030\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" + BLACK_CHESS_KNIGHT = "\u265e" + WHITE_HARD_SHELL_FLOPPY_DISK = "\U0001f5ab" + FLAG_FOR_BOYACA_CO_BOY = "\U0001f3f4\U000e0063\U000e006f\U000e0062\U000e006f\U000e0079\U000e007f" + FLAG_FOR_FUJIAN_CN_35 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0035\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_CAQUETA_CO_CAQ = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0061\U000e0071\U000e007f" + FLAG_FOR_JIANGXI_CN_36 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0036\U000e007f" + FLAG_FOR_OMBELLA_M_POKO_CF_MP = "\U0001f3f4\U000e0063\U000e0066\U000e006d\U000e0070\U000e007f" + FLAG_FOR_RUSE_BG_18 = "\U0001f3f4\U000e0062\U000e0067\U000e0031\U000e0038\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_LIBERTADOR_GENERAL_BERNARDO_O_HIGGINS_CL_LI = "\U0001f3f4\U000e0063\U000e006c\U000e006c\U000e0069\U000e007f" FLAG_FOR_HAINAN_CN_46 = "\U0001f3f4\U000e0063\U000e006e\U000e0034\U000e0036\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_BATMAN_TR_72 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0032\U000e007f" + FLAG_FOR_CALDAS_CO_CAL = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0061\U000e006c\U000e007f" + FLAG_FOR_QINGHAI_CN_63 = "\U0001f3f4\U000e0063\U000e006e\U000e0036\U000e0033\U000e007f" FLAG_FOR_ARAUCA_CO_ARA = "\U0001f3f4\U000e0063\U000e006f\U000e0061\U000e0072\U000e0061\U000e007f" - FLAG_FOR_SAN_JOSE_CR_SJ = "\U0001f3f4\U000e0063\U000e0072\U000e0073\U000e006a\U000e007f" - FLAG_FOR_GUAINIA_CO_GUA = "\U0001f3f4\U000e0063\U000e006f\U000e0067\U000e0075\U000e0061\U000e007f" - FLAG_FOR_PUTUMAYO_CO_PUT = "\U0001f3f4\U000e0063\U000e006f\U000e0070\U000e0075\U000e0074\U000e007f" - FLAG_FOR_PUNTARENAS_CR_P = "\U0001f3f4\U000e0063\U000e0072\U000e0070\U000e007f" - FLAG_FOR_SANTANDER_CO_SAN = "\U0001f3f4\U000e0063\U000e006f\U000e0073\U000e0061\U000e006e\U000e007f" - FLAG_FOR_GUANACASTE_CR_G = "\U0001f3f4\U000e0063\U000e0072\U000e0067\U000e007f" - FLAG_FOR_RISARALDA_CO_RIS = "\U0001f3f4\U000e0063\U000e006f\U000e0072\U000e0069\U000e0073\U000e007f" - FLAG_FOR_CUNDINAMARCA_CO_CUN = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0075\U000e006e\U000e007f" - FLAG_FOR_CORDOBA_CO_COR = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e006f\U000e0072\U000e007f" - FLAG_FOR_VALLE_DEL_CAUCA_CO_VAC = "\U0001f3f4\U000e0063\U000e006f\U000e0076\U000e0061\U000e0063\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd" - FLAG_FOR_CAUCA_CO_CAU = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0061\U000e0075\U000e007f" - FLAG_FOR_VAUPES_CO_VAU = "\U0001f3f4\U000e0063\U000e006f\U000e0076\U000e0061\U000e0075\U000e007f" - FAMILY_WOMAN_BOY_GIRL = "\U0001f469\u200d\U0001f466\u200d\U0001f467" - FLAG_FOR_NORTE_DE_SANTANDER_CO_NSA = "\U0001f3f4\U000e0063\U000e006f\U000e006e\U000e0073\U000e0061\U000e007f" - FLAG_FOR_CAYO_BZ_CY = "\U0001f3f4\U000e0062\U000e007a\U000e0063\U000e0079\U000e007f" - FLAG_FOR_LIMON_CR_L = "\U0001f3f4\U000e0063\U000e0072\U000e006c\U000e007f" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" - FLAG_FOR_SANCTI_SPIRITUS_CU_07 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0037\U000e007f" - FLAG_FOR_MATANZAS_CU_04 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0034\U000e007f" - FLAG_FOR_CAMAGUEY_CU_09 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0039\U000e007f" - FLAG_FOR_HUILA_CO_HUI = "\U0001f3f4\U000e0063\U000e006f\U000e0068\U000e0075\U000e0069\U000e007f" + COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" FLAG_FOR_GUAVIARE_CO_GUV = "\U0001f3f4\U000e0063\U000e006f\U000e0067\U000e0075\U000e0076\U000e007f" - FLAG_FOR_PINAR_DEL_RIO_CU_01 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0031\U000e007f" - FLAG_FOR_MAGDALENA_CO_MAG = "\U0001f3f4\U000e0063\U000e006f\U000e006d\U000e0061\U000e0067\U000e007f" + FLAG_FOR_VAUPES_CO_VAU = "\U0001f3f4\U000e0063\U000e006f\U000e0076\U000e0061\U000e0075\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" FLAG_FOR_CARTAGO_CR_C = "\U0001f3f4\U000e0063\U000e0072\U000e0063\U000e007f" - FLAG_FOR_CIENFUEGOS_CU_06 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0036\U000e007f" FLAG_FOR_LA_GUAJIRA_CO_LAG = "\U0001f3f4\U000e0063\U000e006f\U000e006c\U000e0061\U000e0067\U000e007f" - FLAG_FOR_VILLA_CLARA_CU_05 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0035\U000e007f" - FLAG_FOR_GUANTANAMO_CU_14 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0034\U000e007f" + FLAG_FOR_MATANZAS_CU_04 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0034\U000e007f" + FLAG_FOR_ARIANA_TN_12 = "\U0001f3f4\U000e0074\U000e006e\U000e0031\U000e0032\U000e007f" + FLAG_FOR_LIMON_CR_L = "\U0001f3f4\U000e0063\U000e0072\U000e006c\U000e007f" + FLAG_FOR_FEDERALLY_ADMINISTERED_TRIBAL_AREAS_PK_TA = "\U0001f3f4\U000e0070\U000e006b\U000e0074\U000e0061\U000e007f" + FLAG_FOR_CIENFUEGOS_CU_06 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0036\U000e007f" + FLAG_FOR_CORDOBA_CO_COR = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e006f\U000e0072\U000e007f" + FLAG_FOR_NORTE_DE_SANTANDER_CO_NSA = "\U0001f3f4\U000e0063\U000e006f\U000e006e\U000e0073\U000e0061\U000e007f" + FLAG_FOR_HUBEI_CN_42 = "\U0001f3f4\U000e0063\U000e006e\U000e0034\U000e0032\U000e007f" + FLAG_FOR_PUNTARENAS_CR_P = "\U0001f3f4\U000e0063\U000e0072\U000e0070\U000e007f" + FLAG_FOR_CAMAGUEY_CU_09 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0039\U000e007f" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + FLAG_FOR_SAN_SALVADOR_BS_SS = "\U0001f3f4\U000e0062\U000e0073\U000e0073\U000e0073\U000e007f" + FLAG_FOR_LIMASSOL_CY_02 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0032\U000e007f" + FLAG_FOR_TSIRANG_BT_21 = "\U0001f3f4\U000e0062\U000e0074\U000e0032\U000e0031\U000e007f" FLAG_FOR_MORAVSKOSLEZSKY_KRAJ_CZ_80 = "\U0001f3f4\U000e0063\U000e007a\U000e0038\U000e0030\U000e007f" - FLAG_FOR_NICOSIA_CY_01 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0031\U000e007f" - KISS_WOMAN_DARK_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3fd" - FLAG_FOR_MECKLENBURG_VORPOMMERN_DE_MV = "\U0001f3f4\U000e0064\U000e0065\U000e006d\U000e0076\U000e007f" - FLAG_FOR_HESSE_DE_HE = "\U0001f3f4\U000e0064\U000e0065\U000e0068\U000e0065\U000e007f" - FLAG_FOR_STREDOCESKY_KRAJ_CZ_20 = "\U0001f3f4\U000e0063\U000e007a\U000e0032\U000e0030\U000e007f" - FLAG_FOR_BARLAVENTO_ISLANDS_CV_B = "\U0001f3f4\U000e0063\U000e0076\U000e0062\U000e007f" - FLAG_FOR_KRALOVEHRADECKY_KRAJ_CZ_52 = "\U0001f3f4\U000e0063\U000e007a\U000e0035\U000e0032\U000e007f" - FLAG_FOR_KARLOVARSKY_KRAJ_CZ_41 = "\U0001f3f4\U000e0063\U000e007a\U000e0034\U000e0031\U000e007f" - FLAG_FOR_ARTEMISA_CU_15 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0035\U000e007f" - FLAG_FOR_GUANGDONG_CN_44 = "\U0001f3f4\U000e0063\U000e006e\U000e0034\U000e0034\U000e007f" - FLAG_FOR_LIBERECKY_KRAJ_CZ_51 = "\U0001f3f4\U000e0063\U000e007a\U000e0035\U000e0031\U000e007f" + FLAG_FOR_SLIVEN_BG_20 = "\U0001f3f4\U000e0062\U000e0067\U000e0032\U000e0030\U000e007f" + FLAG_FOR_BURGAS_BG_02 = "\U0001f3f4\U000e0062\U000e0067\U000e0030\U000e0032\U000e007f" + FLAG_FOR_SOTAVENTO_ISLANDS_CV_S = "\U0001f3f4\U000e0063\U000e0076\U000e0073\U000e007f" + FLAG_FOR_SALZBURG_AT_5 = "\U0001f3f4\U000e0061\U000e0074\U000e0035\U000e007f" + FLAG_FOR_KRAJ_VYSOCINA_CZ_63 = "\U0001f3f4\U000e0063\U000e007a\U000e0036\U000e0033\U000e007f" FLAG_FOR_HOLGUIN_CU_11 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0031\U000e007f" KISS_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469" - FLAG_FOR_OLOMOUCKY_KRAJ_CZ_71 = "\U0001f3f4\U000e0063\U000e007a\U000e0037\U000e0031\U000e007f" - FLAG_FOR_KRAJ_VYSOCINA_CZ_63 = "\U0001f3f4\U000e0063\U000e007a\U000e0036\U000e0033\U000e007f" - FLAG_FOR_KELANTAN_MY_03 = "\U0001f3f4\U000e006d\U000e0079\U000e0030\U000e0033\U000e007f" - FLAG_FOR_LIMASSOL_CY_02 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0032\U000e007f" - FLAG_FOR_SOTAVENTO_ISLANDS_CV_S = "\U0001f3f4\U000e0063\U000e0076\U000e0073\U000e007f" + FLAG_FOR_PARANA_BR_PR = "\U0001f3f4\U000e0062\U000e0072\U000e0070\U000e0072\U000e007f" + FLAG_FOR_GUANTANAMO_CU_14 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0034\U000e007f" + FLAG_FOR_XINJIANG_CN_65 = "\U0001f3f4\U000e0063\U000e006e\U000e0036\U000e0035\U000e007f" + FLAG_FOR_KRALOVEHRADECKY_KRAJ_CZ_52 = "\U0001f3f4\U000e0063\U000e007a\U000e0035\U000e0032\U000e007f" FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f476\U0001f3fb" + FLAG_FOR_KARLOVARSKY_KRAJ_CZ_41 = "\U0001f3f4\U000e0063\U000e007a\U000e0034\U000e0031\U000e007f" + FLAG_FOR_AMAPA_BR_AP = "\U0001f3f4\U000e0062\U000e0072\U000e0061\U000e0070\U000e007f" + FLAG_FOR_GASA_BT_GA = "\U0001f3f4\U000e0062\U000e0074\U000e0067\U000e0061\U000e007f" + FLAG_FOR_BARLAVENTO_ISLANDS_CV_B = "\U0001f3f4\U000e0063\U000e0076\U000e0062\U000e007f" FLAG_FOR_MAYABEQUE_CU_16 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0036\U000e007f" - FLAG_FOR_GANSU_CN_62 = "\U0001f3f4\U000e0063\U000e006e\U000e0036\U000e0032\U000e007f" - FLAG_FOR_PLZENSKY_KRAJ_CZ_32 = "\U0001f3f4\U000e0063\U000e007a\U000e0033\U000e0032\U000e007f" - FLAG_FOR_SAINT_ANDREW_DM_02 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0032\U000e007f" - FLAG_FOR_CIBAO_NORDESTE_DO_33 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0033\U000e007f" - FLAG_FOR_CHLEF_DZ_02 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0032\U000e007f" - FLAG_FOR_SAINT_PAUL_DM_10 = "\U0001f3f4\U000e0064\U000e006d\U000e0031\U000e0030\U000e007f" - FLAG_FOR_MOSCOW_PROVINCE_RU_MOS = "\U0001f3f4\U000e0072\U000e0075\U000e006d\U000e006f\U000e0073\U000e007f" - FLAG_FOR_SHANXI_CN_14 = "\U0001f3f4\U000e0063\U000e006e\U000e0031\U000e0034\U000e007f" - FLAG_FOR_ENRIQUILLO_DO_38 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0038\U000e007f" - FLAG_FOR_BONAIRE_BQ_BO = "\U0001f3f4\U000e0062\U000e0071\U000e0062\U000e006f\U000e007f" + KISS_MAN_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" + FLAG_FOR_LIBERECKY_KRAJ_CZ_51 = "\U0001f3f4\U000e0063\U000e007a\U000e0035\U000e0031\U000e007f" FLAG_FOR_CIBAO_NOROESTE_DO_34 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0034\U000e007f" - FLAG_FOR_ALI_SABIEH_DJ_AS = "\U0001f3f4\U000e0064\U000e006a\U000e0061\U000e0073\U000e007f" + FLAG_FOR_RISARALDA_CO_RIS = "\U0001f3f4\U000e0063\U000e006f\U000e0072\U000e0069\U000e0073\U000e007f" + FLAG_FOR_HOPE_TOWN_BS_HT = "\U0001f3f4\U000e0062\U000e0073\U000e0068\U000e0074\U000e007f" + FLAG_FOR_BRITISH_COLUMBIA_CA_BC = "\U0001f3f4\U000e0063\U000e0061\U000e0062\U000e0063\U000e007f" + FLAG_FOR_NICOSIA_CY_01 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0031\U000e007f" + FLAG_FOR_SHANXI_CN_14 = "\U0001f3f4\U000e0063\U000e006e\U000e0031\U000e0034\U000e007f" FLAG_FOR_SAXONY_ANHALT_DE_ST = "\U0001f3f4\U000e0064\U000e0065\U000e0073\U000e0074\U000e007f" - FLAG_FOR_SAINT_GEORGE_DM_04 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0034\U000e007f" - FLAG_FOR_CIBAO_SUR_DO_36 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0036\U000e007f" - FLAG_FOR_SAINT_MARK_DM_08 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0038\U000e007f" - FLAG_FOR_YUMA_DO_42 = "\U0001f3f4\U000e0064\U000e006f\U000e0034\U000e0032\U000e007f" - FLAG_FOR_OUHAM_PENDE_CF_OP = "\U0001f3f4\U000e0063\U000e0066\U000e006f\U000e0070\U000e007f" - FLAG_FOR_CAPITAL_REGION_DK_84 = "\U0001f3f4\U000e0064\U000e006b\U000e0038\U000e0034\U000e007f" - FLAG_FOR_OBOCK_DJ_OB = "\U0001f3f4\U000e0064\U000e006a\U000e006f\U000e0062\U000e007f" - FLAG_FOR_SAINT_LUKE_DM_07 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0037\U000e007f" - FLAG_FOR_HIGUAMO_DO_39 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0039\U000e007f" - FLAG_FOR_SHANDONG_CN_37 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0037\U000e007f" - FLAG_FOR_ALAJUELA_CR_A = "\U0001f3f4\U000e0063\U000e0072\U000e0061\U000e007f" - FLAG_FOR_VALDESIA_DO_41 = "\U0001f3f4\U000e0064\U000e006f\U000e0034\U000e0031\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" FLAG_FOR_TADJOURAH_DJ_TA = "\U0001f3f4\U000e0064\U000e006a\U000e0074\U000e0061\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_MILA_DZ_43 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0033\U000e007f" - FLAG_FOR_SAINT_DAVID_DM_03 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0033\U000e007f" + FLAG_FOR_CAPITAL_REGION_DK_84 = "\U0001f3f4\U000e0064\U000e006b\U000e0038\U000e0034\U000e007f" + FLAG_FOR_HIGUAMO_DO_39 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0039\U000e007f" + FLAG_FOR_CIBAO_NORDESTE_DO_33 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0033\U000e007f" + FLAG_FOR_CIBAO_SUR_DO_36 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0036\U000e007f" + COUPLE_WITH_HEART_MAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + FLAG_FOR_POHNPEI_FM_PNI = "\U0001f3f4\U000e0066\U000e006d\U000e0070\U000e006e\U000e0069\U000e007f" + FLAG_FOR_VALDESIA_DO_41 = "\U0001f3f4\U000e0064\U000e006f\U000e0034\U000e0031\U000e007f" + FLAG_FOR_YOZGAT_TR_66 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0036\U000e007f" + FLAG_FOR_CAUCA_CO_CAU = "\U0001f3f4\U000e0063\U000e006f\U000e0063\U000e0061\U000e0075\U000e007f" + FLAG_FOR_OLOMOUCKY_KRAJ_CZ_71 = "\U0001f3f4\U000e0063\U000e007a\U000e0037\U000e0031\U000e007f" + FLAG_FOR_SAINT_MARK_DM_08 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0038\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" + FAMILY_WOMAN_LIGHT_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_KHENCHELA_DZ_40 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0030\U000e007f" + FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f467\U0001f3fe" FLAG_FOR_TIZI_OUZOU_DZ_15 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0035\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_MOSTAGANEM_DZ_27 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0037\U000e007f" FLAG_FOR_OUARGLA_DZ_30 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0030\U000e007f" - FLAG_FOR_SAARLAND_DE_SL = "\U0001f3f4\U000e0064\U000e0065\U000e0073\U000e006c\U000e007f" - FLAG_FOR_TAMANGHASSET_DZ_11 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0031\U000e007f" + FLAG_FOR_BOUMERDES_DZ_35 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0035\U000e007f" FLAG_FOR_TIPASA_DZ_42 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0032\U000e007f" - FLAG_FOR_TEBESSA_DZ_12 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0032\U000e007f" - FLAG_FOR_ANNABA_DZ_23 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0033\U000e007f" - FLAG_FOR_BATNA_DZ_05 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0035\U000e007f" + FLAG_FOR_BISKRA_DZ_07 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0037\U000e007f" FLAG_FOR_MEDEA_DZ_26 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0036\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_SOUK_AHRAS_DZ_41 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0031\U000e007f" + FLAG_FOR_ANNABA_DZ_23 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0033\U000e007f" + FLAG_FOR_WESTERN_HIGHLANDS_PG_WHM = "\U0001f3f4\U000e0070\U000e0067\U000e0077\U000e0068\U000e006d\U000e007f" + FLAG_FOR_TINDOUF_DZ_37 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0037\U000e007f" FLAG_FOR_DJELFA_DZ_17 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0037\U000e007f" - FLAG_FOR_EL_BAYADH_DZ_32 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0032\U000e007f" - FLAG_FOR_SAINT_PETER_DM_11 = "\U0001f3f4\U000e0064\U000e006d\U000e0031\U000e0031\U000e007f" + FLAG_FOR_MILA_DZ_43 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0033\U000e007f" + FLAG_FOR_BATNA_DZ_05 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0035\U000e007f" FLAG_FOR_TISSEMSILT_DZ_38 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0038\U000e007f" - FLAG_FOR_OUM_EL_BOUAGHI_DZ_04 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0034\U000e007f" + FLAG_FOR_EL_BAYADH_DZ_32 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0032\U000e007f" + FLAG_FOR_HUILA_CO_HUI = "\U0001f3f4\U000e0063\U000e006f\U000e0068\U000e0075\U000e0069\U000e007f" + FLAG_FOR_ENRIQUILLO_DO_38 = "\U0001f3f4\U000e0064\U000e006f\U000e0033\U000e0038\U000e007f" + FLAG_FOR_SUDUR_PASHCHIMANCHAL_NP_5 = "\U0001f3f4\U000e006e\U000e0070\U000e0035\U000e007f" FLAG_FOR_BEJAIA_DZ_06 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0036\U000e007f" FLAG_FOR_BOUIRA_DZ_10 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0030\U000e007f" FLAG_FOR_ILLIZI_DZ_33 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0033\U000e007f" - FLAG_FOR_EL_TARF_DZ_36 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0036\U000e007f" - FLAG_FOR_GUELMA_DZ_24 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0034\U000e007f" - FLAG_FOR_BOUMERDES_DZ_35 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0035\U000e007f" - FLAG_FOR_TINDOUF_DZ_37 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0037\U000e007f" - FLAG_FOR_KHENCHELA_DZ_40 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0030\U000e007f" - FLAG_FOR_SOUK_AHRAS_DZ_41 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0031\U000e007f" - FLAG_FOR_MOSTAGANEM_DZ_27 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0037\U000e007f" - FLAG_FOR_SAIDA_DZ_20 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0030\U000e007f" - FLAG_FOR_BISKRA_DZ_07 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0037\U000e007f" - FLAG_FOR_RELIZANE_DZ_48 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0038\U000e007f" - FLAG_FOR_GHARDAIA_DZ_47 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0037\U000e007f" - FLAG_FOR_SAARE_EE_74 = "\U0001f3f4\U000e0065\U000e0065\U000e0037\U000e0034\U000e007f" - FLAG_FOR_AZUAY_EC_A = "\U0001f3f4\U000e0065\U000e0063\U000e0061\U000e007f" - FLAG_FOR_CARCHI_EC_C = "\U0001f3f4\U000e0065\U000e0063\U000e0063\U000e007f" - FLAG_FOR_PICHINCHA_EC_P = "\U0001f3f4\U000e0065\U000e0063\U000e0070\U000e007f" - FLAG_FOR_LOJA_EC_L = "\U0001f3f4\U000e0065\U000e0063\U000e006c\U000e007f" + FLAG_FOR_PLATEAUX_CG_14 = "\U0001f3f4\U000e0063\U000e0067\U000e0031\U000e0034\U000e007f" + FLAG_FOR_SAINT_DAVID_DM_03 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0033\U000e007f" + FLAG_FOR_TAMANGHASSET_DZ_11 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0031\U000e007f" FLAG_FOR_MORONA_SANTIAGO_EC_S = "\U0001f3f4\U000e0065\U000e0063\U000e0073\U000e007f" - FLAG_FOR_RAPLA_EE_70 = "\U0001f3f4\U000e0065\U000e0065\U000e0037\U000e0030\U000e007f" - FLAG_FOR_IMBABURA_EC_I = "\U0001f3f4\U000e0065\U000e0063\U000e0069\U000e007f" - FLAG_FOR_LAANE_EE_57 = "\U0001f3f4\U000e0065\U000e0065\U000e0035\U000e0037\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f466\U0001f3fc" - FLAG_FOR_BOLIVAR_EC_B = "\U0001f3f4\U000e0065\U000e0063\U000e0062\U000e007f" - FLAG_FOR_TARTU_EE_78 = "\U0001f3f4\U000e0065\U000e0065\U000e0037\U000e0038\U000e007f" - FLAG_FOR_PARNU_EE_67 = "\U0001f3f4\U000e0065\U000e0065\U000e0036\U000e0037\U000e007f" - FLAG_FOR_LOS_RIOS_EC_R = "\U0001f3f4\U000e0065\U000e0063\U000e0072\U000e007f" - FLAG_FOR_EL_ORO_EC_O = "\U0001f3f4\U000e0065\U000e0063\U000e006f\U000e007f" - FLAG_FOR_GALAPAGOS_EC_W = "\U0001f3f4\U000e0065\U000e0063\U000e0077\U000e007f" - FLAG_FOR_AIN_TEMOUCHENT_DZ_46 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0036\U000e007f" - FLAG_FOR_SUCUMBIOS_EC_U = "\U0001f3f4\U000e0065\U000e0063\U000e0075\U000e007f" - FLAG_FOR_AIN_DEFLA_DZ_44 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0034\U000e007f" - FLAG_FOR_POLVA_EE_65 = "\U0001f3f4\U000e0065\U000e0065\U000e0036\U000e0035\U000e007f" - FLAG_FOR_PAPHOS_CY_05 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0035\U000e007f" - FLAG_FOR_PASTAZA_EC_Y = "\U0001f3f4\U000e0065\U000e0063\U000e0079\U000e007f" - FLAG_FOR_JOGEVA_EE_49 = "\U0001f3f4\U000e0065\U000e0065\U000e0034\U000e0039\U000e007f" FLAG_FOR_VALGA_EE_82 = "\U0001f3f4\U000e0065\U000e0065\U000e0038\U000e0032\U000e007f" - FLAG_FOR_ORELLANA_EC_D = "\U0001f3f4\U000e0065\U000e0063\U000e0064\U000e007f" - FLAG_FOR_CHIMBORAZO_EC_H = "\U0001f3f4\U000e0065\U000e0063\U000e0068\U000e007f" - FLAG_FOR_JARVA_EE_51 = "\U0001f3f4\U000e0065\U000e0065\U000e0035\U000e0031\U000e007f" + FLAG_FOR_RELIZANE_DZ_48 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0038\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_LOJA_EC_L = "\U0001f3f4\U000e0065\U000e0063\U000e006c\U000e007f" + FLAG_FOR_GHARDAIA_DZ_47 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0037\U000e007f" + FLAG_FOR_PASTAZA_EC_Y = "\U0001f3f4\U000e0065\U000e0063\U000e0079\U000e007f" + FLAG_FOR_AIN_TEMOUCHENT_DZ_46 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0036\U000e007f" + FLAG_FOR_LOS_RIOS_EC_R = "\U0001f3f4\U000e0065\U000e0063\U000e0072\U000e007f" + FLAG_FOR_LAANE_EE_57 = "\U0001f3f4\U000e0065\U000e0065\U000e0035\U000e0037\U000e007f" FAMILY_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" - FLAG_FOR_SANTA_ELENA_EC_SE = "\U0001f3f4\U000e0065\U000e0063\U000e0073\U000e0065\U000e007f" - FLAG_FOR_NAAMA_DZ_45 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0035\U000e007f" - FLAG_FOR_AL_SHARQIA_EG_SHR = "\U0001f3f4\U000e0065\U000e0067\U000e0073\U000e0068\U000e0072\U000e007f" - FLAG_FOR_VILJANDI_EE_84 = "\U0001f3f4\U000e0065\U000e0065\U000e0038\U000e0034\U000e007f" - FLAG_FOR_ISMAILIA_EG_IS = "\U0001f3f4\U000e0065\U000e0067\U000e0069\U000e0073\U000e007f" - FLAG_FOR_DAKAHLIA_EG_DK = "\U0001f3f4\U000e0065\U000e0067\U000e0064\U000e006b\U000e007f" - FLAG_FOR_DAMIETTA_EG_DT = "\U0001f3f4\U000e0065\U000e0067\U000e0064\U000e0074\U000e007f" - FLAG_FOR_ARAGON_ES_AR = "\U0001f3f4\U000e0065\U000e0073\U000e0061\U000e0072\U000e007f" - FLAG_FOR_VORU_EE_86 = "\U0001f3f4\U000e0065\U000e0065\U000e0038\U000e0036\U000e007f" - FLAG_FOR_ALEXANDRIA_EG_ALX = "\U0001f3f4\U000e0065\U000e0067\U000e0061\U000e006c\U000e0078\U000e007f" - FLAG_FOR_ASYUT_EG_AST = "\U0001f3f4\U000e0065\U000e0067\U000e0061\U000e0073\U000e0074\U000e007f" - FLAG_FOR_QALYUBIA_EG_KB = "\U0001f3f4\U000e0065\U000e0067\U000e006b\U000e0062\U000e007f" - FLAG_FOR_ASWAN_EG_ASN = "\U0001f3f4\U000e0065\U000e0067\U000e0061\U000e0073\U000e006e\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe" - FAMILY_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" - FLAG_FOR_MONUFIA_EG_MNF = "\U0001f3f4\U000e0065\U000e0067\U000e006d\U000e006e\U000e0066\U000e007f" - FLAG_FOR_BEHEIRA_EG_BH = "\U0001f3f4\U000e0065\U000e0067\U000e0062\U000e0068\U000e007f" - FLAG_FOR_MATROUH_EG_MT = "\U0001f3f4\U000e0065\U000e0067\U000e006d\U000e0074\U000e007f" - FLAG_FOR_MAEKEL_ER_MA = "\U0001f3f4\U000e0065\U000e0072\U000e006d\U000e0061\U000e007f" - FLAG_FOR_SOUTH_SINAI_EG_JS = "\U0001f3f4\U000e0065\U000e0067\U000e006a\U000e0073\U000e007f" - FLAG_FOR_QENA_EG_KN = "\U0001f3f4\U000e0065\U000e0067\U000e006b\U000e006e\U000e007f" - FLAG_FOR_LUXOR_EG_LX = "\U0001f3f4\U000e0065\U000e0067\U000e006c\U000e0078\U000e007f" - FLAG_FOR_ANSEBA_ER_AN = "\U0001f3f4\U000e0065\U000e0072\U000e0061\U000e006e\U000e007f" - FLAG_FOR_MINYA_EG_MN = "\U0001f3f4\U000e0065\U000e0067\U000e006d\U000e006e\U000e007f" - FLAG_FOR_DEBUB_ER_DU = "\U0001f3f4\U000e0065\U000e0072\U000e0064\U000e0075\U000e007f" + FLAG_FOR_SAARE_EE_74 = "\U0001f3f4\U000e0065\U000e0065\U000e0037\U000e0034\U000e007f" + FLAG_FOR_JOGEVA_EE_49 = "\U0001f3f4\U000e0065\U000e0065\U000e0034\U000e0039\U000e007f" + FLAG_FOR_POLVA_EE_65 = "\U0001f3f4\U000e0065\U000e0065\U000e0036\U000e0035\U000e007f" + FLAG_FOR_JARVA_EE_51 = "\U0001f3f4\U000e0065\U000e0065\U000e0035\U000e0031\U000e007f" + FLAG_FOR_PAPHOS_CY_05 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0035\U000e007f" + FLAG_FOR_PARNU_EE_67 = "\U0001f3f4\U000e0065\U000e0065\U000e0036\U000e0037\U000e007f" + FLAG_FOR_CARCHI_EC_C = "\U0001f3f4\U000e0065\U000e0063\U000e0063\U000e007f" + FLAG_FOR_SUCUMBIOS_EC_U = "\U0001f3f4\U000e0065\U000e0063\U000e0075\U000e007f" + FLAG_FOR_OUM_EL_BOUAGHI_DZ_04 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0034\U000e007f" + FLAG_FOR_GALAPAGOS_EC_W = "\U0001f3f4\U000e0065\U000e0063\U000e0077\U000e007f" FLAG_FOR_GHARBIA_EG_GH = "\U0001f3f4\U000e0065\U000e0067\U000e0067\U000e0068\U000e007f" - FLAG_FOR_SUEZ_EG_SUZ = "\U0001f3f4\U000e0065\U000e0067\U000e0073\U000e0075\U000e007a\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_AMHARA_ET_AM = "\U0001f3f4\U000e0065\U000e0074\U000e0061\U000e006d\U000e007f" - FLAG_FOR_BLIDA_DZ_09 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0039\U000e007f" + FLAG_FOR_DAKAHLIA_EG_DK = "\U0001f3f4\U000e0065\U000e0067\U000e0064\U000e006b\U000e007f" + FLAG_FOR_AL_SHARQIA_EG_SHR = "\U0001f3f4\U000e0065\U000e0067\U000e0073\U000e0068\U000e0072\U000e007f" + FLAG_FOR_QALYUBIA_EG_KB = "\U0001f3f4\U000e0065\U000e0067\U000e006b\U000e0062\U000e007f" + FLAG_FOR_FEDERATION_OF_BOSNIA_AND_HERZEGOVINA_BA_BIH = "\U0001f3f4\U000e0062\U000e0061\U000e0062\U000e0069\U000e0068\U000e007f" + FLAG_FOR_CENTRAL_ABACO_BS_CO = "\U0001f3f4\U000e0062\U000e0073\U000e0063\U000e006f\U000e007f" + FLAG_FOR_MONUFIA_EG_MNF = "\U0001f3f4\U000e0065\U000e0067\U000e006d\U000e006e\U000e0066\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f467\U0001f3fe" + FLAG_FOR_BUJUMBURA_RURAL_BI_BL = "\U0001f3f4\U000e0062\U000e0069\U000e0062\U000e006c\U000e007f" + FLAG_FOR_MAEKEL_ER_MA = "\U0001f3f4\U000e0065\U000e0072\U000e006d\U000e0061\U000e007f" + FLAG_FOR_ISMAILIA_EG_IS = "\U0001f3f4\U000e0065\U000e0067\U000e0069\U000e0073\U000e007f" + FLAG_FOR_SAIDA_DZ_20 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0030\U000e007f" + FLAG_FOR_QENA_EG_KN = "\U0001f3f4\U000e0065\U000e0067\U000e006b\U000e006e\U000e007f" + FLAG_FOR_TARTU_EE_78 = "\U0001f3f4\U000e0065\U000e0065\U000e0037\U000e0038\U000e007f" + FLAG_FOR_ANSEBA_ER_AN = "\U0001f3f4\U000e0065\U000e0072\U000e0061\U000e006e\U000e007f" + FLAG_FOR_ASWAN_EG_ASN = "\U0001f3f4\U000e0065\U000e0067\U000e0061\U000e0073\U000e006e\U000e007f" + FLAG_FOR_DEBUB_ER_DU = "\U0001f3f4\U000e0065\U000e0072\U000e0064\U000e0075\U000e007f" + FLAG_FOR_ASYUT_EG_AST = "\U0001f3f4\U000e0065\U000e0067\U000e0061\U000e0073\U000e0074\U000e007f" + FLAG_FOR_BEHEIRA_EG_BH = "\U0001f3f4\U000e0065\U000e0067\U000e0062\U000e0068\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe" + FLAG_FOR_IMBABURA_EC_I = "\U0001f3f4\U000e0065\U000e0063\U000e0069\U000e007f" + FLAG_FOR_VILJANDI_EE_84 = "\U0001f3f4\U000e0065\U000e0065\U000e0038\U000e0034\U000e007f" + FLAG_FOR_VORU_EE_86 = "\U0001f3f4\U000e0065\U000e0065\U000e0038\U000e0036\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FLAG_FOR_HAUTE_KOTTO_CF_HK = "\U0001f3f4\U000e0063\U000e0066\U000e0068\U000e006b\U000e007f" + FLAG_FOR_GUAINIA_CO_GUA = "\U0001f3f4\U000e0063\U000e006f\U000e0067\U000e0075\U000e0061\U000e007f" + FLAG_FOR_DAMIETTA_EG_DT = "\U0001f3f4\U000e0065\U000e0067\U000e0064\U000e0074\U000e007f" + FLAG_FOR_SAINT_PAUL_DM_10 = "\U0001f3f4\U000e0064\U000e006d\U000e0031\U000e0030\U000e007f" + FLAG_FOR_KAINUU_FI_05 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0035\U000e007f" FAMILY_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f467\U0001f3fd" FLAG_FOR_KYMENLAAKSO_FI_09 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0039\U000e007f" - FLAG_FOR_DIRE_DAWA_ET_DD = "\U0001f3f4\U000e0065\U000e0074\U000e0064\U000e0064\U000e007f" - FLAG_FOR_LIAONING_CN_21 = "\U0001f3f4\U000e0063\U000e006e\U000e0032\U000e0031\U000e007f" - FLAG_FOR_SOUTH_KARELIA_FI_02 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0032\U000e007f" - FLAG_FOR_CENTRAL_OSTROBOTHNIA_FI_07 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0037\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE_GIRL_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f467\U0001f3fe\u200d\U0001f467\U0001f3fe" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fd" FLAG_FOR_BENISHANGUL_GUMUZ_ET_BE = "\U0001f3f4\U000e0065\U000e0074\U000e0062\U000e0065\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_SOUTH_KARELIA_FI_02 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0032\U000e007f" + FLAG_FOR_PUNAKHA_BT_23 = "\U0001f3f4\U000e0062\U000e0074\U000e0032\U000e0033\U000e007f" + FLAG_FOR_YUMA_DO_42 = "\U0001f3f4\U000e0064\U000e006f\U000e0034\U000e0032\U000e007f" + FLAG_FOR_SANTA_ELENA_EC_SE = "\U0001f3f4\U000e0065\U000e0063\U000e0073\U000e0065\U000e007f" FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f467\U0001f3fc" - FLAG_FOR_KAINUU_FI_05 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0035\U000e007f" - FLAG_FOR_TIGRAY_ET_TI = "\U0001f3f4\U000e0065\U000e0074\U000e0074\U000e0069\U000e007f" KISS_MAN_MEDIUM_SKIN_TONE_WOMAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469\U0001f3ff" + FLAG_FOR_BISTRITA_NASAUD_RO_BN = "\U0001f3f4\U000e0072\U000e006f\U000e0062\U000e006e\U000e007f" + FLAG_FOR_KEMO_CF_KG = "\U0001f3f4\U000e0063\U000e0066\U000e006b\U000e0067\U000e007f" + FLAG_FOR_BLIDA_DZ_09 = "\U0001f3f4\U000e0064\U000e007a\U000e0030\U000e0039\U000e007f" FLAG_FOR_HARARI_ET_HA = "\U0001f3f4\U000e0065\U000e0074\U000e0068\U000e0061\U000e007f" - FLAG_FOR_ZLINSKY_KRAJ_CZ_72 = "\U0001f3f4\U000e0063\U000e007a\U000e0037\U000e0032\U000e007f" - FLAG_FOR_YUNNAN_CN_53 = "\U0001f3f4\U000e0063\U000e006e\U000e0035\U000e0033\U000e007f" - FLAG_FOR_SOUTHERN_SAVONIA_FI_04 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0034\U000e007f" - FLAG_FOR_BELIZE_BZ_BZ = "\U0001f3f4\U000e0062\U000e007a\U000e0062\U000e007a\U000e007f" + FLAG_FOR_ARTEMISA_CU_15 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0035\U000e007f" FLAG_FOR_SOUTHERN_OSTROBOTHNIA_FI_03 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0033\U000e007f" - FLAG_FOR_NOUVELLE_AQUITAINE_FR_NAQ = "\U0001f3f4\U000e0066\U000e0072\U000e006e\U000e0061\U000e0071\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" - FLAG_FOR_NORTHERN_SAVONIA_FI_15 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0035\U000e007f" - FLAG_FOR_BIO_BIO_CL_BI = "\U0001f3f4\U000e0063\U000e006c\U000e0062\U000e0069\U000e007f" - FLAG_FOR_ROTUMA_FJ_R = "\U0001f3f4\U000e0066\U000e006a\U000e0072\U000e007f" - FLAG_FOR_NORTHERN_OSTROBOTHNIA_FI_14 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0034\U000e007f" - FLAG_FOR_CHUKHA_BT_12 = "\U0001f3f4\U000e0062\U000e0074\U000e0031\U000e0032\U000e007f" - FLAG_FOR_EAST_CM_ES = "\U0001f3f4\U000e0063\U000e006d\U000e0065\U000e0073\U000e007f" - FLAG_FOR_NORTH_KARELIA_FI_13 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0033\U000e007f" - FLAG_FOR_PAIJANNE_TAVASTIA_FI_16 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0036\U000e007f" - FLAG_FOR_KOSRAE_FM_KSA = "\U0001f3f4\U000e0066\U000e006d\U000e006b\U000e0073\U000e0061\U000e007f" - FLAG_FOR_MWARO_BI_MW = "\U0001f3f4\U000e0062\U000e0069\U000e006d\U000e0077\U000e007f" - FLAG_FOR_SATAKUNTA_FI_17 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0037\U000e007f" - FLAG_FOR_FRENCH_POLYNESIA_FR_PF = "\U0001f3f4\U000e0066\U000e0072\U000e0070\U000e0066\U000e007f" - FLAG_FOR_PIRKANMAA_FI_11 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0031\U000e007f" - FLAG_FOR_MAYOTTE_FR_MAY = "\U0001f3f4\U000e0066\U000e0072\U000e006d\U000e0061\U000e0079\U000e007f" - FAMILY_MAN_MAN_BABY_BOY = "\U0001f468\u200d\U0001f468\u200d\U0001f476\u200d\U0001f466" - FLAG_FOR_NORTHERN_FJ_N = "\U0001f3f4\U000e0066\U000e006a\U000e006e\U000e007f" + FLAG_FOR_OBOCK_DJ_OB = "\U0001f3f4\U000e0064\U000e006a\U000e006f\U000e0062\U000e007f" + FLAG_FOR_MATROUH_EG_MT = "\U0001f3f4\U000e0065\U000e0067\U000e006d\U000e0074\U000e007f" + TAG_LATIN_CAPITAL_LETTER_W = "\U000e0057" + FLAG_FOR_VILLA_CLARA_CU_05 = "\U0001f3f4\U000e0063\U000e0075\U000e0030\U000e0035\U000e007f" FLAG_FOR_CENTRAL_FJ_C = "\U0001f3f4\U000e0066\U000e006a\U000e0063\U000e007f" - FLAG_FOR_SAINT_PATRICK_DM_09 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0039\U000e007f" - FLAG_FOR_GUADELOUPE_FR_GUA = "\U0001f3f4\U000e0066\U000e0072\U000e0067\U000e0075\U000e0061\U000e007f" - FLAG_FOR_CENTRE_VAL_DE_LOIRE_FR_CVL = "\U0001f3f4\U000e0066\U000e0072\U000e0063\U000e0076\U000e006c\U000e007f" + FLAG_FOR_NORTH_KARELIA_FI_13 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0033\U000e007f" + FLAG_FOR_CHUKHA_BT_12 = "\U0001f3f4\U000e0062\U000e0074\U000e0031\U000e0032\U000e007f" + FLAG_FOR_BENI_BO_B = "\U0001f3f4\U000e0062\U000e006f\U000e0062\U000e007f" FLAG_FOR_ORAN_DZ_31 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0031\U000e007f" + FLAG_FOR_NORTHERN_SAVONIA_FI_15 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0035\U000e007f" + FLAG_FOR_APPENZELL_AUSSERRHODEN_CH_AR = "\U0001f3f4\U000e0063\U000e0068\U000e0061\U000e0072\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_PIRKANMAA_FI_11 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0031\U000e007f" + FLAG_FOR_KOSRAE_FM_KSA = "\U0001f3f4\U000e0066\U000e006d\U000e006b\U000e0073\U000e0061\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_OUHAM_PENDE_CF_OP = "\U0001f3f4\U000e0063\U000e0066\U000e006f\U000e0070\U000e007f" + FLAG_FOR_BIO_BIO_CL_BI = "\U0001f3f4\U000e0063\U000e006c\U000e0062\U000e0069\U000e007f" + HORIZONTAL_MALE_WITH_STROKE_SIGN = "\u26a9" + FLAG_FOR_NOUVELLE_AQUITAINE_FR_NAQ = "\U0001f3f4\U000e0066\U000e0072\U000e006e\U000e0061\U000e0071\U000e007f" + FLAG_FOR_ANSE_AUX_PINS_SC_01 = "\U0001f3f4\U000e0073\U000e0063\U000e0030\U000e0031\U000e007f" + FLAG_FOR_SAINT_DAVID_GD_02 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0032\U000e007f" + FLAG_FOR_OGOOUE_IVINDO_GA_6 = "\U0001f3f4\U000e0067\U000e0061\U000e0036\U000e007f" + FLAG_FOR_ZAMORA_CHINCHIPE_EC_Z = "\U0001f3f4\U000e0065\U000e0063\U000e007a\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FLAG_FOR_MOYEN_OGOOUE_GA_3 = "\U0001f3f4\U000e0067\U000e0061\U000e0033\U000e007f" + FLAG_FOR_SATAKUNTA_FI_17 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0037\U000e007f" FLAG_FOR_BRONG_AHAFO_GH_BA = "\U0001f3f4\U000e0067\U000e0068\U000e0062\U000e0061\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_VAN_TR_65 = "\U0001f3f4\U000e0074\U000e0072\U000e0036\U000e0035\U000e007f" + FLAG_FOR_MTSKHETA_MTIANETI_GE_MM = "\U0001f3f4\U000e0067\U000e0065\U000e006d\U000e006d\U000e007f" + FLAG_FOR_TEBESSA_DZ_12 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0032\U000e007f" + FLAG_FOR_WOLEU_NTEM_GA_9 = "\U0001f3f4\U000e0067\U000e0061\U000e0039\U000e007f" + FLAG_FOR_SAMEGRELO_ZEMO_SVANETI_GE_SZ = "\U0001f3f4\U000e0067\U000e0065\U000e0073\U000e007a\U000e007f" FLAG_FOR_IMERETI_GE_IM = "\U0001f3f4\U000e0067\U000e0065\U000e0069\U000e006d\U000e007f" FLAG_FOR_SAMTSKHE_JAVAKHETI_GE_SJ = "\U0001f3f4\U000e0067\U000e0065\U000e0073\U000e006a\U000e007f" - FAMILY_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f476\U0001f3fb" - FLAG_FOR_OGOOUE_IVINDO_GA_6 = "\U0001f3f4\U000e0067\U000e0061\U000e0036\U000e007f" - FLAG_FOR_SAMEGRELO_ZEMO_SVANETI_GE_SZ = "\U0001f3f4\U000e0067\U000e0065\U000e0073\U000e007a\U000e007f" - FLAG_FOR_SHIDA_KARTLI_GE_SK = "\U0001f3f4\U000e0067\U000e0065\U000e0073\U000e006b\U000e007f" - FLAG_FOR_OCCITANIE_FR_OCC = "\U0001f3f4\U000e0066\U000e0072\U000e006f\U000e0063\U000e0063\U000e007f" - FLAG_FOR_SAINT_PATRICK_GD_06 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0036\U000e007f" - FLAG_FOR_OGOOUE_MARITIME_GA_8 = "\U0001f3f4\U000e0067\U000e0061\U000e0038\U000e007f" - FLAG_FOR_JIHOMORAVSKY_KRAJ_CZ_64 = "\U0001f3f4\U000e0063\U000e007a\U000e0036\U000e0034\U000e007f" FLAG_FOR_ABIDJAN_CI_AB = "\U0001f3f4\U000e0063\U000e0069\U000e0061\U000e0062\U000e007f" - FLAG_FOR_NYANGA_GA_5 = "\U0001f3f4\U000e0067\U000e0061\U000e0035\U000e007f" - FLAG_FOR_OGOOUE_LOLO_GA_7 = "\U0001f3f4\U000e0067\U000e0061\U000e0037\U000e007f" - FLAG_FOR_SAINT_DAVID_GD_02 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0032\U000e007f" - FLAG_FOR_WOLEU_NTEM_GA_9 = "\U0001f3f4\U000e0067\U000e0061\U000e0039\U000e007f" - FLAG_FOR_GRAND_EST_FR_GES = "\U0001f3f4\U000e0066\U000e0072\U000e0067\U000e0065\U000e0073\U000e007f" - FLAG_FOR_LA_REUNION_FR_LRE = "\U0001f3f4\U000e0066\U000e0072\U000e006c\U000e0072\U000e0065\U000e007f" - FLAG_FOR_GURIA_GE_GU = "\U0001f3f4\U000e0067\U000e0065\U000e0067\U000e0075\U000e007f" - FLAG_FOR_SAINT_JOHN_GD_04 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0034\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f476\U0001f3fc" - FLAG_FOR_SAINT_ANDREW_GD_01 = "\U0001f3f4\U000e0067\U000e0064\U000e0030\U000e0031\U000e007f" - FLAG_FOR_MTSKHETA_MTIANETI_GE_MM = "\U0001f3f4\U000e0067\U000e0065\U000e006d\U000e006d\U000e007f" + FLAG_FOR_SHIRAK_AM_SH = "\U0001f3f4\U000e0061\U000e006d\U000e0073\U000e0068\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_GUELMA_DZ_24 = "\U0001f3f4\U000e0064\U000e007a\U000e0032\U000e0034\U000e007f" FLAG_FOR_HAUT_OGOOUE_GA_2 = "\U0001f3f4\U000e0067\U000e0061\U000e0032\U000e007f" - FLAG_FOR_WALLIS_ANDAMP_FUTUNA_FR_WF = "\U0001f3f4\U000e0066\U000e0072\U000e0077\U000e0066\U000e007f" - FLAG_FOR_MOYEN_OGOOUE_GA_3 = "\U0001f3f4\U000e0067\U000e0061\U000e0033\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f467\U0001f3ff" - FLAG_FOR_CHUUK_FM_TRK = "\U0001f3f4\U000e0066\U000e006d\U000e0074\U000e0072\U000e006b\U000e007f" - FLAG_FOR_VISEU_PT_18 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0038\U000e007f" - FLAG_FOR_QEQQATA_GL_QE = "\U0001f3f4\U000e0067\U000e006c\U000e0071\U000e0065\U000e007f" - FLAG_FOR_KINDIA_REGION_GN_D = "\U0001f3f4\U000e0067\U000e006e\U000e0064\U000e007f" - FLAG_FOR_EPIRUS_GR_D = "\U0001f3f4\U000e0067\U000e0072\U000e0064\U000e007f" - FAMILY_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f476\U0001f3fd" - FLAG_FOR_QAASUITSUP_GL_QA = "\U0001f3f4\U000e0067\U000e006c\U000e0071\U000e0061\U000e007f" - FLAG_FOR_UPPER_WEST_GH_UW = "\U0001f3f4\U000e0067\U000e0068\U000e0075\U000e0077\U000e007f" - FLAG_FOR_INSULAR_GQ_I = "\U0001f3f4\U000e0067\U000e0071\U000e0069\U000e007f" - FLAG_FOR_CONAKRY_GN_C = "\U0001f3f4\U000e0067\U000e006e\U000e0063\U000e007f" - FLAG_FOR_EASTERN_GH_EP = "\U0001f3f4\U000e0067\U000e0068\U000e0065\U000e0070\U000e007f" - FLAG_FOR_THESSALY_GR_E = "\U0001f3f4\U000e0067\U000e0072\U000e0065\U000e007f" - FLAG_FOR_BOKE_REGION_GN_B = "\U0001f3f4\U000e0067\U000e006e\U000e0062\U000e007f" - FLAG_FOR_NORTHERN_GH_NP = "\U0001f3f4\U000e0067\U000e0068\U000e006e\U000e0070\U000e007f" - FLAG_FOR_ATTICA_GR_I = "\U0001f3f4\U000e0067\U000e0072\U000e0069\U000e007f" - FLAG_FOR_IONIAN_ISLANDS_GR_F = "\U0001f3f4\U000e0067\U000e0072\U000e0066\U000e007f" - FLAG_FOR_NORTH_BANK_DIVISION_GM_N = "\U0001f3f4\U000e0067\U000e006d\U000e006e\U000e007f" - TAG_ASTERISK = "\U000e002a" - FLAG_FOR_CENTRAL_GH_CP = "\U0001f3f4\U000e0067\U000e0068\U000e0063\U000e0070\U000e007f" - FLAG_FOR_SERMERSOOQ_GL_SM = "\U0001f3f4\U000e0067\U000e006c\U000e0073\U000e006d\U000e007f" - FLAG_FOR_MOUNT_ATHOS_GR_69 = "\U0001f3f4\U000e0067\U000e0072\U000e0036\U000e0039\U000e007f" - FLAG_FOR_UPPER_EAST_GH_UE = "\U0001f3f4\U000e0067\U000e0068\U000e0075\U000e0065\U000e007f" - FLAG_FOR_FARANAH_REGION_GN_F = "\U0001f3f4\U000e0067\U000e006e\U000e0066\U000e007f" - FLAG_FOR_RIO_MUNI_GQ_C = "\U0001f3f4\U000e0067\U000e0071\U000e0063\U000e007f" - COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" - FLAG_FOR_NZEREKORE_REGION_GN_N = "\U0001f3f4\U000e0067\U000e006e\U000e006e\U000e007f" - FLAG_FOR_ST_PIERRE_ANDAMP_MIQUELON_FR_PM = "\U0001f3f4\U000e0066\U000e0072\U000e0070\U000e006d\U000e007f" - FLAG_FOR_WESTERN_GH_WP = "\U0001f3f4\U000e0067\U000e0068\U000e0077\U000e0070\U000e007f" - FLAG_FOR_NEW_CALEDONIA_FR_NC = "\U0001f3f4\U000e0066\U000e0072\U000e006e\U000e0063\U000e007f" + FLAG_FOR_JIHOMORAVSKY_KRAJ_CZ_64 = "\U0001f3f4\U000e0063\U000e007a\U000e0036\U000e0034\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f466\U0001f3fc" FLAG_FOR_KUJALLEQ_GL_KU = "\U0001f3f4\U000e0067\U000e006c\U000e006b\U000e0075\U000e007f" + FLAG_FOR_THESSALY_GR_E = "\U0001f3f4\U000e0067\U000e0072\U000e0065\U000e007f" + FLAG_FOR_EPIRUS_GR_D = "\U0001f3f4\U000e0067\U000e0072\U000e0064\U000e007f" + FLAG_FOR_PICHINCHA_EC_P = "\U0001f3f4\U000e0065\U000e0063\U000e0070\U000e007f" + FLAG_FOR_ALI_SABIEH_DJ_AS = "\U0001f3f4\U000e0064\U000e006a\U000e0061\U000e0073\U000e007f" + FLAG_FOR_NORTHERN_FJ_N = "\U0001f3f4\U000e0066\U000e006a\U000e006e\U000e007f" + FLAG_FOR_NORTHERN_GH_NP = "\U0001f3f4\U000e0067\U000e0068\U000e006e\U000e0070\U000e007f" + FLAG_FOR_UPPER_WEST_GH_UW = "\U0001f3f4\U000e0067\U000e0068\U000e0075\U000e0077\U000e007f" + FLAG_FOR_UPPER_EAST_GH_UE = "\U0001f3f4\U000e0067\U000e0068\U000e0075\U000e0065\U000e007f" + FLAG_FOR_KINDIA_REGION_GN_D = "\U0001f3f4\U000e0067\U000e006e\U000e0064\U000e007f" + FLAG_FOR_CONAKRY_GN_C = "\U0001f3f4\U000e0067\U000e006e\U000e0063\U000e007f" + FLAG_FOR_IONIAN_ISLANDS_GR_F = "\U0001f3f4\U000e0067\U000e0072\U000e0066\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + FLAG_FOR_SINOE_LR_SI = "\U0001f3f4\U000e006c\U000e0072\U000e0073\U000e0069\U000e007f" + FLAG_FOR_FARANAH_REGION_GN_F = "\U0001f3f4\U000e0067\U000e006e\U000e0066\U000e007f" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fc" + FLAG_FOR_HEILONGJIANG_CN_23 = "\U0001f3f4\U000e0063\U000e006e\U000e0032\U000e0033\U000e007f" + FLAG_FOR_RIO_MUNI_GQ_C = "\U0001f3f4\U000e0067\U000e0071\U000e0063\U000e007f" + WHITE_DOWN_POINTING_LEFT_HAND_INDEX = "\U0001f597" FLAG_FOR_VOLTA_GH_TV = "\U0001f3f4\U000e0067\U000e0068\U000e0074\U000e0076\U000e007f" - FLAG_FOR_KANKAN_REGION_GN_K = "\U0001f3f4\U000e0067\U000e006e\U000e006b\U000e007f" - FLAG_FOR_LOWER_RIVER_DIVISION_GM_L = "\U0001f3f4\U000e0067\U000e006d\U000e006c\U000e007f" - FLAG_FOR_IZABAL_GT_IZ = "\U0001f3f4\U000e0067\U000e0074\U000e0069\U000e007a\U000e007f" - FLAG_FOR_GENEVA_CH_GE = "\U0001f3f4\U000e0063\U000e0068\U000e0067\U000e0065\U000e007f" - FLAG_FOR_ATLANTIDA_HN_AT = "\U0001f3f4\U000e0068\U000e006e\U000e0061\U000e0074\U000e007f" - FLAG_FOR_DEMERARA_MAHAICA_GY_DE = "\U0001f3f4\U000e0067\U000e0079\U000e0064\U000e0065\U000e007f" - FLAG_FOR_SUCHITEPEQUEZ_GT_SU = "\U0001f3f4\U000e0067\U000e0074\U000e0073\U000e0075\U000e007f" - FLAG_FOR_QUETZALTENANGO_GT_QZ = "\U0001f3f4\U000e0067\U000e0074\U000e0071\U000e007a\U000e007f" - FLAG_FOR_JALAPA_GT_JA = "\U0001f3f4\U000e0067\U000e0074\U000e006a\U000e0061\U000e007f" - FLAG_FOR_POTARO_SIPARUNI_GY_PT = "\U0001f3f4\U000e0067\U000e0079\U000e0070\U000e0074\U000e007f" - FLAG_FOR_HUEHUETENANGO_GT_HU = "\U0001f3f4\U000e0067\U000e0074\U000e0068\U000e0075\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe\u200d\U0001f476\U0001f3fe" - FLAG_FOR_CHIMALTENANGO_GT_CM = "\U0001f3f4\U000e0067\U000e0074\U000e0063\U000e006d\U000e007f" - FAMILY_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_QAASUITSUP_GL_QA = "\U0001f3f4\U000e0067\U000e006c\U000e0071\U000e0061\U000e007f" + KISS_MAN_LIGHT_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3ff" FLAG_FOR_QUICHE_GT_QC = "\U0001f3f4\U000e0067\U000e0074\U000e0071\U000e0063\U000e007f" - FLAG_FOR_PETEN_GT_PE = "\U0001f3f4\U000e0067\U000e0074\U000e0070\U000e0065\U000e007f" - FLAG_FOR_ALTA_VERAPAZ_GT_AV = "\U0001f3f4\U000e0067\U000e0074\U000e0061\U000e0076\U000e007f" - FLAG_FOR_TOTONICAPAN_GT_TO = "\U0001f3f4\U000e0067\U000e0074\U000e0074\U000e006f\U000e007f" - FLAG_FOR_BARIMA_WAINI_GY_BA = "\U0001f3f4\U000e0067\U000e0079\U000e0062\U000e0061\U000e007f" - FLAG_FOR_ESSEQUIBO_ISLANDS_WEST_DEMERARA_GY_ES = "\U0001f3f4\U000e0067\U000e0079\U000e0065\U000e0073\U000e007f" - FLAG_FOR_YAP_FM_YAP = "\U0001f3f4\U000e0066\U000e006d\U000e0079\U000e0061\U000e0070\U000e007f" - FLAG_FOR_EL_PROGRESO_GT_PR = "\U0001f3f4\U000e0067\U000e0074\U000e0070\U000e0072\U000e007f" - FLAG_FOR_POMEROON_SUPENAAM_GY_PM = "\U0001f3f4\U000e0067\U000e0079\U000e0070\U000e006d\U000e007f" - FLAG_FOR_SACATEPEQUEZ_GT_SA = "\U0001f3f4\U000e0067\U000e0074\U000e0073\U000e0061\U000e007f" - FLAG_FOR_BAJA_VERAPAZ_GT_BV = "\U0001f3f4\U000e0067\U000e0074\U000e0062\U000e0076\U000e007f" - FLAG_FOR_CHOLUTECA_HN_CH = "\U0001f3f4\U000e0068\U000e006e\U000e0063\U000e0068\U000e007f" - FLAG_FOR_CHIQUIMULA_GT_CQ = "\U0001f3f4\U000e0067\U000e0074\U000e0063\U000e0071\U000e007f" - FLAG_FOR_CUYUNI_MAZARUNI_GY_CU = "\U0001f3f4\U000e0067\U000e0079\U000e0063\U000e0075\U000e007f" - FLAG_FOR_BISSAU_GW_BS = "\U0001f3f4\U000e0067\U000e0077\U000e0062\U000e0073\U000e007f" - FLAG_FOR_NEW_VALLEY_EG_WAD = "\U0001f3f4\U000e0065\U000e0067\U000e0077\U000e0061\U000e0064\U000e007f" - FLAG_FOR_ESCUINTLA_GT_ES = "\U0001f3f4\U000e0067\U000e0074\U000e0065\U000e0073\U000e007f" - FLAG_FOR_ZACAPA_GT_ZA = "\U0001f3f4\U000e0067\U000e0074\U000e007a\U000e0061\U000e007f" - FLAG_FOR_NORTE_GW_N = "\U0001f3f4\U000e0067\U000e0077\U000e006e\U000e007f" - FLAG_FOR_SOLOLA_GT_SO = "\U0001f3f4\U000e0067\U000e0074\U000e0073\U000e006f\U000e007f" + FLAG_FOR_HUNAN_CN_43 = "\U0001f3f4\U000e0063\U000e006e\U000e0034\U000e0033\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fe" + FLAG_FOR_QUETZALTENANGO_GT_QZ = "\U0001f3f4\U000e0067\U000e0074\U000e0071\U000e007a\U000e007f" FLAG_FOR_LESTE_GW_L = "\U0001f3f4\U000e0067\U000e0077\U000e006c\U000e007f" - FLAG_FOR_BROD_POSAVINA_HR_12 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0032\U000e007f" - FLAG_FOR_KOPRIVNICA_KRIZEVCI_HR_06 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0036\U000e007f" - FLAG_FOR_BJELOVAR_BILOGORA_HR_07 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0037\U000e007f" - FLAG_FOR_LA_PAZ_HN_LP = "\U0001f3f4\U000e0068\U000e006e\U000e006c\U000e0070\U000e007f" - FLAG_FOR_LIKA_SENJ_HR_09 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0039\U000e007f" - FLAG_FOR_EL_PARAISO_HN_EP = "\U0001f3f4\U000e0068\U000e006e\U000e0065\U000e0070\U000e007f" - FLAG_FOR_YORO_HN_YO = "\U0001f3f4\U000e0068\U000e006e\U000e0079\U000e006f\U000e007f" - FLAG_FOR_PRIMORJE_GORSKI_KOTAR_HR_08 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0038\U000e007f" - FLAG_FOR_OCOTEPEQUE_HN_OC = "\U0001f3f4\U000e0068\U000e006e\U000e006f\U000e0063\U000e007f" - FLAG_FOR_SIBENIK_KNIN_HR_15 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0035\U000e007f" - FLAG_FOR_LEMPIRA_HN_LE = "\U0001f3f4\U000e0068\U000e006e\U000e006c\U000e0065\U000e007f" - FLAG_FOR_DUBROVNIK_NERETVA_HR_19 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0039\U000e007f" + FLAG_FOR_CUYUNI_MAZARUNI_GY_CU = "\U0001f3f4\U000e0067\U000e0079\U000e0063\U000e0075\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_PETEN_GT_PE = "\U0001f3f4\U000e0067\U000e0074\U000e0070\U000e0065\U000e007f" + FLAG_FOR_ZACAPA_GT_ZA = "\U0001f3f4\U000e0067\U000e0074\U000e007a\U000e0061\U000e007f" + FLAG_FOR_LIAONING_CN_21 = "\U0001f3f4\U000e0063\U000e006e\U000e0032\U000e0031\U000e007f" + FLAG_FOR_CHOLUTECA_HN_CH = "\U0001f3f4\U000e0068\U000e006e\U000e0063\U000e0068\U000e007f" + FLAG_FOR_CHIMALTENANGO_GT_CM = "\U0001f3f4\U000e0067\U000e0074\U000e0063\U000e006d\U000e007f" + FLAG_FOR_SOLOLA_GT_SO = "\U0001f3f4\U000e0067\U000e0074\U000e0073\U000e006f\U000e007f" + FLAG_FOR_HUEHUETENANGO_GT_HU = "\U0001f3f4\U000e0067\U000e0074\U000e0068\U000e0075\U000e007f" + KISS_MAN_MAN_LIGHT_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" + FLAG_FOR_ESCUINTLA_GT_ES = "\U0001f3f4\U000e0067\U000e0074\U000e0065\U000e0073\U000e007f" + FLAG_FOR_CHIQUIMULA_GT_CQ = "\U0001f3f4\U000e0067\U000e0074\U000e0063\U000e0071\U000e007f" + FLAG_FOR_IZABAL_GT_IZ = "\U0001f3f4\U000e0067\U000e0074\U000e0069\U000e007a\U000e007f" + FLAG_FOR_ATLANTIDA_HN_AT = "\U0001f3f4\U000e0068\U000e006e\U000e0061\U000e0074\U000e007f" + FLAG_FOR_NEW_JERSEY_US_NJ = "\U0001f3f4\U000e0075\U000e0073\U000e006e\U000e006a\U000e007f" + FLAG_FOR_ESSEQUIBO_ISLANDS_WEST_DEMERARA_GY_ES = "\U0001f3f4\U000e0067\U000e0079\U000e0065\U000e0073\U000e007f" + FLAG_FOR_POTARO_SIPARUNI_GY_PT = "\U0001f3f4\U000e0067\U000e0079\U000e0070\U000e0074\U000e007f" + FLAG_FOR_BISSAU_GW_BS = "\U0001f3f4\U000e0067\U000e0077\U000e0062\U000e0073\U000e007f" + FLAG_FOR_DEMERARA_MAHAICA_GY_DE = "\U0001f3f4\U000e0067\U000e0079\U000e0064\U000e0065\U000e007f" FLAG_FOR_IDA_VIRU_EE_44 = "\U0001f3f4\U000e0065\U000e0065\U000e0034\U000e0034\U000e007f" - FLAG_FOR_ZAGREB_COUNTY_HR_01 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0031\U000e007f" - FLAG_FOR_OLANCHO_HN_OL = "\U0001f3f4\U000e0068\U000e006e\U000e006f\U000e006c\U000e007f" - FLAG_FOR_GRACIAS_A_DIOS_HN_GD = "\U0001f3f4\U000e0068\U000e006e\U000e0067\U000e0064\U000e007f" - FLAG_FOR_INTIBUCA_HN_IN = "\U0001f3f4\U000e0068\U000e006e\U000e0069\U000e006e\U000e007f" - FLAG_FOR_JIJEL_DZ_18 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0038\U000e007f" - FLAG_FOR_ME_IMURJE_HR_20 = "\U0001f3f4\U000e0068\U000e0072\U000e0032\U000e0030\U000e007f" - FLAG_FOR_CORTES_HN_CR = "\U0001f3f4\U000e0068\U000e006e\U000e0063\U000e0072\U000e007f" - FLAG_FOR_COLON_HN_CL = "\U0001f3f4\U000e0068\U000e006e\U000e0063\U000e006c\U000e007f" - FLAG_FOR_ZAGREB_HR_21 = "\U0001f3f4\U000e0068\U000e0072\U000e0032\U000e0031\U000e007f" - FLAG_FOR_VUKOVAR_SYRMIA_HR_16 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0036\U000e007f" - FLAG_FOR_ARTIBONITE_HT_AR = "\U0001f3f4\U000e0068\U000e0074\U000e0061\U000e0072\U000e007f" - FLAG_FOR_ISTRIA_HR_18 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0038\U000e007f" - FLAG_FOR_SISAK_MOSLAVINA_HR_03 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0033\U000e007f" - FLAG_FOR_SANTA_BARBARA_HN_SB = "\U0001f3f4\U000e0068\U000e006e\U000e0073\U000e0062\U000e007f" - FLAG_FOR_ZADAR_HR_13 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0033\U000e007f" - FLAG_FOR_COMAYAGUA_HN_CM = "\U0001f3f4\U000e0068\U000e006e\U000e0063\U000e006d\U000e007f" - FLAG_FOR_ADDIS_ABABA_ET_AA = "\U0001f3f4\U000e0065\U000e0074\U000e0061\U000e0061\U000e007f" - FLAG_FOR_VALLE_HN_VA = "\U0001f3f4\U000e0068\U000e006e\U000e0076\U000e0061\U000e007f" - FLAG_FOR_SPLIT_DALMATIA_HR_17 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0037\U000e007f" - FLAG_FOR_COPAN_HN_CP = "\U0001f3f4\U000e0068\U000e006e\U000e0063\U000e0070\U000e007f" - FLAG_FOR_OSIJEK_BARANJA_HR_14 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0034\U000e007f" - FLAG_FOR_POZEGA_SLAVONIA_HR_11 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0031\U000e007f" + FLAG_FOR_LIKA_SENJ_HR_09 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0039\U000e007f" FLAG_FOR_KRAPINA_ZAGORJE_HR_02 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0032\U000e007f" - FLAG_FOR_FRANCISCO_MORAZAN_HN_FM = "\U0001f3f4\U000e0068\U000e006e\U000e0066\U000e006d\U000e007f" + FLAG_FOR_ARTIBONITE_HT_AR = "\U0001f3f4\U000e0068\U000e0074\U000e0061\U000e0072\U000e007f" + FLAG_FOR_OCOTEPEQUE_HN_OC = "\U0001f3f4\U000e0068\U000e006e\U000e006f\U000e0063\U000e007f" FLAG_FOR_CENTRE_HT_CE = "\U0001f3f4\U000e0068\U000e0074\U000e0063\U000e0065\U000e007f" - FLAG_FOR_SOPRON_HU_SN = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e006e\U000e007f" - FLAG_FOR_SUD_HT_SD = "\U0001f3f4\U000e0068\U000e0074\U000e0073\U000e0064\U000e007f" - FLAG_FOR_FEJER_HU_FE = "\U0001f3f4\U000e0068\U000e0075\U000e0066\U000e0065\U000e007f" - FLAG_FOR_PECS_HU_PS = "\U0001f3f4\U000e0068\U000e0075\U000e0070\U000e0073\U000e007f" - FLAG_FOR_BARANYA_HU_BA = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e0061\U000e007f" - FLAG_FOR_GRAND_ANSE_HT_GA = "\U0001f3f4\U000e0068\U000e0074\U000e0067\U000e0061\U000e007f" - FLAG_FOR_BORSOD_ABAUJ_ZEMPLEN_HU_BZ = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e007a\U000e007f" - FLAG_FOR_SZOLNOK_HU_SK = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e006b\U000e007f" - FLAG_FOR_DUNAUJVAROS_HU_DU = "\U0001f3f4\U000e0068\U000e0075\U000e0064\U000e0075\U000e007f" - FLAG_FOR_BUDAPEST_HU_BU = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e0075\U000e007f" - FLAG_FOR_CSONGRAD_HU_CS = "\U0001f3f4\U000e0068\U000e0075\U000e0063\U000e0073\U000e007f" - FLAG_FOR_HODMEZOVASARHELY_HU_HV = "\U0001f3f4\U000e0068\U000e0075\U000e0068\U000e0076\U000e007f" - FLAG_FOR_DEBRECEN_HU_DE = "\U0001f3f4\U000e0068\U000e0075\U000e0064\U000e0065\U000e007f" - FLAG_FOR_NORD_HT_ND = "\U0001f3f4\U000e0068\U000e0074\U000e006e\U000e0064\U000e007f" - FLAG_FOR_SZEGED_HU_SD = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e0064\U000e007f" - FLAG_FOR_BACS_KISKUN_HU_BK = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e006b\U000e007f" - FLAG_FOR_KOMAROM_ESZTERGOM_HU_KE = "\U0001f3f4\U000e0068\U000e0075\U000e006b\U000e0065\U000e007f" - FLAG_FOR_SZEKESFEHERVAR_HU_SF = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e0066\U000e007f" - FLAG_FOR_NAGYKANIZSA_HU_NK = "\U0001f3f4\U000e0068\U000e0075\U000e006e\U000e006b\U000e007f" - FLAG_FOR_HAJDU_BIHAR_HU_HB = "\U0001f3f4\U000e0068\U000e0075\U000e0068\U000e0062\U000e007f" - FLAG_FOR_GYOR_HU_GY = "\U0001f3f4\U000e0068\U000e0075\U000e0067\U000e0079\U000e007f" + FLAG_FOR_SOLOTHURN_CH_SO = "\U0001f3f4\U000e0063\U000e0068\U000e0073\U000e006f\U000e007f" + FLAG_FOR_JALAPA_GT_JA = "\U0001f3f4\U000e0067\U000e0074\U000e006a\U000e0061\U000e007f" + FLAG_FOR_DUBROVNIK_NERETVA_HR_19 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0039\U000e007f" + FLAG_FOR_VUKOVAR_SYRMIA_HR_16 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0036\U000e007f" + FLAG_FOR_OSIJEK_BARANJA_HR_14 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0034\U000e007f" + FLAG_FOR_KOPRIVNICA_KRIZEVCI_HR_06 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0036\U000e007f" + FLAG_FOR_INTIBUCA_HN_IN = "\U0001f3f4\U000e0068\U000e006e\U000e0069\U000e006e\U000e007f" + FLAG_FOR_POZEGA_SLAVONIA_HR_11 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0031\U000e007f" + FLAG_FOR_BERAT_COUNTY_AL_01 = "\U0001f3f4\U000e0061\U000e006c\U000e0030\U000e0031\U000e007f" + FLAG_FOR_SAINT_LUKE_DM_07 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0037\U000e007f" + FLAG_FOR_COMAYAGUA_HN_CM = "\U0001f3f4\U000e0068\U000e006e\U000e0063\U000e006d\U000e007f" + FLAG_FOR_YORO_HN_YO = "\U0001f3f4\U000e0068\U000e006e\U000e0079\U000e006f\U000e007f" + FLAG_FOR_COPAN_HN_CP = "\U0001f3f4\U000e0068\U000e006e\U000e0063\U000e0070\U000e007f" + FLAG_FOR_VALLE_HN_VA = "\U0001f3f4\U000e0068\U000e006e\U000e0076\U000e0061\U000e007f" + FLAG_FOR_LEMPIRA_HN_LE = "\U0001f3f4\U000e0068\U000e006e\U000e006c\U000e0065\U000e007f" + FLAG_FOR_ME_IMURJE_HR_20 = "\U0001f3f4\U000e0068\U000e0072\U000e0032\U000e0030\U000e007f" + FLAG_FOR_SIBENIK_KNIN_HR_15 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0035\U000e007f" + MERCURY = "\u263f\ufe0f" + FLAG_FOR_FRANCISCO_MORAZAN_HN_FM = "\U0001f3f4\U000e0068\U000e006e\U000e0066\U000e006d\U000e007f" + FLAG_FOR_OLANCHO_HN_OL = "\U0001f3f4\U000e0068\U000e006e\U000e006f\U000e006c\U000e007f" + FLAG_FOR_CORTES_HN_CR = "\U0001f3f4\U000e0068\U000e006e\U000e0063\U000e0072\U000e007f" + FLAG_FOR_ZAGREB_COUNTY_HR_01 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0031\U000e007f" + FLAG_FOR_ISTRIA_HR_18 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0038\U000e007f" + FLAG_FOR_ZADAR_HR_13 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0033\U000e007f" FLAG_FOR_PEST_HU_PE = "\U0001f3f4\U000e0068\U000e0075\U000e0070\U000e0065\U000e007f" - FLAG_FOR_MISKOLC_HU_MI = "\U0001f3f4\U000e0068\U000e0075\U000e006d\U000e0069\U000e007f" - FLAG_FOR_ERD_HU_ER = "\U0001f3f4\U000e0068\U000e0075\U000e0065\U000e0072\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_HAJDU_BIHAR_HU_HB = "\U0001f3f4\U000e0068\U000e0075\U000e0068\U000e0062\U000e007f" + COUPLE_WITH_HEART_MAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3ff" + FLAG_FOR_OUEST_HT_OU = "\U0001f3f4\U000e0068\U000e0074\U000e006f\U000e0075\U000e007f" + FLAG_FOR_SZOLNOK_HU_SK = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e006b\U000e007f" + FLAG_FOR_NOGRAD_HU_NO = "\U0001f3f4\U000e0068\U000e0075\U000e006e\U000e006f\U000e007f" + FLAG_FOR_BORSOD_ABAUJ_ZEMPLEN_HU_BZ = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e007a\U000e007f" + FLAG_FOR_SOPRON_HU_SN = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e006e\U000e007f" + FLAG_FOR_JIJEL_DZ_18 = "\U0001f3f4\U000e0064\U000e007a\U000e0031\U000e0038\U000e007f" + FLAG_FOR_BEKESCSABA_HU_BC = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e0063\U000e007f" + FLAG_FOR_NYIREGYHAZA_HU_NY = "\U0001f3f4\U000e0068\U000e0075\U000e006e\U000e0079\U000e007f" + FLAG_FOR_NORD_HT_ND = "\U0001f3f4\U000e0068\U000e0074\U000e006e\U000e0064\U000e007f" + FLAG_FOR_FEJER_HU_FE = "\U0001f3f4\U000e0068\U000e0075\U000e0066\U000e0065\U000e007f" FLAG_FOR_NIPPES_HT_NI = "\U0001f3f4\U000e0068\U000e0074\U000e006e\U000e0069\U000e007f" + FLAG_FOR_ERD_HU_ER = "\U0001f3f4\U000e0068\U000e0075\U000e0065\U000e0072\U000e007f" FLAG_FOR_SZOMBATHELY_HU_SH = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e0068\U000e007f" - FLAG_FOR_JASZ_NAGYKUN_SZOLNOK_HU_JN = "\U0001f3f4\U000e0068\U000e0075\U000e006a\U000e006e\U000e007f" + FLAG_FOR_EASTERN_GH_EP = "\U0001f3f4\U000e0067\U000e0068\U000e0065\U000e0070\U000e007f" + FLAG_FOR_DIRE_DAWA_ET_DD = "\U0001f3f4\U000e0065\U000e0074\U000e0064\U000e0064\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469" + FLAG_FOR_SZEKESFEHERVAR_HU_SF = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e0066\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fb" + FLAG_FOR_KOMAROM_ESZTERGOM_HU_KE = "\U0001f3f4\U000e0068\U000e0075\U000e006b\U000e0065\U000e007f" + FLAG_FOR_MISKOLC_HU_MI = "\U0001f3f4\U000e0068\U000e0075\U000e006d\U000e0069\U000e007f" + FLAG_FOR_DEBRECEN_HU_DE = "\U0001f3f4\U000e0068\U000e0075\U000e0064\U000e0065\U000e007f" + FLAG_FOR_BACS_KISKUN_HU_BK = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e006b\U000e007f" + FLAG_FOR_GYOR_HU_GY = "\U0001f3f4\U000e0068\U000e0075\U000e0067\U000e0079\U000e007f" + FLAG_FOR_DUNAUJVAROS_HU_DU = "\U0001f3f4\U000e0068\U000e0075\U000e0064\U000e0075\U000e007f" FLAG_FOR_HEVES_HU_HE = "\U0001f3f4\U000e0068\U000e0075\U000e0068\U000e0065\U000e007f" FLAG_FOR_BEKES_HU_BE = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e0065\U000e007f" - FLAG_FOR_NOGRAD_HU_NO = "\U0001f3f4\U000e0068\U000e0075\U000e006e\U000e006f\U000e007f" - FLAG_FOR_NYIREGYHAZA_HU_NY = "\U0001f3f4\U000e0068\U000e0075\U000e006e\U000e0079\U000e007f" - FLAG_FOR_BEKESCSABA_HU_BC = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e0063\U000e007f" - FLAG_FOR_OUEST_HT_OU = "\U0001f3f4\U000e0068\U000e0074\U000e006f\U000e0075\U000e007f" - FLAG_FOR_SZEKSZARD_HU_SS = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e0073\U000e007f" - FLAG_FOR_TATABANYA_HU_TB = "\U0001f3f4\U000e0068\U000e0075\U000e0074\U000e0062\U000e007f" - FLAG_FOR_CONNACHT_IE_C = "\U0001f3f4\U000e0069\U000e0065\U000e0063\U000e007f" - FLAG_FOR_TOLNA_HU_TO = "\U0001f3f4\U000e0068\U000e0075\U000e0074\U000e006f\U000e007f" - FLAG_FOR_MUSLIM_MINDANAO_PH_14 = "\U0001f3f4\U000e0070\U000e0068\U000e0031\U000e0034\U000e007f" - FLAG_FOR_VAS_HU_VA = "\U0001f3f4\U000e0068\U000e0075\U000e0076\U000e0061\U000e007f" - FLAG_FOR_SULAWESI_ID_SL = "\U0001f3f4\U000e0069\U000e0064\U000e0073\U000e006c\U000e007f" - FLAG_FOR_SUMATRA_ID_SM = "\U0001f3f4\U000e0069\U000e0064\U000e0073\U000e006d\U000e007f" - FLAG_FOR_GREATER_ACCRA_GH_AA = "\U0001f3f4\U000e0067\U000e0068\U000e0061\U000e0061\U000e007f" - FLAG_FOR_VESZPREM_HU_VM = "\U0001f3f4\U000e0068\U000e0075\U000e0076\U000e006d\U000e007f" - FLAG_FOR_JERUSALEM_IL_JM = "\U0001f3f4\U000e0069\U000e006c\U000e006a\U000e006d\U000e007f" - FLAG_FOR_LA_RIOJA_ES_RI = "\U0001f3f4\U000e0065\U000e0073\U000e0072\U000e0069\U000e007f" - FLAG_FOR_VESZPREM_COUNTY_HU_VE = "\U0001f3f4\U000e0068\U000e0075\U000e0076\U000e0065\U000e007f" - FLAG_FOR_UPPER_RIVER_DIVISION_GM_U = "\U0001f3f4\U000e0067\U000e006d\U000e0075\U000e007f" - FLAG_FOR_SOMOGY_HU_SO = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e006f\U000e007f" - FLAG_FOR_GAMBELA_ET_GA = "\U0001f3f4\U000e0065\U000e0074\U000e0067\U000e0061\U000e007f" - FLAG_FOR_CENTRAL_DISTRICT_IL_M = "\U0001f3f4\U000e0069\U000e006c\U000e006d\U000e007f" - FLAG_FOR_RACHA_LECHKHUMI_AND_KVEMO_SVANETI_GE_RL = "\U0001f3f4\U000e0067\U000e0065\U000e0072\U000e006c\U000e007f" - FLAG_FOR_CHANDIGARH_IN_CH = "\U0001f3f4\U000e0069\U000e006e\U000e0063\U000e0068\U000e007f" - FLAG_FOR_SOUTHERN_DISTRICT_IL_D = "\U0001f3f4\U000e0069\U000e006c\U000e0064\U000e007f" - FLAG_FOR_LESSER_SUNDA_ISLANDS_ID_NU = "\U0001f3f4\U000e0069\U000e0064\U000e006e\U000e0075\U000e007f" - FLAG_FOR_HAIFA_DISTRICT_IL_HA = "\U0001f3f4\U000e0069\U000e006c\U000e0068\U000e0061\U000e007f" - FLAG_FOR_LEINSTER_IE_L = "\U0001f3f4\U000e0069\U000e0065\U000e006c\U000e007f" - FLAG_FOR_ARUNACHAL_PRADESH_IN_AR = "\U0001f3f4\U000e0069\U000e006e\U000e0061\U000e0072\U000e007f" + FLAG_FOR_JASZ_NAGYKUN_SZOLNOK_HU_JN = "\U0001f3f4\U000e0068\U000e0075\U000e006a\U000e006e\U000e007f" + FLAG_FOR_RAPLA_EE_70 = "\U0001f3f4\U000e0065\U000e0065\U000e0037\U000e0030\U000e007f" FLAG_FOR_ZALAEGERSZEG_HU_ZE = "\U0001f3f4\U000e0068\U000e0075\U000e007a\U000e0065\U000e007f" - FLAG_FOR_FAMAGUSTA_CY_04 = "\U0001f3f4\U000e0063\U000e0079\U000e0030\U000e0034\U000e007f" - FLAG_FOR_DIYALA_IQ_DI = "\U0001f3f4\U000e0069\U000e0071\U000e0064\U000e0069\U000e007f" + FLAG_FOR_CONNACHT_IE_C = "\U0001f3f4\U000e0069\U000e0065\U000e0063\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" + FLAG_FOR_CENTRAL_DISTRICT_IL_M = "\U0001f3f4\U000e0069\U000e006c\U000e006d\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_GREATER_ACCRA_GH_AA = "\U0001f3f4\U000e0067\U000e0068\U000e0061\U000e0061\U000e007f" + FLAG_FOR_HAIFA_DISTRICT_IL_HA = "\U0001f3f4\U000e0069\U000e006c\U000e0068\U000e0061\U000e007f" + FLAG_FOR_BARANYA_HU_BA = "\U0001f3f4\U000e0068\U000e0075\U000e0062\U000e0061\U000e007f" + FLAG_FOR_VESZPREM_HU_VM = "\U0001f3f4\U000e0068\U000e0075\U000e0076\U000e006d\U000e007f" + FLAG_FOR_VESZPREM_COUNTY_HU_VE = "\U0001f3f4\U000e0068\U000e0075\U000e0076\U000e0065\U000e007f" + FLAG_FOR_MAGDALENA_CO_MAG = "\U0001f3f4\U000e0063\U000e006f\U000e006d\U000e0061\U000e0067\U000e007f" + FLAG_FOR_NAGYKANIZSA_HU_NK = "\U0001f3f4\U000e0068\U000e0075\U000e006e\U000e006b\U000e007f" + FLAG_FOR_SOMOGY_HU_SO = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e006f\U000e007f" + FLAG_FOR_SOUTHERN_DISTRICT_IL_D = "\U0001f3f4\U000e0069\U000e006c\U000e0064\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" + FLAG_FOR_SAINT_PETER_DM_11 = "\U0001f3f4\U000e0064\U000e006d\U000e0031\U000e0031\U000e007f" + KISS_WOMAN_MEDIUM_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fb" + FLAG_FOR_TOLNA_HU_TO = "\U0001f3f4\U000e0068\U000e0075\U000e0074\U000e006f\U000e007f" FLAG_FOR_ODISHA_IN_OR = "\U0001f3f4\U000e0069\U000e006e\U000e006f\U000e0072\U000e007f" - FLAG_FOR_BASRA_IQ_BA = "\U0001f3f4\U000e0069\U000e0071\U000e0062\U000e0061\U000e007f" - FLAG_FOR_PRAHA_HLAVNI_MESTO_CZ_10 = "\U0001f3f4\U000e0063\U000e007a\U000e0031\U000e0030\U000e007f" - FLAG_FOR_NEUCHATEL_CH_NE = "\U0001f3f4\U000e0063\U000e0068\U000e006e\U000e0065\U000e007f" - FLAG_FOR_JHARKHAND_IN_JH = "\U0001f3f4\U000e0069\U000e006e\U000e006a\U000e0068\U000e007f" - FLAG_FOR_KECSKEMET_HU_KM = "\U0001f3f4\U000e0068\U000e0075\U000e006b\U000e006d\U000e007f" - FLAG_FOR_KERALA_IN_KL = "\U0001f3f4\U000e0069\U000e006e\U000e006b\U000e006c\U000e007f" - FLAG_FOR_SULAYMANIYAH_IQ_SU = "\U0001f3f4\U000e0069\U000e0071\U000e0073\U000e0075\U000e007f" - FLAG_FOR_SALADIN_IQ_SD = "\U0001f3f4\U000e0069\U000e0071\U000e0073\U000e0064\U000e007f" - FLAG_FOR_MIZORAM_IN_MZ = "\U0001f3f4\U000e0069\U000e006e\U000e006d\U000e007a\U000e007f" - FLAG_FOR_SIKKIM_IN_SK = "\U0001f3f4\U000e0069\U000e006e\U000e0073\U000e006b\U000e007f" - FLAG_FOR_JAVA_ID_JW = "\U0001f3f4\U000e0069\U000e0064\U000e006a\U000e0077\U000e007f" - FLAG_FOR_UTTARAKHAND_IN_UT = "\U0001f3f4\U000e0069\U000e006e\U000e0075\U000e0074\U000e007f" - FLAG_FOR_BAGHDAD_IQ_BG = "\U0001f3f4\U000e0069\U000e0071\U000e0062\U000e0067\U000e007f" - FLAG_FOR_MAYSAN_IQ_MA = "\U0001f3f4\U000e0069\U000e0071\U000e006d\U000e0061\U000e007f" - FLAG_FOR_ATLANTICO_CO_ATL = "\U0001f3f4\U000e0063\U000e006f\U000e0061\U000e0074\U000e006c\U000e007f" - FLAG_FOR_DHI_QAR_IQ_DQ = "\U0001f3f4\U000e0069\U000e0071\U000e0064\U000e0071\U000e007f" + FLAG_FOR_PUTUMAYO_CO_PUT = "\U0001f3f4\U000e0063\U000e006f\U000e0070\U000e0075\U000e0074\U000e007f" FLAG_FOR_DOHUK_IQ_DA = "\U0001f3f4\U000e0069\U000e0071\U000e0064\U000e0061\U000e007f" - FLAG_FOR_TRIPURA_IN_TR = "\U0001f3f4\U000e0069\U000e006e\U000e0074\U000e0072\U000e007f" - FLAG_FOR_NAJAF_IQ_NA = "\U0001f3f4\U000e0069\U000e0071\U000e006e\U000e0061\U000e007f" FLAG_FOR_AL_MUTHANNA_IQ_MU = "\U0001f3f4\U000e0069\U000e0071\U000e006d\U000e0075\U000e007f" + WHITE_DIAMOND_SUIT = "\u2662" + BLACK_CHESS_QUEEN = "\u265b" + FLAG_FOR_SALADIN_IQ_SD = "\U0001f3f4\U000e0069\U000e0071\U000e0073\U000e0064\U000e007f" + TAG_LATIN_SMALL_LETTER_V = "\U000e0076" + FAMILY_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_SHANDONG_CN_37 = "\U0001f3f4\U000e0063\U000e006e\U000e0033\U000e0037\U000e007f" FLAG_FOR_AL_ANBAR_IQ_AN = "\U0001f3f4\U000e0069\U000e0071\U000e0061\U000e006e\U000e007f" - FLAG_FOR_NINEVEH_IQ_NI = "\U0001f3f4\U000e0069\U000e0071\U000e006e\U000e0069\U000e007f" - FLAG_FOR_NAGALAND_IN_NL = "\U0001f3f4\U000e0069\U000e006e\U000e006e\U000e006c\U000e007f" - FLAG_FOR_AL_QADISIYYAH_IQ_QA = "\U0001f3f4\U000e0069\U000e0071\U000e0071\U000e0061\U000e007f" - FLAG_FOR_LAKSHADWEEP_IN_LD = "\U0001f3f4\U000e0069\U000e006e\U000e006c\U000e0064\U000e007f" + FLAG_FOR_NAJAF_IQ_NA = "\U0001f3f4\U000e0069\U000e0071\U000e006e\U000e0061\U000e007f" FLAG_FOR_KARBALA_IQ_KA = "\U0001f3f4\U000e0069\U000e0071\U000e006b\U000e0061\U000e007f" - FLAG_FOR_ERBIL_IQ_AR = "\U0001f3f4\U000e0069\U000e0071\U000e0061\U000e0072\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f476\U0001f3ff" + FLAG_FOR_SULAWESI_ID_SL = "\U0001f3f4\U000e0069\U000e0064\U000e0073\U000e006c\U000e007f" + FLAG_FOR_ATLANTICO_CO_ATL = "\U0001f3f4\U000e0063\U000e006f\U000e0061\U000e0074\U000e006c\U000e007f" + FAMILY_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_DIYALA_IQ_DI = "\U0001f3f4\U000e0069\U000e0071\U000e0064\U000e0069\U000e007f" + FLAG_FOR_AL_QADISIYYAH_IQ_QA = "\U0001f3f4\U000e0069\U000e0071\U000e0071\U000e0061\U000e007f" + FLAG_FOR_NAGALAND_IN_NL = "\U0001f3f4\U000e0069\U000e006e\U000e006e\U000e006c\U000e007f" + FLAG_FOR_SULAYMANIYAH_IQ_SU = "\U0001f3f4\U000e0069\U000e0071\U000e0073\U000e0075\U000e007f" + FLAG_FOR_SUEZ_EG_SUZ = "\U0001f3f4\U000e0065\U000e0067\U000e0073\U000e0075\U000e007a\U000e007f" FLAG_FOR_MEGHALAYA_IN_ML = "\U0001f3f4\U000e0069\U000e006e\U000e006d\U000e006c\U000e007f" - FLAG_FOR_PUDUCHERRY_IN_PY = "\U0001f3f4\U000e0069\U000e006e\U000e0070\U000e0079\U000e007f" - FLAG_FOR_MARKAZI_IR_22 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0032\U000e007f" - FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe" - FLAG_FOR_CHAHARMAHAL_AND_BAKHTIARI_IR_08 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0038\U000e007f" - FLAG_FOR_QOM_IR_26 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0036\U000e007f" - FLAG_FOR_BUSHEHR_IR_06 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0036\U000e007f" - FLAG_FOR_GILAN_IR_19 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0039\U000e007f" - FLAG_FOR_WESTERN_IS_3 = "\U0001f3f4\U000e0069\U000e0073\U000e0033\U000e007f" - FLAG_FOR_ZALA_HU_ZA = "\U0001f3f4\U000e0068\U000e0075\U000e007a\U000e0061\U000e007f" - FLAG_FOR_MAHAICA_BERBICE_GY_MA = "\U0001f3f4\U000e0067\U000e0079\U000e006d\U000e0061\U000e007f" - FLAG_FOR_LISBON_PT_11 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0031\U000e007f" - FLAG_FOR_NORTHWESTERN_IS_5 = "\U0001f3f4\U000e0069\U000e0073\U000e0035\U000e007f" - FLAG_FOR_CENTRAL_RIVER_DIVISION_GM_M = "\U0001f3f4\U000e0067\U000e006d\U000e006d\U000e007f" - FLAG_FOR_ISFAHAN_IR_04 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0034\U000e007f" - FLAG_FOR_WEST_COAST_DIVISION_GM_W = "\U0001f3f4\U000e0067\U000e006d\U000e0077\U000e007f" - FLAG_FOR_BANJUL_GM_B = "\U0001f3f4\U000e0067\U000e006d\U000e0062\U000e007f" - FLAG_FOR_ZANJAN_IR_11 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0031\U000e007f" - FLAG_FOR_UTTAR_PRADESH_IN_UP = "\U0001f3f4\U000e0069\U000e006e\U000e0075\U000e0070\U000e007f" - FLAG_FOR_PIEDMONT_IT_21 = "\U0001f3f4\U000e0069\U000e0074\U000e0032\U000e0031\U000e007f" - FLAG_FOR_ILAM_IR_05 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0035\U000e007f" - FLAG_FOR_QAZVIN_IR_28 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0038\U000e007f" - FLAG_FOR_SEMNAN_IR_12 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0032\U000e007f" - FLAG_FOR_EASTERN_IS_7 = "\U0001f3f4\U000e0069\U000e0073\U000e0037\U000e007f" - FLAG_FOR_KERMAN_IR_15 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0035\U000e007f" - FLAG_FOR_WASIT_IQ_WA = "\U0001f3f4\U000e0069\U000e0071\U000e0077\U000e0061\U000e007f" + FLAG_FOR_NINEVEH_IQ_NI = "\U0001f3f4\U000e0069\U000e0071\U000e006e\U000e0069\U000e007f" + FLAG_FOR_NEUCHATEL_CH_NE = "\U0001f3f4\U000e0063\U000e0068\U000e006e\U000e0065\U000e007f" + FLAG_FOR_MIZORAM_IN_MZ = "\U0001f3f4\U000e0069\U000e006e\U000e006d\U000e007a\U000e007f" + FLAG_FOR_OBWALDEN_CH_OW = "\U0001f3f4\U000e0063\U000e0068\U000e006f\U000e0077\U000e007f" + FLAG_FOR_LAKSHADWEEP_IN_LD = "\U0001f3f4\U000e0069\U000e006e\U000e006c\U000e0064\U000e007f" FLAG_FOR_HORMOZGAN_IR_23 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0033\U000e007f" - FLAG_FOR_SOUTHERN_PENINSULA_IS_2 = "\U0001f3f4\U000e0069\U000e0073\U000e0032\U000e007f" + FLAG_FOR_QAZVIN_IR_28 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0038\U000e007f" + FLAG_FOR_MAYSAN_IQ_MA = "\U0001f3f4\U000e0069\U000e0071\U000e006d\U000e0061\U000e007f" + FLAG_FOR_SEMNAN_IR_12 = "\U0001f3f4\U000e0069\U000e0072\U000e0031\U000e0032\U000e007f" + FLAG_FOR_ALAJUELA_CR_A = "\U0001f3f4\U000e0063\U000e0072\U000e0061\U000e007f" + FLAG_FOR_MARKAZI_IR_22 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0032\U000e007f" + COUPLE_WITH_HEART_WOMAN_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" + FLAG_FOR_RHODE_ISLAND_US_RI = "\U0001f3f4\U000e0075\U000e0073\U000e0072\U000e0069\U000e007f" + FLAG_FOR_PIRAN_SI_090 = "\U0001f3f4\U000e0073\U000e0069\U000e0030\U000e0039\U000e0030\U000e007f" + FLAG_FOR_LEINSTER_IE_L = "\U0001f3f4\U000e0069\U000e0065\U000e006c\U000e007f" + FLAG_FOR_BANJUL_GM_B = "\U0001f3f4\U000e0067\U000e006d\U000e0062\U000e007f" + FLAG_FOR_NORTHWESTERN_IS_5 = "\U0001f3f4\U000e0069\U000e0073\U000e0035\U000e007f" + FAMILY_WOMAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f467\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_MAHAICA_BERBICE_GY_MA = "\U0001f3f4\U000e0067\U000e0079\U000e006d\U000e0061\U000e007f" FLAG_FOR_YAZD_IR_25 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0035\U000e007f" - FLAG_FOR_NORTHEASTERN_IS_6 = "\U0001f3f4\U000e0069\U000e0073\U000e0036\U000e007f" - FLAG_FOR_MOLISE_IT_67 = "\U0001f3f4\U000e0069\U000e0074\U000e0036\U000e0037\U000e007f" - FLAG_FOR_IRBID_JO_IR = "\U0001f3f4\U000e006a\U000e006f\U000e0069\U000e0072\U000e007f" - BALLOT_BOLD_SCRIPT_X = "\U0001f5f6" - FLAG_FOR_LIGURIA_IT_42 = "\U0001f3f4\U000e0069\U000e0074\U000e0034\U000e0032\U000e007f" - FLAG_FOR_SAINT_ELIZABETH_JM_11 = "\U0001f3f4\U000e006a\U000e006d\U000e0031\U000e0031\U000e007f" - FLAG_FOR_TRELAWNY_JM_07 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0037\U000e007f" - FLAG_FOR_AMMAN_JO_AM = "\U0001f3f4\U000e006a\U000e006f\U000e0061\U000e006d\U000e007f" + FLAG_FOR_WASIT_IQ_WA = "\U0001f3f4\U000e0069\U000e0071\U000e0077\U000e0061\U000e007f" + FLAG_FOR_SAINT_ANDREW_DM_02 = "\U0001f3f4\U000e0064\U000e006d\U000e0030\U000e0032\U000e007f" + FLAG_FOR_SUMATRA_ID_SM = "\U0001f3f4\U000e0069\U000e0064\U000e0073\U000e006d\U000e007f" + FLAG_FOR_ZALA_HU_ZA = "\U0001f3f4\U000e0068\U000e0075\U000e007a\U000e0061\U000e007f" + COUPLE_WITH_HEART_WOMAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469\U0001f3fe" FLAG_FOR_BOLIVAR_CO_BOL = "\U0001f3f4\U000e0063\U000e006f\U000e0062\U000e006f\U000e006c\U000e007f" - FLAG_FOR_GOLESTAN_IR_27 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0037\U000e007f" - FLAG_FOR_HANOVER_JM_09 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0039\U000e007f" - FLAG_FOR_ZARQA_JO_AZ = "\U0001f3f4\U000e006a\U000e006f\U000e0061\U000e007a\U000e007f" + FLAG_FOR_SAINT_ELIZABETH_JM_11 = "\U0001f3f4\U000e006a\U000e006d\U000e0031\U000e0031\U000e007f" + FLAG_FOR_WESTERN_GH_WP = "\U0001f3f4\U000e0067\U000e0068\U000e0077\U000e0070\U000e007f" FLAG_FOR_JERASH_JO_JA = "\U0001f3f4\U000e006a\U000e006f\U000e006a\U000e0061\U000e007f" - FLAG_FOR_BALQA_JO_BA = "\U0001f3f4\U000e006a\U000e006f\U000e0062\U000e0061\U000e007f" - FLAG_FOR_CLARENDON_JM_13 = "\U0001f3f4\U000e006a\U000e006d\U000e0031\U000e0033\U000e007f" - FLAG_FOR_BASILICATA_IT_77 = "\U0001f3f4\U000e0069\U000e0074\U000e0037\U000e0037\U000e007f" - FLAG_FOR_TUSCANY_IT_52 = "\U0001f3f4\U000e0069\U000e0074\U000e0035\U000e0032\U000e007f" - FLAG_FOR_APULIA_IT_75 = "\U0001f3f4\U000e0069\U000e0074\U000e0037\U000e0035\U000e007f" + FLAG_FOR_TRELAWNY_JM_07 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0037\U000e007f" + FLAG_FOR_MOLISE_IT_67 = "\U0001f3f4\U000e0069\U000e0074\U000e0036\U000e0037\U000e007f" + FLAG_FOR_NORTHEASTERN_IS_6 = "\U0001f3f4\U000e0069\U000e0073\U000e0036\U000e007f" + FLAG_FOR_AMMAN_JO_AM = "\U0001f3f4\U000e006a\U000e006f\U000e0061\U000e006d\U000e007f" + FLAG_FOR_UMM_AL_QUWAIN_AE_UQ = "\U0001f3f4\U000e0061\U000e0065\U000e0075\U000e0071\U000e007f" + FLAG_FOR_GOLESTAN_IR_27 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0037\U000e007f" FLAG_FOR_TAFILAH_JO_AT = "\U0001f3f4\U000e006a\U000e006f\U000e0061\U000e0074\U000e007f" - FLAG_FOR_SAINT_ANN_JM_06 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0036\U000e007f" - FLAG_FOR_MARCHE_IT_57 = "\U0001f3f4\U000e0069\U000e0074\U000e0035\U000e0037\U000e007f" - FLAG_FOR_OSTROBOTHNIA_FI_12 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0032\U000e007f" - FLAG_FOR_AJLOUN_JO_AJ = "\U0001f3f4\U000e006a\U000e006f\U000e0061\U000e006a\U000e007f" - FLAG_FOR_AQABA_JO_AQ = "\U0001f3f4\U000e006a\U000e006f\U000e0061\U000e0071\U000e007f" + FLAG_FOR_KECSKEMET_HU_KM = "\U0001f3f4\U000e0068\U000e0075\U000e006b\U000e006d\U000e007f" FLAG_FOR_UMBRIA_IT_55 = "\U0001f3f4\U000e0069\U000e0074\U000e0035\U000e0035\U000e007f" - FLAG_FOR_CAIRO_EG_C = "\U0001f3f4\U000e0065\U000e0067\U000e0063\U000e007f" + FLAG_FOR_SAINT_ANN_JM_06 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0036\U000e007f" + FLAG_FOR_SUD_HT_SD = "\U0001f3f4\U000e0068\U000e0074\U000e0073\U000e0064\U000e007f" + COUPLE_WITH_HEART_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN = "\U0001f468\U0001f3fe\u200d\u2764\ufe0f\u200d\U0001f469" + FLAG_FOR_CHAHARMAHAL_AND_BAKHTIARI_IR_08 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0038\U000e007f" FLAG_FOR_WESTMORELAND_JM_10 = "\U0001f3f4\U000e006a\U000e006d\U000e0031\U000e0030\U000e007f" - FLAG_FOR_NARA_JP_29 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0039\U000e007f" - FLAG_FOR_MADABA_JO_MD = "\U0001f3f4\U000e006a\U000e006f\U000e006d\U000e0064\U000e007f" - FLAG_FOR_SHIMANE_JP_32 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0032\U000e007f" - FLAG_FOR_MIYAGI_JP_04 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0034\U000e007f" - FLAG_FOR_AKITA_JP_05 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0035\U000e007f" - FLAG_FOR_TOCHIGI_JP_09 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0039\U000e007f" - FLAG_FOR_OSAKA_JP_27 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0037\U000e007f" - FLAG_FOR_TOKUSHIMA_JP_36 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0036\U000e007f" + FLAG_FOR_LIGURIA_IT_42 = "\U0001f3f4\U000e0069\U000e0074\U000e0034\U000e0032\U000e007f" + FLAG_FOR_GRACIAS_A_DIOS_HN_GD = "\U0001f3f4\U000e0068\U000e006e\U000e0067\U000e0064\U000e007f" + FLAG_FOR_CLARENDON_JM_13 = "\U0001f3f4\U000e006a\U000e006d\U000e0031\U000e0033\U000e007f" + FLAG_FOR_AQABA_JO_AQ = "\U0001f3f4\U000e006a\U000e006f\U000e0061\U000e0071\U000e007f" + FLAG_FOR_IRBID_JO_IR = "\U0001f3f4\U000e006a\U000e006f\U000e0069\U000e0072\U000e007f" + FLAG_FOR_BALQA_JO_BA = "\U0001f3f4\U000e006a\U000e006f\U000e0062\U000e0061\U000e007f" + FLAG_FOR_ZARQA_JO_AZ = "\U0001f3f4\U000e006a\U000e006f\U000e0061\U000e007a\U000e007f" + FLAG_FOR_OSTROBOTHNIA_FI_12 = "\U0001f3f4\U000e0066\U000e0069\U000e0031\U000e0032\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_MAFRAQ_JO_MA = "\U0001f3f4\U000e006a\U000e006f\U000e006d\U000e0061\U000e007f" FLAG_FOR_ARAUCANIA_CL_AR = "\U0001f3f4\U000e0063\U000e006c\U000e0061\U000e0072\U000e007f" - FLAG_FOR_NIIGATA_JP_15 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0035\U000e007f" - FLAG_FOR_MIE_JP_24 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0034\U000e007f" - TAG_APOSTROPHE = "\U000e0027" - FLAG_FOR_KANAGAWA_JP_14 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0034\U000e007f" + FLAG_FOR_EAST_CM_ES = "\U0001f3f4\U000e0063\U000e006d\U000e0065\U000e0073\U000e007f" + FLAG_FOR_YAMAGUCHI_JP_35 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0035\U000e007f" FLAG_FOR_NAGANO_JP_20 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0030\U000e007f" - FLAG_FOR_TOTTORI_JP_31 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0031\U000e007f" + FLAG_FOR_TOCHIGI_JP_09 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0039\U000e007f" + FLAG_FOR_SHIMANE_JP_32 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0032\U000e007f" + FLAG_FOR_ILAM_IR_05 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0035\U000e007f" + FLAG_FOR_NARA_JP_29 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0039\U000e007f" + FLAG_FOR_SPLIT_DALMATIA_HR_17 = "\U0001f3f4\U000e0068\U000e0072\U000e0031\U000e0037\U000e007f" + FLAG_FOR_EHIME_JP_38 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0038\U000e007f" + FLAG_FOR_ORELLANA_EC_D = "\U0001f3f4\U000e0065\U000e0063\U000e0064\U000e007f" + FLAG_FOR_LA_RIOJA_ES_RI = "\U0001f3f4\U000e0065\U000e0073\U000e0072\U000e0069\U000e007f" + FLAG_FOR_IBARAKI_JP_08 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0038\U000e007f" + FLAG_FOR_GRANMA_CU_12 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0032\U000e007f" + FLAG_FOR_SHIZUOKA_JP_22 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0032\U000e007f" FLAG_FOR_IWATE_JP_03 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0033\U000e007f" FLAG_FOR_TOYAMA_JP_16 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0036\U000e007f" - FLAG_FOR_WAKAYAMA_JP_30 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0030\U000e007f" - FLAG_FOR_EHIME_JP_38 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0038\U000e007f" - FLAG_FOR_ISHIKAWA_JP_17 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0037\U000e007f" - FLAG_FOR_KAGAWA_JP_37 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0037\U000e007f" - FLAG_FOR_KYOTO_JP_26 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0036\U000e007f" - FLAG_FOR_MAFRAQ_JO_MA = "\U0001f3f4\U000e006a\U000e006f\U000e006d\U000e0061\U000e007f" - FLAG_FOR_YAMAGUCHI_JP_35 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0035\U000e007f" - FLAG_FOR_SHIZUOKA_JP_22 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0032\U000e007f" + FLAG_FOR_MADABA_JO_MD = "\U0001f3f4\U000e006a\U000e006f\U000e006d\U000e0064\U000e007f" FLAG_FOR_YAMANASHI_JP_19 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0039\U000e007f" - FLAG_FOR_IBARAKI_JP_08 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0038\U000e007f" - FLAG_FOR_AOMORI_JP_02 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0032\U000e007f" - FLAG_FOR_HIROSHIMA_JP_34 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0034\U000e007f" - FLAG_FOR_MA_AN_JO_MN = "\U0001f3f4\U000e006a\U000e006f\U000e006d\U000e006e\U000e007f" - FLAG_FOR_GUNMA_JP_10 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0030\U000e007f" - FLAG_FOR_GRANMA_CU_12 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0032\U000e007f" - FLAG_FOR_YAMAGATA_JP_06 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0036\U000e007f" - FLAG_FOR_SHIGA_JP_25 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0035\U000e007f" + FLAG_FOR_TOKUSHIMA_JP_36 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0036\U000e007f" + FLAG_FOR_ISHIKAWA_JP_17 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0037\U000e007f" + FLAG_FOR_KANAGAWA_JP_14 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0034\U000e007f" + FLAG_FOR_MIE_JP_24 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0034\U000e007f" + FLAG_FOR_NIIGATA_JP_15 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0035\U000e007f" FLAG_FOR_HYOGO_JP_28 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0038\U000e007f" - FLAG_FOR_KARAK_JO_KA = "\U0001f3f4\U000e006a\U000e006f\U000e006b\U000e0061\U000e007f" - FLAG_FOR_CHIBA_JP_12 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0032\U000e007f" + FLAG_FOR_DHI_QAR_IQ_DQ = "\U0001f3f4\U000e0069\U000e0071\U000e0064\U000e0071\U000e007f" + FLAG_FOR_SHIGA_JP_25 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0035\U000e007f" + FLAG_FOR_TOTTORI_JP_31 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0031\U000e007f" FLAG_FOR_OKAYAMA_JP_33 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0033\U000e007f" - FLAG_FOR_MANDERA_KE_24 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0034\U000e007f" - FLAG_FOR_LAIKIPIA_KE_20 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0030\U000e007f" - FLAG_FOR_KUMAMOTO_JP_43 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0033\U000e007f" - FLAG_FOR_KILIFI_KE_14 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0034\U000e007f" - FLAG_FOR_KISII_KE_16 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0036\U000e007f" - FLAG_FOR_NAGASAKI_JP_42 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0032\U000e007f" - FLAG_FOR_KAJIADO_KE_10 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0030\U000e007f" - FLAG_FOR_MIYAZAKI_JP_45 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0035\U000e007f" - FLAG_FOR_SAGA_JP_41 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0031\U000e007f" - FLAG_FOR_KIRINYAGA_KE_15 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0035\U000e007f" - FLAG_FOR_BUSIA_KE_04 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0034\U000e007f" - FLAG_FOR_LAMU_KE_21 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0031\U000e007f" - FLAG_FOR_ULSTER_IE_U = "\U0001f3f4\U000e0069\U000e0065\U000e0075\U000e007f" - FLAG_FOR_EMBU_KE_06 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0036\U000e007f" - FLAG_FOR_KAGOSHIMA_JP_46 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0036\U000e007f" - FLAG_FOR_KERICHO_KE_12 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0032\U000e007f" - FLAG_FOR_ISIOLO_KE_09 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0039\U000e007f" - FLAG_FOR_BUNGOMA_KE_03 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0033\U000e007f" - FLAG_FOR_OITA_JP_44 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0034\U000e007f" - FLAG_FOR_MAKUENI_KE_23 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0033\U000e007f" - FLAG_FOR_MIGORI_KE_27 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0037\U000e007f" - FLAG_FOR_KOCHI_JP_39 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0039\U000e007f" - FLAG_FOR_BOMET_KE_02 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0032\U000e007f" - FLAG_FOR_KIAMBU_KE_13 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0033\U000e007f" - FLAG_FOR_KAKAMEGA_KE_11 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0031\U000e007f" - FLAG_FOR_NANDI_KE_32 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0032\U000e007f" - FLAG_FOR_FUKUOKA_JP_40 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0030\U000e007f" - FLAG_FOR_MERU_KE_26 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0036\U000e007f" + FLAG_FOR_CHIBA_JP_12 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0032\U000e007f" FLAG_FOR_MURANG_A_KE_29 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0039\U000e007f" - FLAG_FOR_ELGEYO_MARAKWET_KE_05 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0035\U000e007f" + FLAG_FOR_SOUTH_SINAI_EG_JS = "\U0001f3f4\U000e0065\U000e0067\U000e006a\U000e0073\U000e007f" + FLAG_FOR_KAJIADO_KE_10 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0030\U000e007f" + FLAG_FOR_KOCHI_JP_39 = "\U0001f3f4\U000e006a\U000e0070\U000e0033\U000e0039\U000e007f" + FLAG_FOR_BASRA_IQ_BA = "\U0001f3f4\U000e0069\U000e0071\U000e0062\U000e0061\U000e007f" FLAG_FOR_NAROK_KE_33 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0033\U000e007f" + FLAG_FOR_FUKUOKA_JP_40 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0030\U000e007f" + FLAG_FOR_BUNGOMA_KE_03 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0033\U000e007f" + FLAG_FOR_GUNMA_JP_10 = "\U0001f3f4\U000e006a\U000e0070\U000e0031\U000e0030\U000e007f" + FLAG_FOR_MERU_KE_26 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0036\U000e007f" + FLAG_FOR_ELGEYO_MARAKWET_KE_05 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0035\U000e007f" + FLAG_FOR_LAIKIPIA_KE_20 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0030\U000e007f" + FLAG_FOR_ISIOLO_KE_09 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0039\U000e007f" + FLAG_FOR_KISII_KE_16 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0036\U000e007f" + FLAG_FOR_SOUTHERN_PENINSULA_IS_2 = "\U0001f3f4\U000e0069\U000e0073\U000e0032\U000e007f" + FLAG_FOR_KAKAMEGA_KE_11 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0031\U000e007f" + FLAG_FOR_MAKUENI_KE_23 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0033\U000e007f" + FLAG_FOR_BITOLA_MK_04 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0034\U000e007f" + FLAG_FOR_MIGORI_KE_27 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0037\U000e007f" + FLAG_FOR_KILIFI_KE_14 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0034\U000e007f" + FLAG_FOR_LAMU_KE_21 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0031\U000e007f" FLAG_FOR_MOMBASA_KE_28 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0038\U000e007f" - FLAG_FOR_SAMBURU_KE_37 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0037\U000e007f" - FLAG_FOR_ISSYK_KUL_KG_Y = "\U0001f3f4\U000e006b\U000e0067\U000e0079\U000e007f" - FLAG_FOR_NARYN_KG_N = "\U0001f3f4\U000e006b\U000e0067\U000e006e\U000e007f" - FLAG_FOR_TAITA_TAVETA_KE_39 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0039\U000e007f" - FLAG_FOR_TANA_RIVER_KE_40 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0030\U000e007f" - FLAG_FOR_OSH_REGION_KG_O = "\U0001f3f4\U000e006b\U000e0067\U000e006f\U000e007f" - FLAG_FOR_JALAL_ABAD_KG_J = "\U0001f3f4\U000e006b\U000e0067\U000e006a\U000e007f" - FLAG_FOR_THARAKA_NITHI_KE_41 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0031\U000e007f" - FLAG_FOR_TBONG_KHMUM_KH_25 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0035\U000e007f" - FLAG_FOR_NYERI_KE_36 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0036\U000e007f" - FLAG_FOR_SIHANOUKVILLE_KH_18 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0038\U000e007f" - FLAG_FOR_PHNOM_PENH_KH_12 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0032\U000e007f" - FLAG_FOR_WEST_POKOT_KE_47 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0037\U000e007f" - FLAG_FOR_CHUY_KG_C = "\U0001f3f4\U000e006b\U000e0067\U000e0063\U000e007f" - FLAG_FOR_KEP_KH_23 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0033\U000e007f" - FLAG_FOR_KRATIE_KH_10 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0030\U000e007f" - FLAG_FOR_TAKEO_KH_21 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0031\U000e007f" - FLAG_FOR_BATTAMBANG_KH_2 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e007f" - FLAG_FOR_PAILIN_KH_24 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0034\U000e007f" - FLAG_FOR_SIAYA_KE_38 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0038\U000e007f" - FLAG_FOR_RATANAKIRI_KH_16 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0036\U000e007f" - FLAG_FOR_SIEM_REAP_KH_17 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0037\U000e007f" - FLAG_FOR_STUNG_TRENG_KH_19 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0039\U000e007f" - FLAG_FOR_NYANDARUA_KE_35 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0035\U000e007f" - FLAG_FOR_UASIN_GISHU_KE_44 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0034\U000e007f" - FLAG_FOR_VIHIGA_KE_45 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0035\U000e007f" - FLAG_FOR_BANTEAY_MEANCHEY_KH_1 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e007f" - FLAG_FOR_MONDULKIRI_KH_11 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0031\U000e007f" - FLAG_FOR_BISHKEK_KG_GB = "\U0001f3f4\U000e006b\U000e0067\U000e0067\U000e0062\U000e007f" + FLAG_FOR_TATABANYA_HU_TB = "\U0001f3f4\U000e0068\U000e0075\U000e0074\U000e0062\U000e007f" + FLAG_FOR_BOMET_KE_02 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0032\U000e007f" + FLAG_FOR_KUMAMOTO_JP_43 = "\U0001f3f4\U000e006a\U000e0070\U000e0034\U000e0033\U000e007f" + FLAG_FOR_KIAMBU_KE_13 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0033\U000e007f" + FLAG_FOR_NANDI_KE_32 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0032\U000e007f" + FLAG_FOR_YAMAGATA_JP_06 = "\U0001f3f4\U000e006a\U000e0070\U000e0030\U000e0036\U000e007f" + FLAG_FOR_BUSIA_KE_04 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0034\U000e007f" + FLAG_FOR_MANDERA_KE_24 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0034\U000e007f" FLAG_FOR_TURKANA_KE_43 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0033\U000e007f" - FLAG_FOR_HOMA_BAY_KE_08 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0038\U000e007f" - FLAG_FOR_MACHAKOS_KE_22 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0032\U000e007f" + FLAG_FOR_NARYN_KG_N = "\U0001f3f4\U000e006b\U000e0067\U000e006e\U000e007f" + FLAG_FOR_SIAYA_KE_38 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0038\U000e007f" + FLAG_FOR_UASIN_GISHU_KE_44 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0034\U000e007f" + FLAG_FOR_JALAL_ABAD_KG_J = "\U0001f3f4\U000e006b\U000e0067\U000e006a\U000e007f" + FLAG_FOR_MONDULKIRI_KH_11 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0031\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_VIHIGA_KE_45 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0035\U000e007f" + FLAG_FOR_WEST_POKOT_KE_47 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0037\U000e007f" FLAG_FOR_PREY_VENG_KH_14 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0034\U000e007f" - FLAG_FOR_LAS_TUNAS_CU_10 = "\U0001f3f4\U000e0063\U000e0075\U000e0031\U000e0030\U000e007f" - FLAG_FOR_NYAMIRA_KE_34 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0034\U000e007f" - FLAG_FOR_ODDAR_MEANCHEY_KH_22 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0032\U000e007f" - FLAG_FOR_PURSAT_KH_15 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0035\U000e007f" FLAG_FOR_TALAS_KG_T = "\U0001f3f4\U000e006b\U000e0067\U000e0074\U000e007f" - FLAG_FOR_WAJIR_KE_46 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0036\U000e007f" - FLAG_FOR_ULSAN_KR_31 = "\U0001f3f4\U000e006b\U000e0072\U000e0033\U000e0031\U000e007f" - FLAG_FOR_KAMPONG_CHAM_KH_3 = "\U0001f3f4\U000e006b\U000e0068\U000e0033\U000e007f" - FLAG_FOR_NORTH_PYONGAN_KP_03 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0033\U000e007f" - FLAG_FOR_DAEJEON_KR_30 = "\U0001f3f4\U000e006b\U000e0072\U000e0033\U000e0030\U000e007f" + FLAG_FOR_HOMA_BAY_KE_08 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0038\U000e007f" + FLAG_FOR_KRATIE_KH_10 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0030\U000e007f" + FLAG_FOR_TBONG_KHMUM_KH_25 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0035\U000e007f" + FLAG_FOR_BISHKEK_KG_GB = "\U0001f3f4\U000e006b\U000e0067\U000e0067\U000e0062\U000e007f" + FLAG_FOR_ODDAR_MEANCHEY_KH_22 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0032\U000e007f" + FLAG_FOR_PHNOM_PENH_KH_12 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0032\U000e007f" + FLAG_FOR_NYERI_KE_36 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0036\U000e007f" + FLAG_FOR_STUNG_TRENG_KH_19 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0039\U000e007f" + FLAG_FOR_PURSAT_KH_15 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0035\U000e007f" + FLAG_FOR_NYANDARUA_KE_35 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0035\U000e007f" + FLAG_FOR_SAMBURU_KE_37 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0037\U000e007f" + FLAG_FOR_MACHAKOS_KE_22 = "\U0001f3f4\U000e006b\U000e0065\U000e0032\U000e0032\U000e007f" + FLAG_FOR_BATTAMBANG_KH_2 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e007f" + FLAG_FOR_TAITA_TAVETA_KE_39 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0039\U000e007f" + FLAG_FOR_TAKEO_KH_21 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0031\U000e007f" + FLAG_FOR_SIHANOUKVILLE_KH_18 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0038\U000e007f" + FLAG_FOR_NYAMIRA_KE_34 = "\U0001f3f4\U000e006b\U000e0065\U000e0033\U000e0034\U000e007f" + FLAG_FOR_KEP_KH_23 = "\U0001f3f4\U000e006b\U000e0068\U000e0032\U000e0033\U000e007f" + FLAG_FOR_THARAKA_NITHI_KE_41 = "\U0001f3f4\U000e006b\U000e0065\U000e0034\U000e0031\U000e007f" + FAMILY_MAN_MEDIUM_DARK_SKIN_TONE_WOMAN_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE_BOY_MEDIUM_DARK_SKIN_TONE = "\U0001f468\U0001f3fe\u200d\U0001f469\U0001f3fe\u200d\U0001f466\U0001f3fe\u200d\U0001f466\U0001f3fe" + FLAG_FOR_SUCHITEPEQUEZ_GT_SU = "\U0001f3f4\U000e0067\U000e0074\U000e0073\U000e0075\U000e007f" + FLAG_FOR_AGUASCALIENTES_MX_AGU = "\U0001f3f4\U000e006d\U000e0078\U000e0061\U000e0067\U000e0075\U000e007f" + FLAG_FOR_COLON_HN_CL = "\U0001f3f4\U000e0068\U000e006e\U000e0063\U000e006c\U000e007f" FLAG_FOR_KAMPOT_KH_7 = "\U0001f3f4\U000e006b\U000e0068\U000e0037\U000e007f" - FLAG_FOR_KOH_KONG_KH_9 = "\U0001f3f4\U000e006b\U000e0068\U000e0039\U000e007f" - FLAG_FOR_CLIPPERTON_ISLAND_FR_CP = "\U0001f3f4\U000e0066\U000e0072\U000e0063\U000e0070\U000e007f" - FLAG_FOR_CHHATTISGARH_IN_CT = "\U0001f3f4\U000e0069\U000e006e\U000e0063\U000e0074\U000e007f" - FLAG_FOR_SOUTH_PYONGAN_KP_02 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0032\U000e007f" - FLAG_FOR_SOUTH_JEOLLA_KR_46 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0036\U000e007f" - FLAG_FOR_NORTH_HWANGHAE_KP_06 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0036\U000e007f" + FLAG_FOR_SIRNAK_TR_73 = "\U0001f3f4\U000e0074\U000e0072\U000e0037\U000e0033\U000e007f" + FLAG_FOR_ZAGREB_HR_21 = "\U0001f3f4\U000e0068\U000e0072\U000e0032\U000e0031\U000e007f" + FLAG_FOR_GRAND_ANSE_HT_GA = "\U0001f3f4\U000e0068\U000e0074\U000e0067\U000e0061\U000e007f" + FLAG_FOR_LISBON_PT_11 = "\U0001f3f4\U000e0070\U000e0074\U000e0031\U000e0031\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f476\U0001f3fc\u200d\U0001f467\U0001f3fc" FLAG_FOR_CHAGANG_KP_04 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0034\U000e007f" - FLAG_FOR_NEVIS_KN_N = "\U0001f3f4\U000e006b\U000e006e\U000e006e\U000e007f" - FLAG_FOR_KAMPONG_SPEU_KH_5 = "\U0001f3f4\U000e006b\U000e0068\U000e0035\U000e007f" - FLAG_FOR_KANGWON_KP_07 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0037\U000e007f" - FLAG_FOR_INCHEON_KR_28 = "\U0001f3f4\U000e006b\U000e0072\U000e0032\U000e0038\U000e007f" - FLAG_FOR_NORTH_GYEONGSANG_KR_47 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0037\U000e007f" - FLAG_FOR_RYANGGANG_KP_10 = "\U0001f3f4\U000e006b\U000e0070\U000e0031\U000e0030\U000e007f" - FLAG_FOR_KANDAL_KH_8 = "\U0001f3f4\U000e006b\U000e0068\U000e0038\U000e007f" - FLAG_FOR_KAMPONG_THOM_KH_6 = "\U0001f3f4\U000e006b\U000e0068\U000e0036\U000e007f" - FLAG_FOR_RASON_KP_13 = "\U0001f3f4\U000e006b\U000e0070\U000e0031\U000e0033\U000e007f" - FLAG_FOR_DAEGU_KR_27 = "\U0001f3f4\U000e006b\U000e0072\U000e0032\U000e0037\U000e007f" - FLAG_FOR_SOUTH_HWANGHAE_KP_05 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0035\U000e007f" - FLAG_FOR_NORTH_JEOLLA_KR_45 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0035\U000e007f" FLAG_FOR_SOUTH_HAMGYONG_KP_08 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0038\U000e007f" - FLAG_FOR_NORTH_CHUNGCHEONG_KR_43 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0033\U000e007f" - FLAG_FOR_GANGWON_KR_42 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0032\U000e007f" FLAG_FOR_SOUTH_CHUNGCHEONG_KR_44 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0034\U000e007f" - FLAG_FOR_NORTH_HAMGYONG_KP_09 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0039\U000e007f" - TAG_EQUALS_SIGN = "\U000e003d" - FLAG_FOR_OUDOMXAY_LA_OU = "\U0001f3f4\U000e006c\U000e0061\U000e006f\U000e0075\U000e007f" - FLAG_FOR_KARAGANDY_KZ_KAR = "\U0001f3f4\U000e006b\U000e007a\U000e006b\U000e0061\U000e0072\U000e007f" - FLAG_FOR_MANGYSTAU_KZ_MAN = "\U0001f3f4\U000e006b\U000e007a\U000e006d\U000e0061\U000e006e\U000e007f" - FLAG_FOR_HOUAPHANH_LA_HO = "\U0001f3f4\U000e006c\U000e0061\U000e0068\U000e006f\U000e007f" - FLAG_FOR_NORTH_KAZAKHSTAN_KZ_SEV = "\U0001f3f4\U000e006b\U000e007a\U000e0073\U000e0065\U000e0076\U000e007f" - FLAG_FOR_SEJONG_KR_50 = "\U0001f3f4\U000e006b\U000e0072\U000e0035\U000e0030\U000e007f" - FLAG_FOR_CHAMPASAK_LA_CH = "\U0001f3f4\U000e006c\U000e0061\U000e0063\U000e0068\U000e007f" - FLAG_FOR_AL_AHMADI_KW_AH = "\U0001f3f4\U000e006b\U000e0077\U000e0061\U000e0068\U000e007f" - TAG_LATIN_CAPITAL_LETTER_F = "\U000e0046" - FLAG_FOR_AKTOBE_KZ_AKT = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e006b\U000e0074\U000e007f" - FLAG_FOR_AL_ASIMAH_KW_KU = "\U0001f3f4\U000e006b\U000e0077\U000e006b\U000e0075\U000e007f" - FLAG_FOR_AL_JAHRA_KW_JA = "\U0001f3f4\U000e006b\U000e0077\U000e006a\U000e0061\U000e007f" - FLAG_FOR_KOSTANAY_KZ_KUS = "\U0001f3f4\U000e006b\U000e007a\U000e006b\U000e0075\U000e0073\U000e007f" - FLAG_FOR_KYZYLORDA_KZ_KZY = "\U0001f3f4\U000e006b\U000e007a\U000e006b\U000e007a\U000e0079\U000e007f" - FLAG_FOR_JAMBYL_KZ_ZHA = "\U0001f3f4\U000e006b\U000e007a\U000e007a\U000e0068\U000e0061\U000e007f" - FLAG_FOR_VIENTIANE_LA_VT = "\U0001f3f4\U000e006c\U000e0061\U000e0076\U000e0074\U000e007f" - TAG_LATIN_CAPITAL_LETTER_O = "\U000e004f" - FLAG_FOR_LUANG_PRABANG_LA_LP = "\U0001f3f4\U000e006c\U000e0061\U000e006c\U000e0070\U000e007f" + FLAG_FOR_MOUNT_ATHOS_GR_69 = "\U0001f3f4\U000e0067\U000e0072\U000e0036\U000e0039\U000e007f" + WOMAN_IN_BUSINESS_SUIT_LEVITATING_MEDIUM_SKIN_TONE = "\U0001f574\U0001f3fd\u200d\u2640\ufe0f" + FLAG_FOR_RASON_KP_13 = "\U0001f3f4\U000e006b\U000e0070\U000e0031\U000e0033\U000e007f" + FLAG_FOR_INCHEON_KR_28 = "\U0001f3f4\U000e006b\U000e0072\U000e0032\U000e0038\U000e007f" + FLAG_FOR_KAMPONG_THOM_KH_6 = "\U0001f3f4\U000e006b\U000e0068\U000e0036\U000e007f" + FLAG_FOR_EAST_MACEDONIA_AND_THRACE_GR_A = "\U0001f3f4\U000e0067\U000e0072\U000e0061\U000e007f" + FLAG_FOR_AIN_DEFLA_DZ_44 = "\U0001f3f4\U000e0064\U000e007a\U000e0034\U000e0034\U000e007f" + FLAG_FOR_NORTH_PYONGAN_KP_03 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0033\U000e007f" + FLAG_FOR_GANGWON_KR_42 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0032\U000e007f" + FLAG_FOR_KAMPONG_SPEU_KH_5 = "\U0001f3f4\U000e006b\U000e0068\U000e0035\U000e007f" + FLAG_FOR_CENTRAL_OSTROBOTHNIA_FI_07 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0037\U000e007f" + FLAG_FOR_SOUTH_HWANGHAE_KP_05 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0035\U000e007f" + FLAG_FOR_ULSAN_KR_31 = "\U0001f3f4\U000e006b\U000e0072\U000e0033\U000e0031\U000e007f" + FLAG_FOR_NORTH_BANK_DIVISION_GM_N = "\U0001f3f4\U000e0067\U000e006d\U000e006e\U000e007f" + COUPLE_WITH_HEART_WOMAN_DARK_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fc" FLAG_FOR_AL_FARWANIYAH_KW_FA = "\U0001f3f4\U000e006b\U000e0077\U000e0066\U000e0061\U000e007f" - FLAG_FOR_GYEONGGI_KR_41 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0031\U000e007f" - FLAG_FOR_ATYRAU_KZ_ATY = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e0074\U000e0079\U000e007f" - FLAG_FOR_ALMATY_REGION_KZ_ALM = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e006c\U000e006d\U000e007f" - FLAG_FOR_PAVLODAR_KZ_PAV = "\U0001f3f4\U000e006b\U000e007a\U000e0070\U000e0061\U000e0076\U000e007f" + FLAG_FOR_KARAGANDY_KZ_KAR = "\U0001f3f4\U000e006b\U000e007a\U000e006b\U000e0061\U000e0072\U000e007f" + FLAG_FOR_SERMERSOOQ_GL_SM = "\U0001f3f4\U000e0067\U000e006c\U000e0073\U000e006d\U000e007f" FLAG_FOR_PHONGSALY_LA_PH = "\U0001f3f4\U000e006c\U000e0061\U000e0070\U000e0068\U000e007f" + FLAG_FOR_OUDOMXAY_LA_OU = "\U0001f3f4\U000e006c\U000e0061\U000e006f\U000e0075\U000e007f" + FLAG_FOR_ATYRAU_KZ_ATY = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e0074\U000e0079\U000e007f" FLAG_FOR_LUANG_NAMTHA_LA_LM = "\U0001f3f4\U000e006c\U000e0061\U000e006c\U000e006d\U000e007f" + FLAG_FOR_LUANG_PRABANG_LA_LP = "\U0001f3f4\U000e006c\U000e0061\U000e006c\U000e0070\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_WOMAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f469\U0001f3ff\u200d\U0001f476\U0001f3ff\u200d\U0001f466\U0001f3ff" + FLAG_FOR_HONG_KONG_SAR_CHINA_CN_91 = "\U0001f3f4\U000e0063\U000e006e\U000e0039\U000e0031\U000e007f" + FLAG_FOR_VIENTIANE_LA_VT = "\U0001f3f4\U000e006c\U000e0061\U000e0076\U000e0074\U000e007f" + FLAG_FOR_NORTH_CHUNGCHEONG_KR_43 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0033\U000e007f" + FLAG_FOR_JAMBYL_KZ_ZHA = "\U0001f3f4\U000e006b\U000e007a\U000e007a\U000e0068\U000e0061\U000e007f" + FLAG_FOR_QOM_IR_26 = "\U0001f3f4\U000e0069\U000e0072\U000e0032\U000e0036\U000e007f" FLAG_FOR_MUBARAK_AL_KABEER_KW_MU = "\U0001f3f4\U000e006b\U000e0077\U000e006d\U000e0075\U000e007f" - FLAG_FOR_CATALONIA_ES_CT = "\U0001f3f4\U000e0065\U000e0073\U000e0063\U000e0074\U000e007f" - FLAG_FOR_SALAVAN_LA_SL = "\U0001f3f4\U000e006c\U000e0061\U000e0073\U000e006c\U000e007f" - FLAG_FOR_GRANDE_COMORE_KM_G = "\U0001f3f4\U000e006b\U000e006d\U000e0067\U000e007f" + FLAG_FOR_KYZYLORDA_KZ_KZY = "\U0001f3f4\U000e006b\U000e007a\U000e006b\U000e007a\U000e0079\U000e007f" + FLAG_FOR_AL_JAHRA_KW_JA = "\U0001f3f4\U000e006b\U000e0077\U000e006a\U000e0061\U000e007f" + FLAG_FOR_AL_ASIMAH_KW_KU = "\U0001f3f4\U000e006b\U000e0077\U000e006b\U000e0075\U000e007f" + FLAG_FOR_GYEONGGI_KR_41 = "\U0001f3f4\U000e006b\U000e0072\U000e0034\U000e0031\U000e007f" + FLAG_FOR_PAVLODAR_KZ_PAV = "\U0001f3f4\U000e006b\U000e007a\U000e0070\U000e0061\U000e0076\U000e007f" FLAG_FOR_ANJOUAN_KM_A = "\U0001f3f4\U000e006b\U000e006d\U000e0061\U000e007f" - FLAG_FOR_ALMATY_KZ_ALA = "\U0001f3f4\U000e006b\U000e007a\U000e0061\U000e006c\U000e0061\U000e007f" - FLAG_FOR_SAINYABULI_LA_XA = "\U0001f3f4\U000e006c\U000e0061\U000e0078\U000e0061\U000e007f" - FLAG_FOR_LABORIE_LC_07 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0037\U000e007f" - FLAG_FOR_CHOISEUL_LC_03 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0033\U000e007f" - FLAG_FOR_GROS_ISLET_LC_06 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0036\U000e007f" - FLAG_FOR_NORTH_LB_AS = "\U0001f3f4\U000e006c\U000e0062\U000e0061\U000e0073\U000e007f" - FLAG_FOR_CENTRAL_LK_2 = "\U0001f3f4\U000e006c\U000e006b\U000e0032\U000e007f" - FLAG_FOR_CANARIES_LC_12 = "\U0001f3f4\U000e006c\U000e0063\U000e0031\U000e0032\U000e007f" - FLAG_FOR_BAALBEK_HERMEL_LB_BH = "\U0001f3f4\U000e006c\U000e0062\U000e0062\U000e0068\U000e007f" - FLAG_FOR_VADUZ_LI_11 = "\U0001f3f4\U000e006c\U000e0069\U000e0031\U000e0031\U000e007f" - FLAG_FOR_MICOUD_LC_08 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0038\U000e007f" - FLAG_FOR_NORTH_CENTRAL_LK_7 = "\U0001f3f4\U000e006c\U000e006b\U000e0037\U000e007f" + FLAG_FOR_CHAMPASAK_LA_CH = "\U0001f3f4\U000e006c\U000e0061\U000e0063\U000e0068\U000e007f" + FLAG_FOR_SEJONG_KR_50 = "\U0001f3f4\U000e006b\U000e0072\U000e0035\U000e0030\U000e007f" + FLAG_FOR_NORTH_KAZAKHSTAN_KZ_SEV = "\U0001f3f4\U000e006b\U000e007a\U000e0073\U000e0065\U000e0076\U000e007f" + FLAG_FOR_HANOVER_JM_09 = "\U0001f3f4\U000e006a\U000e006d\U000e0030\U000e0039\U000e007f" + FLAG_FOR_UPPER_RIVER_DIVISION_GM_U = "\U0001f3f4\U000e0067\U000e006d\U000e0075\U000e007f" FLAG_FOR_MAUREN_LI_04 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0034\U000e007f" - FLAG_FOR_NABATIEH_LB_NA = "\U0001f3f4\U000e006c\U000e0062\U000e006e\U000e0061\U000e007f" - FLAG_FOR_DENNERY_LC_05 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0035\U000e007f" - FLAG_FOR_SOUTH_LB_JA = "\U0001f3f4\U000e006c\U000e0062\U000e006a\U000e0061\U000e007f" - FLAG_FOR_CASTRIES_LC_02 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0032\U000e007f" - FLAG_FOR_TRIESENBERG_LI_10 = "\U0001f3f4\U000e006c\U000e0069\U000e0031\U000e0030\U000e007f" - FLAG_FOR_PLANKEN_LI_05 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0035\U000e007f" - FLAG_FOR_TIBET_CN_54 = "\U0001f3f4\U000e0063\U000e006e\U000e0035\U000e0034\U000e007f" - FLAG_FOR_BEIRUT_LB_BA = "\U0001f3f4\U000e006c\U000e0062\U000e0062\U000e0061\U000e007f" - FLAG_FOR_RUGGELL_LI_06 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0036\U000e007f" - FLAG_FOR_UVA_LK_8 = "\U0001f3f4\U000e006c\U000e006b\U000e0038\U000e007f" - FLAG_FOR_ESCHEN_LI_02 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0032\U000e007f" - FLAG_FOR_NORTHERN_LK_4 = "\U0001f3f4\U000e006c\U000e006b\U000e0034\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_BOY_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f466\U0001f3fb\u200d\U0001f476\U0001f3fb" - FLAG_FOR_XIANGKHOUANG_LA_XI = "\U0001f3f4\U000e006c\U000e0061\U000e0078\U000e0069\U000e007f" + FLAG_FOR_BAALBEK_HERMEL_LB_BH = "\U0001f3f4\U000e006c\U000e0062\U000e0062\U000e0068\U000e007f" + FLAG_FOR_NORTH_CENTRAL_LK_7 = "\U0001f3f4\U000e006c\U000e006b\U000e0037\U000e007f" FLAG_FOR_SOUFRIERE_LC_10 = "\U0001f3f4\U000e006c\U000e0063\U000e0031\U000e0030\U000e007f" - FLAG_FOR_GARISSA_KE_07 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0037\U000e007f" - FLAG_FOR_NORTH_WESTERN_LK_6 = "\U0001f3f4\U000e006c\U000e006b\U000e0036\U000e007f" - FLAG_FOR_ANSE_LA_RAYE_LC_01 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0031\U000e007f" + FLAG_FOR_NORTHERN_LK_4 = "\U0001f3f4\U000e006c\U000e006b\U000e0034\U000e007f" FLAG_FOR_TRIESEN_LI_09 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0039\U000e007f" + FLAG_FOR_BJELOVAR_BILOGORA_HR_07 = "\U0001f3f4\U000e0068\U000e0072\U000e0030\U000e0037\U000e007f" + FLAG_FOR_SAINYABULI_LA_XA = "\U0001f3f4\U000e006c\U000e0061\U000e0078\U000e0061\U000e007f" + FLAG_FOR_SOUTHERN_SAVONIA_FI_04 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0034\U000e007f" + FLAG_FOR_UVA_LK_8 = "\U0001f3f4\U000e006c\U000e006b\U000e0038\U000e007f" FLAG_FOR_GAMPRIN_LI_03 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0033\U000e007f" - FLAG_FOR_AKKAR_LB_AK = "\U0001f3f4\U000e006c\U000e0062\U000e0061\U000e006b\U000e007f" - FLAG_FOR_BALZERS_LI_01 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0031\U000e007f" - FLAG_FOR_BUTHA_BUTHE_LS_B = "\U0001f3f4\U000e006c\U000e0073\U000e0062\U000e007f" - FLAG_FOR_BIRZAI_LT_06 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0036\U000e007f" - FLAG_FOR_JURBARKAS_LT_12 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0032\U000e007f" - FLAG_FOR_BIHAR_IN_BR = "\U0001f3f4\U000e0069\U000e006e\U000e0062\U000e0072\U000e007f" - FLAG_FOR_BEREA_LS_D = "\U0001f3f4\U000e006c\U000e0073\U000e0064\U000e007f" - FLAG_FOR_GRAND_KRU_LR_GK = "\U0001f3f4\U000e006c\U000e0072\U000e0067\U000e006b\U000e007f" - FLAG_FOR_SINOE_LR_SI = "\U0001f3f4\U000e006c\U000e0072\U000e0073\U000e0069\U000e007f" - FLAG_FOR_BOMI_LR_BM = "\U0001f3f4\U000e006c\U000e0072\U000e0062\U000e006d\U000e007f" - FLAG_FOR_GBARPOLU_LR_GP = "\U0001f3f4\U000e006c\U000e0072\U000e0067\U000e0070\U000e007f" + FLAG_FOR_ESCHEN_LI_02 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0032\U000e007f" + FLAG_FOR_SOUTH_LB_JA = "\U0001f3f4\U000e006c\U000e0062\U000e006a\U000e0061\U000e007f" + FLAG_FOR_NORTH_LB_AS = "\U0001f3f4\U000e006c\U000e0062\U000e0061\U000e0073\U000e007f" + FLAG_FOR_RUGGELL_LI_06 = "\U0001f3f4\U000e006c\U000e0069\U000e0030\U000e0036\U000e007f" + FLAG_FOR_NORTH_WESTERN_LK_6 = "\U0001f3f4\U000e006c\U000e006b\U000e0036\U000e007f" + FLAG_FOR_GROS_ISLET_LC_06 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0036\U000e007f" + FLAG_FOR_NABATIEH_LB_NA = "\U0001f3f4\U000e006c\U000e0062\U000e006e\U000e0061\U000e007f" + FLAG_FOR_GRANDE_COMORE_KM_G = "\U0001f3f4\U000e006b\U000e006d\U000e0067\U000e007f" + FLAG_FOR_CASTRIES_LC_02 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0032\U000e007f" + FLAG_FOR_VADUZ_LI_11 = "\U0001f3f4\U000e006c\U000e0069\U000e0031\U000e0031\U000e007f" + FLAG_FOR_KOSTANAY_KZ_KUS = "\U0001f3f4\U000e006b\U000e007a\U000e006b\U000e0075\U000e0073\U000e007f" + FLAG_FOR_CHOISEUL_LC_03 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0033\U000e007f" + FLAG_FOR_CENTRAL_LK_2 = "\U0001f3f4\U000e006c\U000e006b\U000e0032\U000e007f" + FLAG_FOR_DENNERY_LC_05 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0035\U000e007f" + FLAG_FOR_GARISSA_KE_07 = "\U0001f3f4\U000e006b\U000e0065\U000e0030\U000e0037\U000e007f" + FLAG_FOR_ANSE_LA_RAYE_LC_01 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0031\U000e007f" + FLAG_FOR_RYANGGANG_KP_10 = "\U0001f3f4\U000e006b\U000e0070\U000e0031\U000e0030\U000e007f" FLAG_FOR_JONAVA_LT_10 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0030\U000e007f" FLAG_FOR_MOHALE_S_HOEK_LS_F = "\U0001f3f4\U000e006c\U000e0073\U000e0066\U000e007f" - FLAG_FOR_SICILY_IT_82 = "\U0001f3f4\U000e0069\U000e0074\U000e0038\U000e0032\U000e007f" - FLAG_FOR_BIRSTONAS_LT_05 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0035\U000e007f" - FLAG_FOR_NIMBA_LR_NI = "\U0001f3f4\U000e006c\U000e0072\U000e006e\U000e0069\U000e007f" - FLAG_FOR_CENTRAL_FINLAND_FI_08 = "\U0001f3f4\U000e0066\U000e0069\U000e0030\U000e0038\U000e007f" - FLAG_FOR_DRUSKININKAI_LT_07 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0037\U000e007f" - FLAG_FOR_QUTHING_LS_G = "\U0001f3f4\U000e006c\U000e0073\U000e0067\U000e007f" - FLAG_FOR_KAUNO_MUNICIPALITY_LT_15 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0035\U000e007f" - FLAG_FOR_QACHA_S_NEK_LS_H = "\U0001f3f4\U000e006c\U000e0073\U000e0068\U000e007f" - FLAG_FOR_LERIBE_LS_C = "\U0001f3f4\U000e006c\U000e0073\U000e0063\U000e007f" - FLAG_FOR_JONISKIS_LT_11 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0031\U000e007f" - FLAG_FOR_MOKHOTLONG_LS_J = "\U0001f3f4\U000e006c\U000e0073\U000e006a\U000e007f" - FLAG_FOR_KAISIADORYS_LT_13 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0033\U000e007f" - FLAG_FOR_ELEKTRENAI_LT_08 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0038\U000e007f" - FLAG_FOR_NANA_GREBIZI_CF_KB = "\U0001f3f4\U000e0063\U000e0066\U000e006b\U000e0062\U000e007f" - FLAG_FOR_MARGIBI_LR_MG = "\U0001f3f4\U000e006c\U000e0072\U000e006d\U000e0067\U000e007f" FLAG_FOR_KALVARIJA_LT_14 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0034\U000e007f" - FLAG_FOR_KAUNAS_LT_16 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0036\U000e007f" - FLAG_FOR_AKMENE_LT_01 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0031\U000e007f" - FLAG_FOR_RIVERCESS_LR_RI = "\U0001f3f4\U000e006c\U000e0072\U000e0072\U000e0069\U000e007f" - FLAG_FOR_THABA_TSEKA_LS_K = "\U0001f3f4\U000e006c\U000e0073\U000e006b\U000e007f" + FLAG_FOR_GBARPOLU_LR_GP = "\U0001f3f4\U000e006c\U000e0072\U000e0067\U000e0070\U000e007f" + TAG_LATIN_CAPITAL_LETTER_F = "\U000e0046" + FLAG_FOR_NORTH_KIVU_CD_NK = "\U0001f3f4\U000e0063\U000e0064\U000e006e\U000e006b\U000e007f" FLAG_FOR_IGNALINA_LT_09 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0039\U000e007f" - FLAG_FOR_GRAND_BASSA_LR_GB = "\U0001f3f4\U000e006c\U000e0072\U000e0067\U000e0062\U000e007f" FLAG_FOR_MAFETENG_LS_E = "\U0001f3f4\U000e006c\U000e0073\U000e0065\U000e007f" - FLAG_FOR_ANYKSCIAI_LT_04 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0034\U000e007f" - FLAG_FOR_LOFA_LR_LO = "\U0001f3f4\U000e006c\U000e0072\U000e006c\U000e006f\U000e007f" - FLAG_FOR_FRENCH_GUIANA_FR_GF = "\U0001f3f4\U000e0066\U000e0072\U000e0067\U000e0066\U000e007f" + UNIVERSAL_RECYCLING_SYMBOL = "\u2672" + FLAG_FOR_BIHAR_IN_BR = "\U0001f3f4\U000e0069\U000e006e\U000e0062\U000e0072\U000e007f" + FLAG_FOR_THABA_TSEKA_LS_K = "\U0001f3f4\U000e006c\U000e0073\U000e006b\U000e007f" FLAG_FOR_ALYTUS_LT_03 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0033\U000e007f" - FLAG_FOR_VILKAVISKIS_LT_56 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0036\U000e007f" - FLAG_FOR_SAKIAI_LT_41 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0031\U000e007f" - FLAG_FOR_SALCININKAI_LT_42 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0032\U000e007f" - FLAG_FOR_PANEVEZYS_LT_33 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0033\U000e007f" - FLAG_FOR_MOLETAI_LT_27 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0037\U000e007f" - FLAG_FOR_NERINGA_LT_28 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0038\U000e007f" - FLAG_FOR_RASEINIAI_LT_38 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0038\U000e007f" + FLAG_FOR_DRUSKININKAI_LT_07 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0037\U000e007f" + FLAG_FOR_MOKHOTLONG_LS_J = "\U0001f3f4\U000e006c\U000e0073\U000e006a\U000e007f" + FLAG_FOR_KAUNO_MUNICIPALITY_LT_15 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0035\U000e007f" + FLAG_FOR_JONISKIS_LT_11 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0031\U000e007f" + FLAG_FOR_QACHA_S_NEK_LS_H = "\U0001f3f4\U000e006c\U000e0073\U000e0068\U000e007f" + FLAG_FOR_BEREA_LS_D = "\U0001f3f4\U000e006c\U000e0073\U000e0064\U000e007f" + FLAG_FOR_NIMBA_LR_NI = "\U0001f3f4\U000e006c\U000e0072\U000e006e\U000e0069\U000e007f" + FLAG_FOR_ELEKTRENAI_LT_08 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0038\U000e007f" + FLAG_FOR_ERBIL_IQ_AR = "\U0001f3f4\U000e0069\U000e0071\U000e0061\U000e0072\U000e007f" + FLAG_FOR_KANGWON_KP_07 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0037\U000e007f" + FLAG_FOR_KAISIADORYS_LT_13 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0033\U000e007f" + FLAG_FOR_BUTHA_BUTHE_LS_B = "\U0001f3f4\U000e006c\U000e0073\U000e0062\U000e007f" + FLAG_FOR_BIRSTONAS_LT_05 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0035\U000e007f" + FLAG_FOR_KIRINYAGA_KE_15 = "\U0001f3f4\U000e006b\U000e0065\U000e0031\U000e0035\U000e007f" + FLAG_FOR_ANYKSCIAI_LT_04 = "\U0001f3f4\U000e006c\U000e0074\U000e0030\U000e0034\U000e007f" + FLAG_FOR_JURBARKAS_LT_12 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0032\U000e007f" FLAG_FOR_UTENA_LT_54 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0034\U000e007f" - FLAG_FOR_SILUTE_LT_46 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0036\U000e007f" - FLAG_FOR_PALANGA_LT_31 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0031\U000e007f" - FLAG_FOR_KEDAINIAI_LT_18 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0038\U000e007f" - FLAG_FOR_ROKISKIS_LT_40 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0030\U000e007f" - FLAG_FOR_SILALE_LT_45 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0035\U000e007f" - FLAG_FOR_PAGEGIAI_LT_29 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0039\U000e007f" - FLAG_FOR_TRAKAI_LT_52 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0032\U000e007f" - FLAG_FOR_RADVILISKIS_LT_37 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0037\U000e007f" - FLAG_FOR_TELSIAI_LT_51 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0031\U000e007f" - FLAG_FOR_KAZLU_RUDA_LT_17 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0037\U000e007f" - FLAG_FOR_SIRVINTOS_LT_47 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0037\U000e007f" - FLAG_FOR_PRIENAI_LT_36 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0036\U000e007f" - FLAG_FOR_PAKRUOJIS_LT_30 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0030\U000e007f" - FLAG_FOR_SIAULIU_MUNICIPALITY_LT_43 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0033\U000e007f" - FLAG_FOR_SIAULIAI_LT_44 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0034\U000e007f" - FLAG_FOR_POHNPEI_FM_PNI = "\U0001f3f4\U000e0066\U000e006d\U000e0070\U000e006e\U000e0069\U000e007f" - FLAG_FOR_KELME_LT_19 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0039\U000e007f" - FLAG_FOR_VARENA_LT_55 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0035\U000e007f" FLAG_FOR_PASVALYS_LT_34 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0034\U000e007f" - FLAG_FOR_PLUNGE_LT_35 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0035\U000e007f" - FLAG_FOR_KRETINGA_LT_22 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0032\U000e007f" - FLAG_FOR_SVENCIONYS_LT_49 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0039\U000e007f" + FLAG_FOR_PRIENAI_LT_36 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0036\U000e007f" + FLAG_FOR_KUPISKIS_LT_23 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0033\U000e007f" + FLAG_FOR_ROKISKIS_LT_40 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0030\U000e007f" + FLAG_FOR_SIAULIU_MUNICIPALITY_LT_43 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0033\U000e007f" + FLAG_FOR_KAZLU_RUDA_LT_17 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0037\U000e007f" + FLAG_FOR_TELSIAI_LT_51 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0031\U000e007f" FLAG_FOR_KLAIPEDA_LT_21 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0031\U000e007f" - FLAG_FOR_LAZDIJAI_LT_24 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0034\U000e007f" + FLAG_FOR_KEDAINIAI_LT_18 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0038\U000e007f" + FLAG_FOR_SIAULIAI_LT_44 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0034\U000e007f" + FLAG_FOR_PALANGA_LT_31 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0031\U000e007f" + FLAG_FOR_PANEVEZYS_LT_33 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0033\U000e007f" + FLAG_FOR_SILALE_LT_45 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0035\U000e007f" + FLAG_FOR_SAKIAI_LT_41 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0031\U000e007f" FLAG_FOR_TAURAGE_LT_50 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0030\U000e007f" + FLAG_FOR_MOLETAI_LT_27 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0037\U000e007f" FLAG_FOR_SKUODAS_LT_48 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0038\U000e007f" FLAG_FOR_UKMERGE_LT_53 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0033\U000e007f" + FLAG_FOR_VILKAVISKIS_LT_56 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0036\U000e007f" + FLAG_FOR_PAGEGIAI_LT_29 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0039\U000e007f" FLAG_FOR_RIETAVAS_LT_39 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0039\U000e007f" + FLAG_FOR_SILUTE_LT_46 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0036\U000e007f" + FLAG_FOR_SVENCIONYS_LT_49 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0039\U000e007f" + FLAG_FOR_GRAND_BASSA_LR_GB = "\U0001f3f4\U000e006c\U000e0072\U000e0067\U000e0062\U000e007f" + FLAG_FOR_TRAKAI_LT_52 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0032\U000e007f" + FLAG_FOR_LAZDIJAI_LT_24 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0034\U000e007f" FLAG_FOR_MARIJAMPOLE_LT_25 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0035\U000e007f" + FLAG_FOR_VARENA_LT_55 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0035\U000e007f" FLAG_FOR_MAZEIKIAI_LT_26 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0036\U000e007f" - FLAG_FOR_KUPISKIS_LT_23 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0033\U000e007f" - FLAG_FOR_CLERVAUX_LU_CL = "\U0001f3f4\U000e006c\U000e0075\U000e0063\U000e006c\U000e007f" - FLAG_FOR_TELSIAI_COUNTY_LT_TE = "\U0001f3f4\U000e006c\U000e0074\U000e0074\U000e0065\U000e007f" - FLAG_FOR_TAURAGE_COUNTY_LT_TA = "\U0001f3f4\U000e006c\U000e0074\U000e0074\U000e0061\U000e007f" - FLAG_FOR_REDANGE_LU_RD = "\U0001f3f4\U000e006c\U000e0075\U000e0072\U000e0064\U000e007f" - FLAG_FOR_ALOJA_LV_005 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0035\U000e007f" - FLAG_FOR_MARIJAMPOLE_COUNTY_LT_MR = "\U0001f3f4\U000e006c\U000e0074\U000e006d\U000e0072\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd" - FLAG_FOR_MERSCH_LU_ME = "\U0001f3f4\U000e006c\U000e0075\U000e006d\U000e0065\U000e007f" - FLAG_FOR_ADAZI_LV_011 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0031\U000e007f" - FLAG_FOR_ECHTERNACH_LU_EC = "\U0001f3f4\U000e006c\U000e0075\U000e0065\U000e0063\U000e007f" - FLAG_FOR_KLAIPEDA_COUNTY_LT_KL = "\U0001f3f4\U000e006c\U000e0074\U000e006b\U000e006c\U000e007f" - FLAG_FOR_ZARASAI_LT_60 = "\U0001f3f4\U000e006c\U000e0074\U000e0036\U000e0030\U000e007f" - FLAG_FOR_BALDONE_LV_013 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0033\U000e007f" - FLAG_FOR_AMATA_LV_008 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0038\U000e007f" - FLAG_FOR_ALYTUS_COUNTY_LT_AL = "\U0001f3f4\U000e006c\U000e0074\U000e0061\U000e006c\U000e007f" - FLAG_FOR_GREVENMACHER_LU_GR = "\U0001f3f4\U000e006c\U000e0075\U000e0067\U000e0072\U000e007f" - FLAG_FOR_AGLONA_LV_001 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0031\U000e007f" - FLAG_FOR_VIANDEN_LU_VD = "\U0001f3f4\U000e006c\U000e0075\U000e0076\U000e0064\U000e007f" - FLAG_FOR_AIZKRAUKLE_LV_002 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0032\U000e007f" - FLAG_FOR_UTENA_COUNTY_LT_UT = "\U0001f3f4\U000e006c\U000e0074\U000e0075\U000e0074\U000e007f" - FLAG_FOR_SIAULIAI_COUNTY_LT_SA = "\U0001f3f4\U000e006c\U000e0074\U000e0073\U000e0061\U000e007f" - FLAG_FOR_VILNIUS_COUNTY_LT_VL = "\U0001f3f4\U000e006c\U000e0074\U000e0076\U000e006c\U000e007f" - FLAG_FOR_DAMAN_AND_DIU_IN_DD = "\U0001f3f4\U000e0069\U000e006e\U000e0064\U000e0064\U000e007f" - FLAG_FOR_VILNIUS_LT_58 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0038\U000e007f" - FLAG_FOR_DIEKIRCH_LU_DI = "\U0001f3f4\U000e006c\U000e0075\U000e0064\U000e0069\U000e007f" - FLAG_FOR_WILTZ_LU_WI = "\U0001f3f4\U000e006c\U000e0075\U000e0077\U000e0069\U000e007f" - FLAG_FOR_GITEGA_BI_GI = "\U0001f3f4\U000e0062\U000e0069\U000e0067\U000e0069\U000e007f" - FLAG_FOR_MOUNT_LEBANON_LB_JL = "\U0001f3f4\U000e006c\U000e0062\U000e006a\U000e006c\U000e007f" - FLAG_FOR_ALUKSNE_LV_007 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0037\U000e007f" - FLAG_FOR_VISAGINAS_LT_59 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0039\U000e007f" - FLAG_FOR_REMICH_LU_RM = "\U0001f3f4\U000e006c\U000e0075\U000e0072\U000e006d\U000e007f" - FLAG_FOR_AKNISTE_LV_004 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0034\U000e007f" - FLAG_FOR_ESCH_SUR_ALZETTE_LU_ES = "\U0001f3f4\U000e006c\U000e0075\U000e0065\U000e0073\U000e007f" + FLAG_FOR_PLUNGE_LT_35 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0035\U000e007f" + FLAG_FOR_RADVILISKIS_LT_37 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0037\U000e007f" + FLAG_FOR_KRETINGA_LT_22 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0032\U000e007f" + FLAG_FOR_KELME_LT_19 = "\U0001f3f4\U000e006c\U000e0074\U000e0031\U000e0039\U000e007f" + FLAG_FOR_SIRVINTOS_LT_47 = "\U0001f3f4\U000e006c\U000e0074\U000e0034\U000e0037\U000e007f" + FLAG_FOR_NERINGA_LT_28 = "\U0001f3f4\U000e006c\U000e0074\U000e0032\U000e0038\U000e007f" FLAG_FOR_AIZPUTE_LV_003 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0033\U000e007f" - FLAG_FOR_JAUNPILS_LV_040 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0030\U000e007f" - FLAG_FOR_BURTNIEKI_LV_019 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0039\U000e007f" - FLAG_FOR_BALVI_LV_015 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0035\U000e007f" - FLAG_FOR_BEVERINA_LV_017 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0037\U000e007f" - FLAG_FOR_DUNDAGA_LV_027 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0037\U000e007f" - FLAG_FOR_CESVAINE_LV_021 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0031\U000e007f" - FLAG_FOR_ILUKSTE_LV_036 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0036\U000e007f" - TAG_LATIN_CAPITAL_LETTER_Z = "\U000e005a" - FLAG_FOR_GROBINA_LV_032 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0032\U000e007f" - FLAG_FOR_GULBENE_LV_033 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0033\U000e007f" - FLAG_FOR_KANDAVA_LV_043 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0033\U000e007f" - FLAG_FOR_BROCENI_LV_018 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0038\U000e007f" - FLAG_FOR_KRIMULDA_LV_048 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0038\U000e007f" - FLAG_FOR_CARNIKAVA_LV_020 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0030\U000e007f" - FLAG_FOR_KRUSTPILS_LV_049 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0039\U000e007f" - FAMILY_WOMAN_MEDIUM_DARK_SKIN_TONE_MAN_MEDIUM_DARK_SKIN_TONE_BABY_MEDIUM_DARK_SKIN_TONE = "\U0001f469\U0001f3fe\u200d\U0001f468\U0001f3fe\u200d\U0001f476\U0001f3fe" - FLAG_FOR_DOBELE_LV_026 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0036\U000e007f" - FLAG_FOR_KOCENI_LV_045 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0035\U000e007f" - FLAG_FOR_GARKALNE_LV_031 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0031\U000e007f" - FLAG_FOR_ERGLI_LV_030 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0030\U000e007f" - FLAG_FOR_DURBE_LV_028 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0038\U000e007f" - FLAG_FOR_KRASLAVA_LV_047 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0037\U000e007f" - FLAG_FOR_DAGDA_LV_024 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0034\U000e007f" - FLAG_FOR_JAUNJELGAVA_LV_038 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0038\U000e007f" - FLAG_FOR_BAUSKA_LV_016 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0036\U000e007f" - FLAG_FOR_BALTINAVA_LV_014 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0034\U000e007f" - FLAG_FOR_IECAVA_LV_034 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0034\U000e007f" - FLAG_FOR_JEKABPILS_MUNICIPALITY_LV_042 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0032\U000e007f" - FLAG_FOR_JAUNPIEBALGA_LV_039 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0039\U000e007f" - FLAG_FOR_CESIS_LV_022 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0032\U000e007f" + FLAG_FOR_GREVENMACHER_LU_GR = "\U0001f3f4\U000e006c\U000e0075\U000e0067\U000e0072\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_MAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f468\U0001f3fd\u200d\U0001f476\U0001f3fd" + FLAG_FOR_BALDONE_LV_013 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0033\U000e007f" + FLAG_FOR_AKNISTE_LV_004 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0034\U000e007f" + FLAG_FOR_UTENA_COUNTY_LT_UT = "\U0001f3f4\U000e006c\U000e0074\U000e0075\U000e0074\U000e007f" + FLAG_FOR_ALYTUS_COUNTY_LT_AL = "\U0001f3f4\U000e006c\U000e0074\U000e0061\U000e006c\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f467\U0001f3fc" + FLAG_FOR_VISAGINAS_LT_59 = "\U0001f3f4\U000e006c\U000e0074\U000e0035\U000e0039\U000e007f" + KISS_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fc" + FLAG_FOR_KLAIPEDA_COUNTY_LT_KL = "\U0001f3f4\U000e006c\U000e0074\U000e006b\U000e006c\U000e007f" + FLAG_FOR_REMICH_LU_RM = "\U0001f3f4\U000e006c\U000e0075\U000e0072\U000e006d\U000e007f" + FLAG_FOR_RATANAKIRI_KH_16 = "\U0001f3f4\U000e006b\U000e0068\U000e0031\U000e0036\U000e007f" + FLAG_FOR_AMATA_LV_008 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0038\U000e007f" + FLAG_FOR_RASEINIAI_LT_38 = "\U0001f3f4\U000e006c\U000e0074\U000e0033\U000e0038\U000e007f" + FLAG_FOR_MERSCH_LU_ME = "\U0001f3f4\U000e006c\U000e0075\U000e006d\U000e0065\U000e007f" + FLAG_FOR_VIANDEN_LU_VD = "\U0001f3f4\U000e006c\U000e0075\U000e0076\U000e0064\U000e007f" + FLAG_FOR_CLERVAUX_LU_CL = "\U0001f3f4\U000e006c\U000e0075\U000e0063\U000e006c\U000e007f" + FLAG_FOR_VILNIUS_COUNTY_LT_VL = "\U0001f3f4\U000e006c\U000e0074\U000e0076\U000e006c\U000e007f" + FLAG_FOR_ECHTERNACH_LU_EC = "\U0001f3f4\U000e006c\U000e0075\U000e0065\U000e0063\U000e007f" + FLAG_FOR_DIEKIRCH_LU_DI = "\U0001f3f4\U000e006c\U000e0075\U000e0064\U000e0069\U000e007f" + FLAG_FOR_SIAULIAI_COUNTY_LT_SA = "\U0001f3f4\U000e006c\U000e0074\U000e0073\U000e0061\U000e007f" + FLAG_FOR_TAURAGE_COUNTY_LT_TA = "\U0001f3f4\U000e006c\U000e0074\U000e0074\U000e0061\U000e007f" + FLAG_FOR_MARIJAMPOLE_COUNTY_LT_MR = "\U0001f3f4\U000e006c\U000e0074\U000e006d\U000e0072\U000e007f" + FLAG_FOR_ADAZI_LV_011 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0031\U000e007f" + FLAG_FOR_ALUKSNE_LV_007 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0037\U000e007f" FLAG_FOR_KULDIGA_LV_050 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0030\U000e007f" + FLAG_FOR_BALVI_LV_015 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0035\U000e007f" + FLAG_FOR_LABORIE_LC_07 = "\U0001f3f4\U000e006c\U000e0063\U000e0030\U000e0037\U000e007f" FLAG_FOR_KARSAVA_LV_044 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0034\U000e007f" FLAG_FOR_KEGUMS_LV_051 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0031\U000e007f" - FLAG_FOR_IKSKILE_LV_035 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0035\U000e007f" + FLAG_FOR_BALTINAVA_LV_014 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0034\U000e007f" + FLAG_FOR_KRUSTPILS_LV_049 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0039\U000e007f" + FLAG_FOR_GROBINA_LV_032 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0032\U000e007f" + FLAG_FOR_BAUSKA_LV_016 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0036\U000e007f" + FLAG_FOR_DOBELE_LV_026 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0036\U000e007f" + FLAG_FOR_BROCENI_LV_018 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0038\U000e007f" + FLAG_FOR_IECAVA_LV_034 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0034\U000e007f" + FLAG_FOR_CESVAINE_LV_021 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0031\U000e007f" + FLAG_FOR_AJLOUN_JO_AJ = "\U0001f3f4\U000e006a\U000e006f\U000e0061\U000e006a\U000e007f" + FLAG_FOR_JAUNJELGAVA_LV_038 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0038\U000e007f" + FLAG_FOR_KOCENI_LV_045 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0035\U000e007f" + FLAG_FOR_GARKALNE_LV_031 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0031\U000e007f" + FLAG_FOR_AIZKRAUKLE_LV_002 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0030\U000e0032\U000e007f" FLAG_FOR_CIBLA_LV_023 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0033\U000e007f" - FLAG_FOR_ENGURE_LV_029 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0039\U000e007f" + FLAG_FOR_JAUNPIEBALGA_LV_039 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0039\U000e007f" + FLAG_FOR_DUNDAGA_LV_027 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0037\U000e007f" + FLAG_FOR_CESIS_LV_022 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0032\U000e007f" + FLAG_FOR_KRIMULDA_LV_048 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0038\U000e007f" + FLAG_FOR_CARNIKAVA_LV_020 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0030\U000e007f" + FLAG_FOR_IKSKILE_LV_035 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0035\U000e007f" + FLAG_FOR_GULBENE_LV_033 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0033\U000e007f" + FLAG_FOR_KRASLAVA_LV_047 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0037\U000e007f" + FLAG_FOR_JAUNPILS_LV_040 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0030\U000e007f" + FLAG_FOR_BURTNIEKI_LV_019 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0039\U000e007f" + FLAG_FOR_BEVERINA_LV_017 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0031\U000e0037\U000e007f" + FLAG_FOR_KANDAVA_LV_043 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0034\U000e0033\U000e007f" FLAG_FOR_LIGATNE_LV_055 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0035\U000e007f" - FLAG_FOR_NICA_LV_066 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0036\U000e007f" - FLAG_FOR_MALPILS_LV_061 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0031\U000e007f" - FLAG_FOR_RUGAJI_LV_082 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0032\U000e007f" - FLAG_FOR_PARGAUJA_LV_070 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0030\U000e007f" - FLAG_FOR_LIELVARDE_LV_053 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0033\U000e007f" - FLAG_FOR_PLAVINAS_LV_072 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0032\U000e007f" - FLAG_FOR_PAVILOSTA_LV_071 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0031\U000e007f" - FLAG_FOR_MADONA_LV_059 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0039\U000e007f" - FLAG_FOR_KEKAVA_LV_052 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0032\U000e007f" - FLAG_FOR_RAUNA_LV_076 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0036\U000e007f" - FLAG_FOR_LIMBAZI_LV_054 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0034\U000e007f" - FLAG_FOR_NAUKSENI_LV_064 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0034\U000e007f" - FLAG_FOR_RUCAVA_LV_081 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0031\U000e007f" - FLAG_FOR_OGRE_LV_067 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0037\U000e007f" - FLAG_FOR_SALASPILS_LV_087 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0037\U000e007f" - FLAG_FOR_MERSRAGS_LV_063 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0033\U000e007f" - FLAG_FOR_OLAINE_LV_068 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0038\U000e007f" - FLAG_FOR_ROJA_LV_079 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0039\U000e007f" - FLAG_FOR_KVEMO_KARTLI_GE_KK = "\U0001f3f4\U000e0067\U000e0065\U000e006b\U000e006b\U000e007f" - FLAG_FOR_MARUPE_LV_062 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0032\U000e007f" - FLAG_FOR_RUJIENA_LV_084 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0034\U000e007f" FLAG_FOR_SAULKRASTI_LV_089 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0039\U000e007f" - FLAG_FOR_SALDUS_LV_088 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0038\U000e007f" - FLAG_FOR_RUNDALE_LV_083 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0033\U000e007f" - FLAG_FOR_NERETA_LV_065 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0035\U000e007f" - FLAG_FOR_OZOLNIEKI_LV_069 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0039\U000e007f" - FLAG_FOR_ROPAZI_LV_080 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0030\U000e007f" - FLAG_FOR_RIEBINI_LV_078 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0038\U000e007f" - FLAG_FOR_LIVANI_LV_056 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0036\U000e007f" + FLAG_FOR_SALASPILS_LV_087 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0037\U000e007f" FLAG_FOR_PRIEKULI_LV_075 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0035\U000e007f" - FLAG_FOR_LUDZA_LV_058 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0038\U000e007f" - FLAG_FOR_SEJA_LV_090 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0030\U000e007f" + FLAG_FOR_RUCAVA_LV_081 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0031\U000e007f" + FLAG_FOR_NAUKSENI_LV_064 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0034\U000e007f" FLAG_FOR_PRIEKULE_LV_074 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0034\U000e007f" - FLAG_FOR_LUBANA_LV_057 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0037\U000e007f" - FLAG_FOR_SALACGRIVA_LV_086 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0036\U000e007f" + FLAG_FOR_SEJA_LV_090 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0030\U000e007f" + FLAG_FOR_NERETA_LV_065 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0035\U000e007f" + FLAG_FOR_PARGAUJA_LV_070 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0030\U000e007f" + FLAG_FOR_MARUPE_LV_062 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0032\U000e007f" + FLAG_FOR_PAVILOSTA_LV_071 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0031\U000e007f" + FLAG_FOR_OLAINE_LV_068 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0038\U000e007f" + FLAG_FOR_LIMBAZI_LV_054 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0034\U000e007f" + FLAG_FOR_RUJIENA_LV_084 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0034\U000e007f" + FLAG_FOR_PLAVINAS_LV_072 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0032\U000e007f" + FLAG_FOR_RUNDALE_LV_083 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0033\U000e007f" FLAG_FOR_PREILI_LV_073 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0033\U000e007f" - FLAG_FOR_VIESITE_LV_107 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0037\U000e007f" + FLAG_FOR_RUGAJI_LV_082 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0032\U000e007f" + FLAG_FOR_MERSRAGS_LV_063 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0033\U000e007f" + FLAG_FOR_SALDUS_LV_088 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0038\U000e007f" + FLAG_FOR_LUDZA_LV_058 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0038\U000e007f" + FLAG_FOR_LIVANI_LV_056 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0036\U000e007f" + FLAG_FOR_ROPAZI_LV_080 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0038\U000e0030\U000e007f" + FLAG_FOR_KOH_KONG_KH_9 = "\U0001f3f4\U000e006b\U000e0068\U000e0039\U000e007f" + FLAG_FOR_RIEBINI_LV_078 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0038\U000e007f" + FLAG_FOR_LIELVARDE_LV_053 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0033\U000e007f" + FLAG_FOR_KEKAVA_LV_052 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0032\U000e007f" + FLAG_FOR_NICA_LV_066 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0036\U000e007f" + FLAG_FOR_LUBANA_LV_057 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0035\U000e0037\U000e007f" + FLAG_FOR_GRAND_EST_FR_GES = "\U0001f3f4\U000e0066\U000e0072\U000e0067\U000e0065\U000e0073\U000e007f" + FLAG_FOR_RAUNA_LV_076 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0036\U000e007f" + FLAG_FOR_ROJA_LV_079 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0037\U000e0039\U000e007f" + FLAG_FOR_MALPILS_LV_061 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0036\U000e0031\U000e007f" FLAG_FOR_SMILTENE_LV_094 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0034\U000e007f" - FLAG_FOR_REZEKNE_LV_REZ = "\U0001f3f4\U000e006c\U000e0076\U000e0072\U000e0065\U000e007a\U000e007f" - FLAG_FOR_GHAT_LY_GT = "\U0001f3f4\U000e006c\U000e0079\U000e0067\U000e0074\U000e007f" - FAMILY_WOMAN_DARK_SKIN_TONE_MAN_DARK_SKIN_TONE_BABY_DARK_SKIN_TONE = "\U0001f469\U0001f3ff\u200d\U0001f468\U0001f3ff\u200d\U0001f476\U0001f3ff" - FLAG_FOR_RIGA_LV_RIX = "\U0001f3f4\U000e006c\U000e0076\U000e0072\U000e0069\U000e0078\U000e007f" - FLAG_FOR_TUKUMS_LV_099 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0039\U000e007f" + FLAG_FOR_VARAKLANI_LV_102 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0032\U000e007f" + FLAG_FOR_JABAL_AL_GHARBI_LY_JG = "\U0001f3f4\U000e006c\U000e0079\U000e006a\U000e0067\U000e007f" + FLAG_FOR_VARKAVA_LV_103 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0033\U000e007f" + FLAG_FOR_VIESITE_LV_107 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0037\U000e007f" + FLAG_FOR_DAUGAVPILS_LV_DGV = "\U0001f3f4\U000e006c\U000e0076\U000e0064\U000e0067\U000e0076\U000e007f" FLAG_FOR_KUFRA_LY_KF = "\U0001f3f4\U000e006c\U000e0079\U000e006b\U000e0066\U000e007f" - FLAG_FOR_DERNA_LY_DR = "\U0001f3f4\U000e006c\U000e0079\U000e0064\U000e0072\U000e007f" FLAG_FOR_VILANI_LV_109 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0039\U000e007f" + FLAG_FOR_JURMALA_LV_JUR = "\U0001f3f4\U000e006c\U000e0076\U000e006a\U000e0075\U000e0072\U000e007f" + FLAG_FOR_VILAKA_LV_108 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0038\U000e007f" + FLAG_FOR_VENTSPILS_LV_VEN = "\U0001f3f4\U000e006c\U000e0076\U000e0076\U000e0065\U000e006e\U000e007f" + FLAG_FOR_MURQUB_LY_MB = "\U0001f3f4\U000e006c\U000e0079\U000e006d\U000e0062\U000e007f" + FLAG_FOR_VECPIEBALGA_LV_104 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0034\U000e007f" + FLAG_FOR_TUKUMS_LV_099 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0039\U000e007f" + FLAG_FOR_BENGHAZI_LY_BA = "\U0001f3f4\U000e006c\U000e0079\U000e0062\U000e0061\U000e007f" + FLAG_FOR_LIEPAJA_LV_LPX = "\U0001f3f4\U000e006c\U000e0076\U000e006c\U000e0070\U000e0078\U000e007f" FLAG_FOR_JABAL_AL_AKHDAR_LY_JA = "\U0001f3f4\U000e006c\U000e0079\U000e006a\U000e0061\U000e007f" + FLAG_FOR_ZARASAI_LT_60 = "\U0001f3f4\U000e006c\U000e0074\U000e0036\U000e0030\U000e007f" + FLAG_FOR_VECUMNIEKI_LV_105 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0035\U000e007f" + FLAG_FOR_GHAT_LY_GT = "\U0001f3f4\U000e006c\U000e0079\U000e0067\U000e0074\U000e007f" + FLAG_FOR_TALSI_LV_097 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0037\U000e007f" + FLAG_FOR_JELGAVA_LV_JEL = "\U0001f3f4\U000e006c\U000e0076\U000e006a\U000e0065\U000e006c\U000e007f" + FLAG_FOR_STRENCI_LV_096 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0036\U000e007f" + FLAG_FOR_NORTH_HAMGYONG_KP_09 = "\U0001f3f4\U000e006b\U000e0070\U000e0030\U000e0039\U000e007f" + FLAG_FOR_VALMIERA_LV_VMR = "\U0001f3f4\U000e006c\U000e0076\U000e0076\U000e006d\U000e0072\U000e007f" + FLAG_FOR_TERVETE_LV_098 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0038\U000e007f" + FLAG_FOR_REZEKNE_LV_REZ = "\U0001f3f4\U000e006c\U000e0076\U000e0072\U000e0065\U000e007a\U000e007f" + FLAG_FOR_ZILUPE_LV_110 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0031\U000e0030\U000e007f" FLAG_FOR_JEKABPILS_LV_JKB = "\U0001f3f4\U000e006c\U000e0076\U000e006a\U000e006b\U000e0062\U000e007f" FLAG_FOR_SIGULDA_LV_091 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0031\U000e007f" - FLAG_FOR_JABAL_AL_GHARBI_LY_JG = "\U0001f3f4\U000e006c\U000e0079\U000e006a\U000e0067\U000e007f" - FLAG_FOR_MURQUB_LY_MB = "\U0001f3f4\U000e006c\U000e0079\U000e006d\U000e0062\U000e007f" - FLAG_FOR_LIEPAJA_LV_LPX = "\U0001f3f4\U000e006c\U000e0076\U000e006c\U000e0070\U000e0078\U000e007f" - FLAG_FOR_VALKA_LV_101 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0031\U000e007f" - FLAG_FOR_DAUGAVPILS_LV_DGV = "\U0001f3f4\U000e006c\U000e0076\U000e0064\U000e0067\U000e0076\U000e007f" - FLAG_FOR_VARAKLANI_LV_102 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0032\U000e007f" - FLAG_FOR_JELGAVA_LV_JEL = "\U0001f3f4\U000e006c\U000e0076\U000e006a\U000e0065\U000e006c\U000e007f" - FLAG_FOR_SKRIVERI_LV_092 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0032\U000e007f" - FLAG_FOR_TALSI_LV_097 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0037\U000e007f" - FLAG_FOR_VALMIERA_LV_VMR = "\U0001f3f4\U000e006c\U000e0076\U000e0076\U000e006d\U000e0072\U000e007f" - FLAG_FOR_BENGHAZI_LY_BA = "\U0001f3f4\U000e006c\U000e0079\U000e0062\U000e0061\U000e007f" FLAG_FOR_STOPINI_LV_095 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0035\U000e007f" - FLAG_FOR_VARKAVA_LV_103 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0033\U000e007f" - FLAG_FOR_VENTSPILS_LV_VEN = "\U0001f3f4\U000e006c\U000e0076\U000e0076\U000e0065\U000e006e\U000e007f" - FLAG_FOR_SKRUNDA_LV_093 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0033\U000e007f" - FLAG_FOR_ZILUPE_LV_110 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0031\U000e0030\U000e007f" - FLAG_FOR_STRENCI_LV_096 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0036\U000e007f" - FLAG_FOR_VECPIEBALGA_LV_104 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0034\U000e007f" - FLAG_FOR_VECUMNIEKI_LV_105 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0035\U000e007f" - FLAG_FOR_VILAKA_LV_108 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0038\U000e007f" - FLAG_FOR_JURMALA_LV_JUR = "\U0001f3f4\U000e006c\U000e0076\U000e006a\U000e0075\U000e0072\U000e007f" - FLAG_FOR_TERVETE_LV_098 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0039\U000e0038\U000e007f" - FLAG_FOR_MEKNES_TAFILALET_MA_06 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0036\U000e007f" - FLAG_FOR_MARRAKESH_TENSIFT_EL_HAOUZ_MA_11 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0031\U000e007f" - FLAG_FOR_MISRATA_LY_MI = "\U0001f3f4\U000e006c\U000e0079\U000e006d\U000e0069\U000e007f" - FLAG_FOR_SABHA_LY_SB = "\U0001f3f4\U000e006c\U000e0079\U000e0073\U000e0062\U000e007f" - FLAG_FOR_GUELMIM_ES_SEMARA_MA_14 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0034\U000e007f" - FLAG_FOR_GHARB_CHRARDA_BENI_HSSEN_MA_02 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0032\U000e007f" - FLAG_FOR_LA_CONDAMINE_MC_CO = "\U0001f3f4\U000e006d\U000e0063\U000e0063\U000e006f\U000e007f" - FLAG_FOR_MONACO_VILLE_MC_MO = "\U0001f3f4\U000e006d\U000e0063\U000e006d\U000e006f\U000e007f" - FLAG_FOR_LABE_REGION_GN_L = "\U0001f3f4\U000e0067\U000e006e\U000e006c\U000e007f" - FLAG_FOR_RABAT_SALE_ZEMMOUR_ZAER_MA_07 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0037\U000e007f" - FLAG_FOR_NALUT_LY_NL = "\U0001f3f4\U000e006c\U000e0079\U000e006e\U000e006c\U000e007f" - FLAG_FOR_TAZA_AL_HOCEIMA_TAOUNATE_MA_03 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0033\U000e007f" - FLAG_FOR_OUED_ED_DAHAB_LAGOUIRA_MA_16 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0036\U000e007f" - FLAG_FOR_WADI_AL_SHATII_LY_WS = "\U0001f3f4\U000e006c\U000e0079\U000e0077\U000e0073\U000e007f" - FLAG_FOR_LARVOTTO_MC_LA = "\U0001f3f4\U000e006d\U000e0063\U000e006c\U000e0061\U000e007f" - FLAG_FOR_NUQAT_AL_KHAMS_LY_NQ = "\U0001f3f4\U000e006c\U000e0079\U000e006e\U000e0071\U000e007f" - FLAG_FOR_MALBOUSQUET_MC_MA = "\U0001f3f4\U000e006d\U000e0063\U000e006d\U000e0061\U000e007f" - FLAG_FOR_TADLA_AZILAL_MA_12 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0032\U000e007f" - FLAG_FOR_MURZUQ_LY_MQ = "\U0001f3f4\U000e006c\U000e0079\U000e006d\U000e0071\U000e007f" - FLAG_FOR_FES_BOULEMANE_MA_05 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0035\U000e007f" - FLAG_FOR_CHAOUIA_OUARDIGHA_MA_09 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0039\U000e007f" - FLAG_FOR_MONEGHETTI_MC_MG = "\U0001f3f4\U000e006d\U000e0063\U000e006d\U000e0067\U000e007f" - FLAG_FOR_JARDIN_EXOTIQUE_DE_MONACO_MC_JE = "\U0001f3f4\U000e006d\U000e0063\U000e006a\U000e0065\U000e007f" - FLAG_FOR_AL_WAHAT_LY_WA = "\U0001f3f4\U000e006c\U000e0079\U000e0077\U000e0061\U000e007f" + FLAG_FOR_ENGURE_LV_029 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0032\U000e0039\U000e007f" FLAG_FOR_WADI_AL_HAYAA_LY_WD = "\U0001f3f4\U000e006c\U000e0079\U000e0077\U000e0064\U000e007f" + FLAG_FOR_AL_WAHAT_LY_WA = "\U0001f3f4\U000e006c\U000e0079\U000e0077\U000e0061\U000e007f" + FLAG_FOR_LABE_REGION_GN_L = "\U0001f3f4\U000e0067\U000e006e\U000e006c\U000e007f" + FLAG_FOR_NALUT_LY_NL = "\U0001f3f4\U000e006c\U000e0079\U000e006e\U000e006c\U000e007f" + FLAG_FOR_MONEGHETTI_MC_MG = "\U0001f3f4\U000e006d\U000e0063\U000e006d\U000e0067\U000e007f" + FLAG_FOR_MARRAKESH_TENSIFT_EL_HAOUZ_MA_11 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0031\U000e007f" FLAG_FOR_LA_COLLE_MC_CL = "\U0001f3f4\U000e006d\U000e0063\U000e0063\U000e006c\U000e007f" - FLAG_FOR_SIRTE_LY_SR = "\U0001f3f4\U000e006c\U000e0079\U000e0073\U000e0072\U000e007f" FLAG_FOR_ZAWIYA_LY_ZA = "\U0001f3f4\U000e006c\U000e0079\U000e007a\U000e0061\U000e007f" - FLAG_FOR_FONTVIEILLE_MC_FO = "\U0001f3f4\U000e006d\U000e0063\U000e0066\U000e006f\U000e007f" - FLAG_FOR_GRAND_CASABLANCA_MA_08 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0038\U000e007f" + FLAG_FOR_EL_TARF_DZ_36 = "\U0001f3f4\U000e0064\U000e007a\U000e0033\U000e0036\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_MURZUQ_LY_MQ = "\U0001f3f4\U000e006c\U000e0079\U000e006d\U000e0071\U000e007f" + FLAG_FOR_CHAOUIA_OUARDIGHA_MA_09 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0039\U000e007f" + FLAG_FOR_SIRTE_LY_SR = "\U0001f3f4\U000e006c\U000e0079\U000e0073\U000e0072\U000e007f" + FLAG_FOR_NUQAT_AL_KHAMS_LY_NQ = "\U0001f3f4\U000e006c\U000e0079\U000e006e\U000e0071\U000e007f" + FLAG_FOR_LA_CONDAMINE_MC_CO = "\U0001f3f4\U000e006d\U000e0063\U000e0063\U000e006f\U000e007f" + FLAG_FOR_MEKNES_TAFILALET_MA_06 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0036\U000e007f" FLAG_FOR_LA_GARE_MC_GA = "\U0001f3f4\U000e006d\U000e0063\U000e0067\U000e0061\U000e007f" - FLAG_FOR_TRIPOLI_LY_TB = "\U0001f3f4\U000e006c\U000e0079\U000e0074\U000e0062\U000e007f" - FLAG_FOR_EDINET_MD_ED = "\U0001f3f4\U000e006d\U000e0064\U000e0065\U000e0064\U000e007f" - FLAG_FOR_MELILLA_ES_ML = "\U0001f3f4\U000e0065\U000e0073\U000e006d\U000e006c\U000e007f" - FLAG_FOR_CRIULENI_MD_CR = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e0072\U000e007f" - FLAG_FOR_SINGEREI_MD_SI = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e0069\U000e007f" - FLAG_FOR_SOROCA_MD_SO = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e006f\U000e007f" - FLAG_FOR_CANTEMIR_MD_CT = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e0074\U000e007f" - FLAG_FOR_FALESTI_MD_FA = "\U0001f3f4\U000e006d\U000e0064\U000e0066\U000e0061\U000e007f" - FLAG_FOR_SOLDANESTI_MD_SD = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e0064\U000e007f" - FLAG_FOR_BRICENI_MD_BR = "\U0001f3f4\U000e006d\U000e0064\U000e0062\U000e0072\U000e007f" - FLAG_FOR_SPELUGUES_MC_SP = "\U0001f3f4\U000e006d\U000e0063\U000e0073\U000e0070\U000e007f" - FLAG_FOR_BALTI_MD_BA = "\U0001f3f4\U000e006d\U000e0064\U000e0062\U000e0061\U000e007f" - FLAG_FOR_DUBASARI_MD_DU = "\U0001f3f4\U000e006d\U000e0064\U000e0064\U000e0075\U000e007f" + FLAG_FOR_GUELMIM_ES_SEMARA_MA_14 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0034\U000e007f" + COUPLE_WITH_HEART_WOMAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fb" + FLAG_FOR_GHARB_CHRARDA_BENI_HSSEN_MA_02 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0032\U000e007f" + FLAG_FOR_FONTVIEILLE_MC_FO = "\U0001f3f4\U000e006d\U000e0063\U000e0066\U000e006f\U000e007f" + FLAG_FOR_TADLA_AZILAL_MA_12 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0032\U000e007f" + FAMILY_MAN_DARK_SKIN_TONE_BOY_DARK_SKIN_TONE_GIRL_DARK_SKIN_TONE = "\U0001f468\U0001f3ff\u200d\U0001f466\U0001f3ff\u200d\U0001f467\U0001f3ff" + FLAG_FOR_RABAT_SALE_ZEMMOUR_ZAER_MA_07 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0037\U000e007f" + FLAG_FOR_MALBOUSQUET_MC_MA = "\U0001f3f4\U000e006d\U000e0063\U000e006d\U000e0061\U000e007f" + FLAG_FOR_OUED_ED_DAHAB_LAGOUIRA_MA_16 = "\U0001f3f4\U000e006d\U000e0061\U000e0031\U000e0036\U000e007f" FLAG_FOR_CALARASI_MD_CL = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e006c\U000e007f" - FLAG_FOR_BOLIKHAMSAI_LA_BL = "\U0001f3f4\U000e006c\U000e0061\U000e0062\U000e006c\U000e007f" - FLAG_FOR_CAHUL_MD_CA = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e0061\U000e007f" - FLAG_FOR_OCNITA_MD_OC = "\U0001f3f4\U000e006d\U000e0064\U000e006f\U000e0063\U000e007f" - FLAG_FOR_ORHEI_MD_OR = "\U0001f3f4\U000e006d\U000e0064\U000e006f\U000e0072\U000e007f" - FLAG_FOR_DROCHIA_MD_DR = "\U0001f3f4\U000e006d\U000e0064\U000e0064\U000e0072\U000e007f" - FLAG_FOR_HINCESTI_MD_HI = "\U0001f3f4\U000e006d\U000e0064\U000e0068\U000e0069\U000e007f" - FLAG_FOR_CIMISLIA_MD_CM = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e006d\U000e007f" - FLAG_FOR_STRASENI_MD_ST = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e0074\U000e007f" - FLAG_FOR_BASARABEASCA_MD_BS = "\U0001f3f4\U000e006d\U000e0064\U000e0062\U000e0073\U000e007f" - FLAG_FOR_CHISINAU_MD_CU = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e0075\U000e007f" - FLAG_FOR_GLODENI_MD_GL = "\U0001f3f4\U000e006d\U000e0064\U000e0067\U000e006c\U000e007f" - FLAG_FOR_DONDUSENI_MD_DO = "\U0001f3f4\U000e006d\U000e0064\U000e0064\U000e006f\U000e007f" - FLAG_FOR_REZINA_MD_RE = "\U0001f3f4\U000e006d\U000e0064\U000e0072\U000e0065\U000e007f" - FLAG_FOR_GAGAUZIA_MD_GA = "\U0001f3f4\U000e006d\U000e0064\U000e0067\U000e0061\U000e007f" + FLAG_FOR_SOLDANESTI_MD_SD = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e0064\U000e007f" FLAG_FOR_IALOVENI_MD_IA = "\U0001f3f4\U000e006d\U000e0064\U000e0069\U000e0061\U000e007f" + FLAG_FOR_LEOVA_MD_LE = "\U0001f3f4\U000e006d\U000e0064\U000e006c\U000e0065\U000e007f" + FLAG_FOR_BALTI_MD_BA = "\U0001f3f4\U000e006d\U000e0064\U000e0062\U000e0061\U000e007f" + FLAG_FOR_CRIULENI_MD_CR = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e0072\U000e007f" + FLAG_FOR_CENTRE_VAL_DE_LOIRE_FR_CVL = "\U0001f3f4\U000e0066\U000e0072\U000e0063\U000e0076\U000e006c\U000e007f" + FLAG_FOR_CANTEMIR_MD_CT = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e0074\U000e007f" + FLAG_FOR_CHISINAU_MD_CU = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e0075\U000e007f" + FLAG_FOR_FALESTI_MD_FA = "\U0001f3f4\U000e006d\U000e0064\U000e0066\U000e0061\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_GIRL_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f467\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_DONDUSENI_MD_DO = "\U0001f3f4\U000e006d\U000e0064\U000e0064\U000e006f\U000e007f" + FLAG_FOR_MELILLA_ES_ML = "\U0001f3f4\U000e0065\U000e0073\U000e006d\U000e006c\U000e007f" + FLAG_FOR_OCNITA_MD_OC = "\U0001f3f4\U000e006d\U000e0064\U000e006f\U000e0063\U000e007f" + FLAG_FOR_SOROCA_MD_SO = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e006f\U000e007f" + FLAG_FOR_DUBASARI_MD_DU = "\U0001f3f4\U000e006d\U000e0064\U000e0064\U000e0075\U000e007f" + FLAG_FOR_SINGEREI_MD_SI = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e0069\U000e007f" + FLAG_FOR_EDINET_MD_ED = "\U0001f3f4\U000e006d\U000e0064\U000e0065\U000e0064\U000e007f" + FLAG_FOR_SABHA_LY_SB = "\U0001f3f4\U000e006c\U000e0079\U000e0073\U000e0062\U000e007f" FLAG_FOR_NISPORENI_MD_NI = "\U0001f3f4\U000e006d\U000e0064\U000e006e\U000e0069\U000e007f" - FLAG_FOR_FLORESTI_MD_FL = "\U0001f3f4\U000e006d\U000e0064\U000e0066\U000e006c\U000e007f" - FLAG_FOR_MOULINS_MC_MU = "\U0001f3f4\U000e006d\U000e0063\U000e006d\U000e0075\U000e007f" + FLAG_FOR_BRICENI_MD_BR = "\U0001f3f4\U000e006d\U000e0064\U000e0062\U000e0072\U000e007f" + FAMILY_WOMAN_MEDIUM_SKIN_TONE_BABY_MEDIUM_SKIN_TONE_BOY_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f476\U0001f3fd\u200d\U0001f466\U0001f3fd" + FLAG_FOR_ORHEI_MD_OR = "\U0001f3f4\U000e006d\U000e0064\U000e006f\U000e0072\U000e007f" + FLAG_FOR_CIMISLIA_MD_CM = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e006d\U000e007f" + FLAG_FOR_GLODENI_MD_GL = "\U0001f3f4\U000e006d\U000e0064\U000e0067\U000e006c\U000e007f" FLAG_FOR_RISCANI_MD_RI = "\U0001f3f4\U000e006d\U000e0064\U000e0072\U000e0069\U000e007f" FLAG_FOR_BENDER_MD_BD = "\U0001f3f4\U000e006d\U000e0064\U000e0062\U000e0064\U000e007f" - FLAG_FOR_LEOVA_MD_LE = "\U0001f3f4\U000e006d\U000e0064\U000e006c\U000e0065\U000e007f" - FLAG_FOR_PODGORICA_ME_16 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0036\U000e007f" + FLAG_FOR_BASARABEASCA_MD_BS = "\U0001f3f4\U000e006d\U000e0064\U000e0062\U000e0073\U000e007f" + FLAG_FOR_JARDIN_EXOTIQUE_DE_MONACO_MC_JE = "\U0001f3f4\U000e006d\U000e0063\U000e006a\U000e0065\U000e007f" + FLAG_FOR_ERGLI_LV_030 = "\U0001f3f4\U000e006c\U000e0076\U000e0030\U000e0033\U000e0030\U000e007f" + FLAG_FOR_CAHUL_MD_CA = "\U0001f3f4\U000e006d\U000e0064\U000e0063\U000e0061\U000e007f" + FLAG_FOR_FLORESTI_MD_FL = "\U0001f3f4\U000e006d\U000e0064\U000e0066\U000e006c\U000e007f" + FLAG_FOR_HINCESTI_MD_HI = "\U0001f3f4\U000e006d\U000e0064\U000e0068\U000e0069\U000e007f" FLAG_FOR_TOAMASINA_MG_A = "\U0001f3f4\U000e006d\U000e0067\U000e0061\U000e007f" - FLAG_FOR_MAHAJANGA_MG_M = "\U0001f3f4\U000e006d\U000e0067\U000e006d\U000e007f" - FLAG_FOR_HERCEG_NOVI_ME_08 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0038\U000e007f" - FAMILY_WOMAN_MEDIUM_SKIN_TONE_WOMAN_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE_GIRL_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fd\u200d\U0001f469\U0001f3fd\u200d\U0001f467\U0001f3fd\u200d\U0001f467\U0001f3fd" - FLAG_FOR_BOGDANCI_MK_05 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0035\U000e007f" - FLAG_FOR_ULCINJ_ME_20 = "\U0001f3f4\U000e006d\U000e0065\U000e0032\U000e0030\U000e007f" - FLAG_FOR_VAINODE_LV_100 = "\U0001f3f4\U000e006c\U000e0076\U000e0031\U000e0030\U000e0030\U000e007f" - FLAG_FOR_BOSILOVO_MK_07 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0037\U000e007f" - FLAG_FOR_UNGHENI_MD_UN = "\U0001f3f4\U000e006d\U000e0064\U000e0075\U000e006e\U000e007f" - FLAG_FOR_STEFAN_VODA_MD_SV = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e0076\U000e007f" + TAG_APOSTROPHE = "\U000e0027" + FLAG_FOR_TRIPOLI_LY_TB = "\U0001f3f4\U000e006c\U000e0079\U000e0074\U000e0062\U000e007f" FLAG_FOR_BOGOVINJE_MK_06 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0036\U000e007f" - FLAG_FOR_ZABLJAK_ME_21 = "\U0001f3f4\U000e006d\U000e0065\U000e0032\U000e0031\U000e007f" - FLAG_FOR_RALIK_CHAIN_MH_L = "\U0001f3f4\U000e006d\U000e0068\U000e006c\U000e007f" - FLAG_FOR_ROZAJE_ME_17 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0037\U000e007f" - FLAG_FOR_BUDVA_ME_05 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0035\U000e007f" - FLAG_FOR_ANDRIJEVICA_ME_01 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0031\U000e007f" - FLAG_FOR_BEROVO_MK_03 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0033\U000e007f" - FLAG_FOR_TIVAT_ME_19 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0039\U000e007f" - FLAG_FOR_TOLIARA_MG_U = "\U0001f3f4\U000e006d\U000e0067\U000e0075\U000e007f" - FLAG_FOR_KOTOR_ME_10 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0030\U000e007f" - FLAG_FOR_ANTANANARIVO_MG_T = "\U0001f3f4\U000e006d\U000e0067\U000e0074\U000e007f" - FLAG_FOR_PLAV_ME_13 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0033\U000e007f" - FLAG_FOR_BITOLA_MK_04 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0034\U000e007f" - FLAG_FOR_BIJELO_POLJE_ME_04 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0034\U000e007f" - FLAG_FOR_FIANARANTSOA_MG_F = "\U0001f3f4\U000e006d\U000e0067\U000e0066\U000e007f" - FLAG_FOR_PETNJICA_ME_23 = "\U0001f3f4\U000e006d\U000e0065\U000e0032\U000e0033\U000e007f" - FLAG_FOR_NIKSIC_ME_12 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0032\U000e007f" FLAG_FOR_MOJKOVAC_ME_11 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0031\U000e007f" - FLAG_FOR_PLJEVLJA_ME_14 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0034\U000e007f" FLAG_FOR_PLUZINE_ME_15 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0035\U000e007f" - FLAG_FOR_SAVNIK_ME_18 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0038\U000e007f" - FLAG_FOR_KOLASIN_ME_09 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0039\U000e007f" + FLAG_FOR_BOGDANCI_MK_05 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0035\U000e007f" + FLAG_FOR_ISFAHAN_IR_04 = "\U0001f3f4\U000e0069\U000e0072\U000e0030\U000e0034\U000e007f" + FLAG_FOR_BUDVA_ME_05 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0035\U000e007f" + FLAG_FOR_FIANARANTSOA_MG_F = "\U0001f3f4\U000e006d\U000e0067\U000e0066\U000e007f" + FLAG_FOR_PLJEVLJA_ME_14 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0034\U000e007f" + FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" + FLAG_FOR_BIJELO_POLJE_ME_04 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0034\U000e007f" FLAG_FOR_ANTSIRANANA_MG_D = "\U0001f3f4\U000e006d\U000e0067\U000e0064\U000e007f" - FLAG_FOR_KRATOVO_MK_43 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0033\U000e007f" - FLAG_FOR_KRIVA_PALANKA_MK_44 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0034\U000e007f" - FLAG_FOR_KOCANI_MK_42 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0032\U000e007f" - FLAG_FOR_JEGUNOVCE_MK_35 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0035\U000e007f" - FLAG_FOR_GEVGELIJA_MK_18 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0038\U000e007f" - FLAG_FOR_ZRNOVCI_MK_33 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0033\U000e007f" - FLAG_FOR_KARBINCI_MK_37 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0037\U000e007f" - FLAG_FOR_TEL_AVIV_DISTRICT_IL_TA = "\U0001f3f4\U000e0069\U000e006c\U000e0074\U000e0061\U000e007f" - FLAG_FOR_VASILEVO_MK_11 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0031\U000e007f" - FLAG_FOR_VALANDOVO_MK_10 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0030\U000e007f" - FLAG_FOR_ZELINO_MK_30 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0030\U000e007f" - FLAG_FOR_KAVADARCI_MK_36 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0036\U000e007f" - FLAG_FOR_ZELENIKOVO_MK_32 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0032\U000e007f" - FLAG_FOR_KONCE_MK_41 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0031\U000e007f" - FLAG_FOR_MAVROVO_AND_ROSTUSA_MK_50 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0030\U000e007f" - FLAG_FOR_VINICA_MK_14 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0034\U000e007f" - FLAG_FOR_NOVACI_MK_55 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0035\U000e007f" - FLAG_FOR_ILINDEN_MK_34 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0034\U000e007f" - FLAG_FOR_VRAPCISTE_MK_16 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0036\U000e007f" - FLAG_FOR_MAKEDONSKA_KAMENICA_MK_51 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0031\U000e007f" - FLAG_FOR_GRADSKO_MK_20 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0030\U000e007f" - FLAG_FOR_NEGOTINO_MK_54 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0034\U000e007f" - FLAG_FOR_DEBARCA_MK_22 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0032\U000e007f" - FLAG_FOR_VELES_MK_13 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0033\U000e007f" - FLAG_FOR_DEMIR_KAPIJA_MK_24 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0034\U000e007f" - FLAG_FOR_NOVO_SELO_MK_56 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0036\U000e007f" - FLAG_FOR_LIPKOVO_MK_48 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0038\U000e007f" - FLAG_FOR_NORMANDIE_FR_NOR = "\U0001f3f4\U000e0066\U000e0072\U000e006e\U000e006f\U000e0072\U000e007f" - FLAG_FOR_DEBAR_MK_21 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0031\U000e007f" - FLAG_FOR_DOJRAN_MK_26 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0036\U000e007f" - FLAG_FOR_LOZOVO_MK_49 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0039\U000e007f" - FLAG_FOR_DANILOVGRAD_ME_07 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0037\U000e007f" - FLAG_FOR_KUMANOVO_MK_47 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0037\U000e007f" + FLAG_FOR_SAVNIK_ME_18 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0038\U000e007f" + FLAG_FOR_BEROVO_MK_03 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0033\U000e007f" + FLAG_FOR_TOLIARA_MG_U = "\U0001f3f4\U000e006d\U000e0067\U000e0075\U000e007f" + FLAG_FOR_KOLASIN_ME_09 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0039\U000e007f" + FLAG_FOR_ANDRIJEVICA_ME_01 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0031\U000e007f" + FLAG_FOR_DERNA_LY_DR = "\U0001f3f4\U000e006c\U000e0079\U000e0064\U000e0072\U000e007f" + FLAG_FOR_ANTANANARIVO_MG_T = "\U0001f3f4\U000e006d\U000e0067\U000e0074\U000e007f" + FLAG_FOR_QEQQATA_GL_QE = "\U0001f3f4\U000e0067\U000e006c\U000e0071\U000e0065\U000e007f" + FLAG_FOR_MAHAJANGA_MG_M = "\U0001f3f4\U000e006d\U000e0067\U000e006d\U000e007f" + FLAG_FOR_NIKSIC_ME_12 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0032\U000e007f" + FLAG_FOR_PETNJICA_ME_23 = "\U0001f3f4\U000e006d\U000e0065\U000e0032\U000e0033\U000e007f" + FLAG_FOR_BOSILOVO_MK_07 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0037\U000e007f" + FLAG_FOR_FES_BOULEMANE_MA_05 = "\U0001f3f4\U000e006d\U000e0061\U000e0030\U000e0035\U000e007f" + FLAG_FOR_HOUAPHANH_LA_HO = "\U0001f3f4\U000e006c\U000e0061\U000e0068\U000e006f\U000e007f" + FLAG_FOR_STEFAN_VODA_MD_SV = "\U0001f3f4\U000e006d\U000e0064\U000e0073\U000e0076\U000e007f" + FAMILY_MAN_LIGHT_SKIN_TONE_MAN_LIGHT_SKIN_TONE_BABY_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fb\u200d\U0001f468\U0001f3fb\u200d\U0001f476\U0001f3fb\u200d\U0001f467\U0001f3fb" + FLAG_FOR_WADI_AL_SHATII_LY_WS = "\U0001f3f4\U000e006c\U000e0079\U000e0077\U000e0073\U000e007f" + FLAG_FOR_PODGORICA_ME_16 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0036\U000e007f" + FLAG_FOR_KOTOR_ME_10 = "\U0001f3f4\U000e006d\U000e0065\U000e0031\U000e0030\U000e007f" + FLAG_FOR_MARANHAO_BR_MA = "\U0001f3f4\U000e0062\U000e0072\U000e006d\U000e0061\U000e007f" FLAG_FOR_KRIVOGASTANI_MK_45 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0035\U000e007f" - FLAG_FOR_DELCEVO_MK_23 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0033\U000e007f" - FLAG_FOR_BRVENICA_MK_08 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0038\U000e007f" - FLAG_FOR_KRUSEVO_MK_46 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0036\U000e007f" + FLAG_FOR_KARBINCI_MK_37 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0037\U000e007f" + FLAG_FOR_KAVADARCI_MK_36 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0036\U000e007f" + FLAG_FOR_MAVROVO_AND_ROSTUSA_MK_50 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0030\U000e007f" + FLAG_FOR_ZELINO_MK_30 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0030\U000e007f" + FLAG_FOR_DOJRAN_MK_26 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0036\U000e007f" + FLAG_FOR_KOCANI_MK_42 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0032\U000e007f" + FLAG_FOR_NEGOTINO_MK_54 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0034\U000e007f" + FLAG_FOR_ILINDEN_MK_34 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0034\U000e007f" + FLAG_FOR_DEBAR_MK_21 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0031\U000e007f" + FLAG_FOR_LOZOVO_MK_49 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0039\U000e007f" + FLAG_FOR_GEVGELIJA_MK_18 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0038\U000e007f" + FLAG_FOR_NOVACI_MK_55 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0035\U000e007f" + FLAG_FOR_VINICA_MK_14 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0034\U000e007f" + FLAG_FOR_VASILEVO_MK_11 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0031\U000e007f" + FLAG_FOR_NOVO_SELO_MK_56 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0036\U000e007f" + FLAG_FOR_KUMANOVO_MK_47 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0037\U000e007f" + FLAG_FOR_GRADSKO_MK_20 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0030\U000e007f" + FLAG_FOR_KONCE_MK_41 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0031\U000e007f" + FLAG_FOR_ZELENIKOVO_MK_32 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0032\U000e007f" + FLAG_FOR_JEGUNOVCE_MK_35 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0035\U000e007f" + FLAG_FOR_MAKEDONSKA_KAMENICA_MK_51 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0031\U000e007f" FLAG_FOR_VEVCANI_MK_12 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0032\U000e007f" FLAG_FOR_GOSTIVAR_MK_19 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0039\U000e007f" - FLAG_FOR_RESEN_MK_66 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0036\U000e007f" - FLAG_FOR_SEGOU_ML_4 = "\U0001f3f4\U000e006d\U000e006c\U000e0034\U000e007f" - FLAG_FOR_PRILEP_MK_62 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0032\U000e007f" - COUPLE_WITH_HEART_WOMAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\u2764\ufe0f\u200d\U0001f468\U0001f3fd" - FLAG_FOR_RANKOVCE_MK_65 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0035\U000e007f" - FLAG_FOR_PETROVEC_MK_59 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0039\U000e007f" - FLAG_FOR_CESINOVO_OBLESEVO_MK_81 = "\U0001f3f4\U000e006d\U000e006b\U000e0038\U000e0031\U000e007f" - FLAG_FOR_GLARUS_CH_GL = "\U0001f3f4\U000e0063\U000e0068\U000e0067\U000e006c\U000e007f" - FLAG_FOR_STRUGA_MK_72 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0032\U000e007f" - FLAG_FOR_CUCER_SANDEVO_MK_82 = "\U0001f3f4\U000e006d\U000e006b\U000e0038\U000e0032\U000e007f" - FLAG_FOR_STUDENICANI_MK_74 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0034\U000e007f" - FLAG_FOR_TETOVO_MK_76 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0036\U000e007f" - FLAG_FOR_STRUMICA_MK_73 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0033\U000e007f" - FLAG_FOR_MOPTI_ML_5 = "\U0001f3f4\U000e006d\U000e006c\U000e0035\U000e007f" - FLAG_FOR_SOPISTE_MK_70 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0030\U000e007f" - FLAG_FOR_SIKASSO_ML_3 = "\U0001f3f4\U000e006d\U000e006c\U000e0033\U000e007f" - FLAG_FOR_KACHIN_MM_11 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0031\U000e007f" - FLAG_FOR_YANGON_MM_06 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0036\U000e007f" - FLAG_FOR_OHRID_MK_58 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0038\U000e007f" - FLAG_FOR_MANDALAY_MM_04 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0034\U000e007f" - FLAG_FOR_STARO_NAGORICANE_MK_71 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0031\U000e007f" - FLAG_FOR_GAO_ML_7 = "\U0001f3f4\U000e006d\U000e006c\U000e0037\U000e007f" - FLAG_FOR_STIP_MK_83 = "\U0001f3f4\U000e006d\U000e006b\U000e0038\U000e0033\U000e007f" - FLAG_FOR_TANINTHARYI_MM_05 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0035\U000e007f" + FLAG_FOR_KRUSEVO_MK_46 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0036\U000e007f" + FLAG_FOR_BRVENICA_MK_08 = "\U0001f3f4\U000e006d\U000e006b\U000e0030\U000e0038\U000e007f" + FLAG_FOR_LIPKOVO_MK_48 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0038\U000e007f" + FLAG_FOR_VALANDOVO_MK_10 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0030\U000e007f" + FLAG_FOR_KRATOVO_MK_43 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0033\U000e007f" + FLAG_FOR_KRIVA_PALANKA_MK_44 = "\U0001f3f4\U000e006d\U000e006b\U000e0034\U000e0034\U000e007f" + FLAG_FOR_ZRNOVCI_MK_33 = "\U0001f3f4\U000e006d\U000e006b\U000e0033\U000e0033\U000e007f" + FLAG_FOR_TEL_AVIV_DISTRICT_IL_TA = "\U0001f3f4\U000e0069\U000e006c\U000e0074\U000e0061\U000e007f" + FLAG_FOR_DANILOVGRAD_ME_07 = "\U0001f3f4\U000e006d\U000e0065\U000e0030\U000e0037\U000e007f" + FLAG_FOR_DEBARCA_MK_22 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0032\U000e007f" + FLAG_FOR_VRAPCISTE_MK_16 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0036\U000e007f" + FLAG_FOR_DELCEVO_MK_23 = "\U0001f3f4\U000e006d\U000e006b\U000e0032\U000e0033\U000e007f" + FLAG_FOR_VELES_MK_13 = "\U0001f3f4\U000e006d\U000e006b\U000e0031\U000e0033\U000e007f" + FLAG_FOR_AYEYARWADY_MM_07 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0037\U000e007f" FLAG_FOR_KAYAH_MM_12 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0032\U000e007f" + FLAG_FOR_STARO_NAGORICANE_MK_71 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0031\U000e007f" + FLAG_FOR_STIP_MK_83 = "\U0001f3f4\U000e006d\U000e006b\U000e0038\U000e0033\U000e007f" + FLAG_FOR_DAEJEON_KR_30 = "\U0001f3f4\U000e006b\U000e0072\U000e0033\U000e0030\U000e007f" + FLAG_FOR_TETOVO_MK_76 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0036\U000e007f" + FLAG_FOR_SZEGED_HU_SD = "\U0001f3f4\U000e0068\U000e0075\U000e0073\U000e0064\U000e007f" + FLAG_FOR_MOPTI_ML_5 = "\U0001f3f4\U000e006d\U000e006c\U000e0035\U000e007f" + FLAG_FOR_SIKASSO_ML_3 = "\U0001f3f4\U000e006d\U000e006c\U000e0033\U000e007f" + FLAG_FOR_U_S_OUTLYING_ISLANDS_US_UM = "\U0001f3f4\U000e0075\U000e0073\U000e0075\U000e006d\U000e007f" + FLAG_FOR_CASKA_MK_80 = "\U0001f3f4\U000e006d\U000e006b\U000e0038\U000e0030\U000e007f" + FLAG_FOR_STRUGA_MK_72 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0032\U000e007f" FLAG_FOR_KOULIKORO_ML_2 = "\U0001f3f4\U000e006d\U000e006c\U000e0032\U000e007f" + FLAG_FOR_PETROVEC_MK_59 = "\U0001f3f4\U000e006d\U000e006b\U000e0035\U000e0039\U000e007f" + KISS_MAN_MAN_MEDIUM_DARK_SKIN_TONE = "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468\U0001f3fe" + FLAG_FOR_CUCER_SANDEVO_MK_82 = "\U0001f3f4\U000e006d\U000e006b\U000e0038\U000e0032\U000e007f" + FLAG_FOR_SOPISTE_MK_70 = "\U0001f3f4\U000e006d\U000e006b\U000e0037\U000e0030\U000e007f" + FLAG_FOR_MANDALAY_MM_04 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0034\U000e007f" + FLAG_FOR_GENEVA_CH_GE = "\U0001f3f4\U000e0063\U000e0068\U000e0067\U000e0065\U000e007f" + FLAG_FOR_KACHIN_MM_11 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0031\U000e007f" FLAG_FOR_PROBISTIP_MK_63 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0033\U000e007f" + FLAG_FOR_RESEN_MK_66 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0036\U000e007f" + FLAG_FOR_TANINTHARYI_MM_05 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0035\U000e007f" + FLAG_FOR_ROSOMAN_MK_67 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0037\U000e007f" + FLAG_FOR_CESINOVO_OBLESEVO_MK_81 = "\U0001f3f4\U000e006d\U000e006b\U000e0038\U000e0031\U000e007f" FLAG_FOR_PEHCEVO_MK_60 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0030\U000e007f" FLAG_FOR_SAGAING_MM_01 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0031\U000e007f" - FLAG_FOR_SVETI_NIKOLE_MK_69 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0039\U000e007f" - FLAG_FOR_BAGO_MM_02 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0032\U000e007f" - FLAG_FOR_AYEYARWADY_MM_07 = "\U0001f3f4\U000e006d\U000e006d\U000e0030\U000e0037\U000e007f" - FLAG_FOR_ROSOMAN_MK_67 = "\U0001f3f4\U000e006d\U000e006b\U000e0036\U000e0037\U000e007f" - FLAG_FOR_CASKA_MK_80 = "\U0001f3f4\U000e006d\U000e006b\U000e0038\U000e0030\U000e007f" - FLAG_FOR_ASSABA_MR_03 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0033\U000e007f" - TAG_TILDE = "\U000e007e" - TAG_LEFT_CURLY_BRACKET = "\U000e007b" - FLAG_FOR_KHOVSGOL_MN_041 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0034\U000e0031\U000e007f" - FLAG_FOR_BRAKNA_MR_05 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0035\U000e007f" - FLAG_FOR_RAKHINE_MM_16 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0036\U000e007f" - FLAG_FOR_TRARZA_MR_06 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0036\U000e007f" - FLAG_FOR_SUKHBAATAR_MN_051 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0035\U000e0031\U000e007f" - FLAG_FOR_DORNOD_MN_061 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0031\U000e007f" - FLAG_FOR_ULAANBAATAR_MN_1 = "\U0001f3f4\U000e006d\U000e006e\U000e0031\U000e007f" - FLAG_FOR_KAYIN_MM_13 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0033\U000e007f" - FLAG_FOR_DARKHAN_UUL_MN_037 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0033\U000e0037\U000e007f" - FLAG_FOR_DUNDGOVI_MN_059 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0035\U000e0039\U000e007f" - FLAG_FOR_BAYAN_OLGII_MN_071 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0037\U000e0031\U000e007f" - FLAG_FOR_CHIN_MM_14 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0034\U000e007f" - FLAG_FOR_GORGOL_MR_04 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0034\U000e007f" - FLAG_FOR_OVORKHANGAI_MN_055 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0035\U000e0035\U000e007f" - FLAG_FOR_HODH_EL_GHARBI_MR_02 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0032\U000e007f" - FLAG_FOR_ORKHON_MN_035 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0033\U000e0035\U000e007f" - FLAG_FOR_UVS_MN_046 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0034\U000e0036\U000e007f" - FLAG_FOR_BULGAN_MN_067 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0037\U000e007f" - FLAG_FOR_TOV_MN_047 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0034\U000e0037\U000e007f" FLAG_FOR_ZAVKHAN_MN_057 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0035\U000e0037\U000e007f" - FLAG_FOR_DORNOGOVI_MN_063 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0033\U000e007f" - FLAG_FOR_GOVI_ALTAI_MN_065 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0035\U000e007f" - FLAG_FOR_TIRIS_ZEMMOUR_MR_11 = "\U0001f3f4\U000e006d\U000e0072\U000e0031\U000e0031\U000e007f" - FLAG_FOR_ARKHANGAI_MN_073 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0037\U000e0033\U000e007f" - TAG_DOLLAR_SIGN = "\U000e0024" - FLAG_FOR_KHOVD_MN_043 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0034\U000e0033\U000e007f" - FLAG_FOR_NAYPYIDAW_MM_18 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0038\U000e007f" - FLAG_FOR_DAKHLET_NOUADHIBOU_MR_08 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0038\U000e007f" - FLAG_FOR_HODH_ECH_CHARGUI_MR_01 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0031\U000e007f" - FLAG_FOR_AICHI_JP_23 = "\U0001f3f4\U000e006a\U000e0070\U000e0032\U000e0033\U000e007f" - FLAG_FOR_OMNOGOVI_MN_053 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0035\U000e0033\U000e007f" - FLAG_FOR_TAGANT_MR_09 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0039\U000e007f" - FLAG_FOR_BAYANKHONGOR_MN_069 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0039\U000e007f" + FLAG_FOR_TOV_MN_047 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0034\U000e0037\U000e007f" FLAG_FOR_INCHIRI_MR_12 = "\U0001f3f4\U000e006d\U000e0072\U000e0031\U000e0032\U000e007f" - FLAG_FOR_IKLIN_MT_19 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0039\U000e007f" - FLAG_FOR_G_ARB_MT_14 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0034\U000e007f" - FLAG_FOR_NOVA_SCOTIA_CA_NS = "\U0001f3f4\U000e0063\U000e0061\U000e006e\U000e0073\U000e007f" - FLAG_FOR_KERCEM_MT_22 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0032\U000e007f" - FLAG_FOR_G_ASRI_MT_16 = "\U0001f3f4\U000e006d\U000e0074\U000e0031\U000e0036\U000e007f" - FLAG_FOR_LIJA_MT_24 = "\U0001f3f4\U000e006d\U000e0074\U000e0032\U000e0034\U000e007f" - FLAG_FOR_BIRKIRKARA_MT_04 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0034\U000e007f" - FLAG_FOR_IMTARFA_MT_35 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0035\U000e007f" - FLAG_FOR_BALZAN_MT_02 = "\U0001f3f4\U000e006d\U000e0074\U000e0030\U000e0032\U000e007f" - FLAG_FOR_MUNXAR_MT_36 = "\U0001f3f4\U000e006d\U000e0074\U000e0033\U000e0036\U000e007f" - FAMILY_MAN_MEDIUM_LIGHT_SKIN_TONE_MAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BABY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f468\U0001f3fc\u200d\U0001f468\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f476\U0001f3fc" - FLAG_FOR_MARJ_LY_MJ = "\U0001f3f4\U000e006c\U000e0079\U000e006d\U000e006a\U000e007f" - ZERO_WIDTH_JOINER = "\u200d" - FLAG_FOR_TRUJILLO_VE_T = "\U0001f3f4\U000e0076\U000e0065\U000e0074\U000e007f" - FAMILY_WOMAN_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE_GIRL_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fb\u200d\U0001f467\U0001f3fb\u200d\U0001f467\U0001f3fb" - FLAG_FOR_TOMBOUCTOU_ML_6 = "\U0001f3f4\U000e006d\U000e006c\U000e0036\U000e007f" - REVERSED_THUMBS_DOWN_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\U0001f593\U0001f3fb" - REVERSED_VICTORY_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\U0001f594\U0001f3fb" - REVERSED_THUMBS_UP_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\U0001f592\U0001f3fb" - BLACK_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\u261b\U0001f3fb" - WHITE_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\u261c\U0001f3fb" - BLACK_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\u261a\U0001f3fb" + FLAG_FOR_TAGANT_MR_09 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0039\U000e007f" + FLAG_FOR_DAKHLET_NOUADHIBOU_MR_08 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0038\U000e007f" + FLAG_FOR_OVORKHANGAI_MN_055 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0035\U000e0035\U000e007f" + TAG_DOLLAR_SIGN = "\U000e0024" + FLAG_FOR_HODH_EL_GHARBI_MR_02 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0032\U000e007f" + FLAG_FOR_BAYAN_OLGII_MN_071 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0037\U000e0031\U000e007f" + FLAG_FOR_DUNDGOVI_MN_059 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0035\U000e0039\U000e007f" + FLAG_FOR_SCHWYZ_CH_SZ = "\U0001f3f4\U000e0063\U000e0068\U000e0073\U000e007a\U000e007f" + FLAG_FOR_BULGAN_MN_067 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0037\U000e007f" + TAG_TILDE = "\U000e007e" + FLAG_FOR_KAYIN_MM_13 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0033\U000e007f" + FLAG_FOR_GAO_ML_7 = "\U0001f3f4\U000e006d\U000e006c\U000e0037\U000e007f" + FLAG_FOR_DORNOD_MN_061 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0031\U000e007f" + FLAG_FOR_TRARZA_MR_06 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0036\U000e007f" + FLAG_FOR_DARKHAN_UUL_MN_037 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0033\U000e0037\U000e007f" + FLAG_FOR_UVS_MN_046 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0034\U000e0036\U000e007f" + FLAG_FOR_KHOVSGOL_MN_041 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0034\U000e0031\U000e007f" + FLAG_FOR_BAYANKHONGOR_MN_069 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0039\U000e007f" + FLAG_FOR_HODH_ECH_CHARGUI_MR_01 = "\U0001f3f4\U000e006d\U000e0072\U000e0030\U000e0031\U000e007f" + FLAG_FOR_NAYPYIDAW_MM_18 = "\U0001f3f4\U000e006d\U000e006d\U000e0031\U000e0038\U000e007f" + FLAG_FOR_DORNOGOVI_MN_063 = "\U0001f3f4\U000e006d\U000e006e\U000e0030\U000e0036\U000e0033\U000e007f" + FAMILY_WOMAN_MEDIUM_LIGHT_SKIN_TONE_WOMAN_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE_BOY_MEDIUM_LIGHT_SKIN_TONE = "\U0001f469\U0001f3fc\u200d\U0001f469\U0001f3fc\u200d\U0001f466\U0001f3fc\u200d\U0001f466\U0001f3fc" + FLAG_FOR_SAN_MIGUEL_SV_SM = "\U0001f3f4\U000e0073\U000e0076\U000e0073\U000e006d\U000e007f" + FLAG_FOR_MANCHESTER_JM_12 = "\U0001f3f4\U000e006a\U000e006d\U000e0031\U000e0032\U000e007f" WHITE_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\u261e\U0001f3fb" - WHITE_DOWN_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\u261f\U0001f3fb" + REVERSED_THUMBS_DOWN_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\U0001f593\U0001f3fb" + BLACK_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\u261b\U0001f3fb" REVERSED_RAISED_HAND_WITH_FINGERS_SPLAYED_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\U0001f591\U0001f3fb" + WHITE_DOWN_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\u261f\U0001f3fb" + BLACK_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\u261a\U0001f3fb" + REVERSED_VICTORY_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\U0001f594\U0001f3fb" + WHITE_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\u261c\U0001f3fb" + REVERSED_THUMBS_UP_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\U0001f592\U0001f3fb" LEFT_WRITING_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_1_2 = "\U0001f58e\U0001f3fb" - BLACK_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\u261a\U0001f3fc" - BLACK_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\u261b\U0001f3fc" - WHITE_DOWN_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\u261f\U0001f3fc" WHITE_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\u261c\U0001f3fc" - REVERSED_THUMBS_DOWN_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\U0001f593\U0001f3fc" + BLACK_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\u261b\U0001f3fc" + REVERSED_THUMBS_UP_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\U0001f592\U0001f3fc" + WHITE_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\u261e\U0001f3fc" LEFT_WRITING_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\U0001f58e\U0001f3fc" REVERSED_VICTORY_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\U0001f594\U0001f3fc" - REVERSED_THUMBS_UP_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\U0001f592\U0001f3fc" + WHITE_DOWN_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\u261f\U0001f3fc" + BLACK_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\u261a\U0001f3fc" + REVERSED_THUMBS_DOWN_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\U0001f593\U0001f3fc" REVERSED_RAISED_HAND_WITH_FINGERS_SPLAYED_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\U0001f591\U0001f3fc" - WHITE_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_3 = "\u261e\U0001f3fc" - BLACK_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\u261a\U0001f3fd" - REVERSED_VICTORY_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\U0001f594\U0001f3fd" - WHITE_DOWN_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\u261f\U0001f3fd" - BLACK_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\u261b\U0001f3fd" - LEFT_WRITING_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\U0001f58e\U0001f3fd" - REVERSED_THUMBS_DOWN_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\U0001f593\U0001f3fd" REVERSED_RAISED_HAND_WITH_FINGERS_SPLAYED_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\U0001f591\U0001f3fd" - WHITE_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\u261e\U0001f3fd" + BLACK_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\u261a\U0001f3fd" + REVERSED_THUMBS_DOWN_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\U0001f593\U0001f3fd" + WHITE_DOWN_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\u261f\U0001f3fd" REVERSED_THUMBS_UP_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\U0001f592\U0001f3fd" + BLACK_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\u261b\U0001f3fd" + REVERSED_VICTORY_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\U0001f594\U0001f3fd" WHITE_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\u261c\U0001f3fd" + LEFT_WRITING_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\U0001f58e\U0001f3fd" + WHITE_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_4 = "\u261e\U0001f3fd" LEFT_WRITING_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\U0001f58e\U0001f3fe" WHITE_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\u261e\U0001f3fe" - BLACK_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\u261b\U0001f3fe" + WHITE_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\u261c\U0001f3fe" BLACK_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\u261a\U0001f3fe" - REVERSED_VICTORY_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\U0001f594\U0001f3fe" + WHITE_DOWN_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\u261f\U0001f3fe" REVERSED_THUMBS_DOWN_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\U0001f593\U0001f3fe" REVERSED_RAISED_HAND_WITH_FINGERS_SPLAYED_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\U0001f591\U0001f3fe" + REVERSED_VICTORY_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\U0001f594\U0001f3fe" + BLACK_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\u261b\U0001f3fe" REVERSED_THUMBS_UP_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\U0001f592\U0001f3fe" - WHITE_DOWN_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\u261f\U0001f3fe" - WHITE_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_5 = "\u261c\U0001f3fe" - LEFT_WRITING_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f58e\U0001f3ff" - REVERSED_RAISED_HAND_WITH_FINGERS_SPLAYED_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f591\U0001f3ff" + REVERSED_THUMBS_DOWN_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f593\U0001f3ff" WHITE_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\u261c\U0001f3ff" WHITE_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\u261e\U0001f3ff" - REVERSED_THUMBS_UP_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f592\U0001f3ff" BLACK_LEFT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\u261a\U0001f3ff" - WHITE_DOWN_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\u261f\U0001f3ff" - REVERSED_VICTORY_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f594\U0001f3ff" BLACK_RIGHT_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\u261b\U0001f3ff" - REVERSED_THUMBS_DOWN_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f593\U0001f3ff" + REVERSED_RAISED_HAND_WITH_FINGERS_SPLAYED_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f591\U0001f3ff" + WHITE_DOWN_POINTING_INDEX_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\u261f\U0001f3ff" + REVERSED_THUMBS_UP_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f592\U0001f3ff" + LEFT_WRITING_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f58e\U0001f3ff" + REVERSED_VICTORY_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f594\U0001f3ff" + +with open("suca.txt", "w") as f: + for k, v in Emoji.__dict__.items(): + if not k.startswith("__"): + f.write("{},{}\n".format(k, v)) \ No newline at end of file From a0780d793da04ebbe51a6e426dc31fb9ed65d0ab Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 21 Oct 2018 14:41:30 +0700 Subject: [PATCH 336/530] Apply code review suggestions --- pyrogram/client/client.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index d4afd9be..9deecd3d 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -1123,7 +1123,8 @@ class Client(Methods, BaseClient): progress_args: tuple = ()): part_size = 512 * 1024 file_size = os.path.getsize(path) - assert file_size < 1500 * 1024 * 1024, "Couldn't upload file bigger 1500MiB" + if file_size > 1500 * 1024 * 1024: + raise ValueError("Telegram doesn't support uploading files bigger than 1500 MiB") file_total_parts = int(math.ceil(file_size / part_size)) is_big = True if file_size > 10 * 1024 * 1024 else False is_missing_part = True if file_id is not None else False From 9e3cf9edf76e14d7238a4e2a0f35020690279c71 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Mon, 22 Oct 2018 20:23:50 +0200 Subject: [PATCH 337/530] Use "with" context manager in examples --- docs/source/resources/AutoAuthorization.rst | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/docs/source/resources/AutoAuthorization.rst b/docs/source/resources/AutoAuthorization.rst index d7a099fe..b5f3a94a 100644 --- a/docs/source/resources/AutoAuthorization.rst +++ b/docs/source/resources/AutoAuthorization.rst @@ -35,11 +35,8 @@ Example: password="password" # (if you have one) ) - app.start() - - print(app.get_me()) - - app.stop() + with app: + print(app.get_me()) Sign Up ------- @@ -67,8 +64,5 @@ Example: last_name="" # Can be an empty string ) - app.start() - - print(app.get_me()) - - app.stop() \ No newline at end of file + with app: + print(app.get_me()) From 99bdaae365b4b09ac7fd9e07d13e074b0e819a57 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 23 Oct 2018 15:43:49 +0200 Subject: [PATCH 338/530] Allow nested folders for smart plugins --- pyrogram/client/client.py | 70 ++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 2d1e211e..9b45e941 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -34,6 +34,7 @@ from configparser import ConfigParser from datetime import datetime from hashlib import sha256, md5 from importlib import import_module +from pathlib import Path from signal import signal, SIGINT, SIGTERM, SIGABRT from threading import Thread @@ -980,41 +981,42 @@ class Client(Methods, BaseClient): def load_plugins(self): if self.plugins_dir is not None: - try: - dirs = os.listdir(self.plugins_dir) - except FileNotFoundError: - log.warning('No plugin loaded: "{}" directory is missing'.format(self.plugins_dir)) + plugins_count = 0 + + for path in Path(self.plugins_dir).rglob("*.py"): + file_path = os.path.splitext(str(path))[0] + import_path = [] + + while file_path: + file_path, tail = os.path.split(file_path) + import_path.insert(0, tail) + + import_path = ".".join(import_path) + module = import_module(import_path) + + for name in dir(module): + # noinspection PyBroadException + try: + handler, group = getattr(module, name) + + if isinstance(handler, Handler) and isinstance(group, int): + self.add_handler(handler, group) + + log.info('{}("{}") from "{}" loaded in group {}'.format( + type(handler).__name__, name, import_path, group)) + + plugins_count += 1 + except Exception: + pass + + if plugins_count > 0: + log.warning('Successfully loaded {} plugin{} from "{}"'.format( + plugins_count, + "s" if plugins_count > 1 else "", + self.plugins_dir + )) else: - plugins_dir = self.plugins_dir.lstrip("./").replace("/", ".") - plugins_count = 0 - - for i in dirs: - module = import_module("{}.{}".format(plugins_dir, i.split(".")[0])) - - for j in dir(module): - # noinspection PyBroadException - try: - handler, group = getattr(module, j) - - if isinstance(handler, Handler) and isinstance(group, int): - self.add_handler(handler, group) - - log.info('{}("{}") from "{}/{}" loaded in group {}'.format( - type(handler).__name__, j, self.plugins_dir, i, group) - ) - - plugins_count += 1 - except Exception: - pass - - if plugins_count > 0: - log.warning('Successfully loaded {} plugin{} from "{}"'.format( - plugins_count, - "s" if plugins_count > 1 else "", - self.plugins_dir - )) - else: - log.warning('No plugin loaded: "{}" doesn\'t contain any valid plugin'.format(self.plugins_dir)) + log.warning('No plugin loaded: "{}" doesn\'t contain any valid plugin'.format(self.plugins_dir)) def save_session(self): auth_key = base64.b64encode(self.auth_key).decode() From 74d07c6a28a5347a224d4310bbe7e8c675dc4ecc Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Tue, 23 Oct 2018 15:55:35 +0200 Subject: [PATCH 339/530] Use strict dependency versions --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3216c15d..17447fdf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -pyaes>=1.6.1 -pysocks>=1.6.8 \ No newline at end of file +pyaes==1.6.1 +pysocks==1.6.8 From c9462911cfced5c5640ac005a64e498604ec0626 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 25 Oct 2018 14:47:18 +0200 Subject: [PATCH 340/530] Fix Filters.command ignoring commands with empty prefixes --- pyrogram/client/filters/filters.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index e80e230e..173b211c 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -183,6 +183,7 @@ class Filters: prefix (``str`` | ``list``, *optional*): A prefix or a list of prefixes as string the filter should look for. Defaults to "/" (slash). Examples: ".", "!", ["/", "!", "."]. + Can be None or "" (empty string) to allow commands with no prefix at all. separator (``str``, *optional*): The command arguments separator. Defaults to " " (white space). @@ -214,7 +215,7 @@ class Filters: else {c if case_sensitive else c.lower() for c in command}, - p=set(prefix), + p=set(prefix) if prefix else {""}, s=separator, cs=case_sensitive ) From 11b7c3b52a5dce678b7762fab4c8939e7a6db221 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 28 Oct 2018 15:26:46 +0100 Subject: [PATCH 341/530] Remove unused game field from Message --- pyrogram/client/types/messages_and_media/message.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pyrogram/client/types/messages_and_media/message.py b/pyrogram/client/types/messages_and_media/message.py index ac8721e8..e86e4300 100644 --- a/pyrogram/client/types/messages_and_media/message.py +++ b/pyrogram/client/types/messages_and_media/message.py @@ -83,9 +83,6 @@ class Message(Object): document (:obj:`Document `, *optional*): Message is a general file, information about the file. - game (:obj:`Game `, *optional*): - Message is a game, information about the game. More about games. - photo (:obj:`Photo `, *optional*): Message is a photo, information about the photo. @@ -225,7 +222,6 @@ class Message(Object): caption_entities: list = None, audio=None, document=None, - game=None, photo=None, sticker=None, animation=None, @@ -276,7 +272,6 @@ class Message(Object): self.caption_entities = caption_entities # flags.12?Vector self.audio = audio # flags.13?Audio self.document = document # flags.14?Document - self.game = game # flags.15?Game self.photo = photo # flags.16?Vector self.sticker = sticker # flags.17?Sticker self.animation = animation From 0a946033c3d10d19d9069b42995fd483600f6445 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 28 Oct 2018 15:27:20 +0100 Subject: [PATCH 342/530] Move optional field down after required fields --- pyrogram/client/types/user_and_chats/user.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pyrogram/client/types/user_and_chats/user.py b/pyrogram/client/types/user_and_chats/user.py index fc267b07..06045b00 100644 --- a/pyrogram/client/types/user_and_chats/user.py +++ b/pyrogram/client/types/user_and_chats/user.py @@ -41,12 +41,12 @@ class User(Object): is_bot (``bool``): True, if this user is a bot. - status (:obj:`UserStatus `): - User's Last Seen status. Empty for bots. - first_name (``str``): User's or bot's first name. + status (:obj:`UserStatus `, *optional*): + User's Last Seen status. Empty for bots. + last_name (``str``, *optional*): User's or bot's last name. @@ -76,8 +76,8 @@ class User(Object): is_mutual_contact: bool, is_deleted: bool, is_bot: bool, - status, first_name: str, + status=None, last_name: str = None, username: str = None, language_code: str = None, @@ -91,8 +91,8 @@ class User(Object): self.is_mutual_contact = is_mutual_contact self.is_deleted = is_deleted self.is_bot = is_bot - self.status = status self.first_name = first_name + self.status = status self.last_name = last_name self.username = username self.language_code = language_code From 4fd93a790fdd667189e294a1ad950acff852016f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 28 Oct 2018 15:27:49 +0100 Subject: [PATCH 343/530] Small fixes and rewords --- .../types/user_and_chats/user_status.py | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pyrogram/client/types/user_and_chats/user_status.py b/pyrogram/client/types/user_and_chats/user_status.py index 17b73ea1..b2974dbe 100644 --- a/pyrogram/client/types/user_and_chats/user_status.py +++ b/pyrogram/client/types/user_and_chats/user_status.py @@ -28,35 +28,35 @@ class UserStatus(Object): "recently", "within_week", "within_month" or "long_time_ago" fields set. Args: - user_id (``int``): - User's id. Only available for UserStatus updates. + user_id (``int``, *optional*): + User's id. Only available for incoming UserStatus updates. - online (``bool``): - True if the user is online in this moment, None otherwise. + online (``bool``, *optional*): + True if the user is online in this very moment, None otherwise. If True, the "date" field will be also set containing the online expiration date (i.e.: the date when a user will automatically go offline in case of no action by his client). - offline (``bool``): - True if the user is offline and has the Last Seen privacy setting visible for everybody, None otherwise. + offline (``bool``, *optional*): + True if the user is offline in this moment and has the Last Seen privacy setting public, None otherwise. If True, the "date" field will be also set containing the last seen date (i.e.: the date when a user was online the last time). - date (``int``): + date (``int``, *optional*): Exact date in unix time. Available only in case "online" or "offline" equals to True. - recently (``bool``): + recently (``bool``, *optional*): True for users with hidden Last Seen privacy that have been online between 1 second and 2-3 days ago, None otherwise. - within_week (``bool``): + within_week (``bool``, *optional*): True for users with hidden Last Seen privacy that have been online between 2-3 and seven days ago, None otherwise. - within_month (``bool``): + within_month (``bool``, *optional*): True for users with hidden Last Seen privacy that have been online between 6-7 days and a month ago, None otherwise. - long_time_ago (``bool``): + long_time_ago (``bool``, *optional*): True for users with hidden Last Seen privacy that have been online more than a month ago (this is also always shown to blocked users), None otherwise. """ From 39636f2843ff699eba4c112dc305e348e5e87383 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 28 Oct 2018 17:18:00 +0100 Subject: [PATCH 344/530] Update get_messages signature --- pyrogram/client/ext/base_client.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyrogram/client/ext/base_client.py b/pyrogram/client/ext/base_client.py index c18c4050..32046115 100644 --- a/pyrogram/client/ext/base_client.py +++ b/pyrogram/client/ext/base_client.py @@ -119,7 +119,8 @@ class BaseClient: def get_messages( self, chat_id: int or str, - message_ids, + message_ids: int or list = None, + reply_to_message_ids: int or list = None, replies: int = 1 ): pass From daee188fa55b68a5b75be758bc066dab9991021f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 28 Oct 2018 17:23:30 +0100 Subject: [PATCH 345/530] Update get_messages to accept the new reply_to_message_ids argument --- .../client/methods/messages/get_messages.py | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/pyrogram/client/methods/messages/get_messages.py b/pyrogram/client/methods/messages/get_messages.py index c2751d74..29cce695 100644 --- a/pyrogram/client/methods/messages/get_messages.py +++ b/pyrogram/client/methods/messages/get_messages.py @@ -23,9 +23,10 @@ from ...ext import BaseClient, utils class GetMessages(BaseClient): def get_messages(self, chat_id: int or str, - message_ids, + message_ids: int or list = None, + reply_to_message_ids: int or list = None, replies: int = 1): - """Use this method to get messages that belong to a specific chat. + """Use this method to get one or more messages that belong to a specific chat. You can retrieve up to 200 messages at once. Args: @@ -50,20 +51,25 @@ class GetMessages(BaseClient): Raises: :class:`Error ` """ + ids, ids_type = ( + (message_ids, types.InputMessageID) if message_ids + else (reply_to_message_ids, types.InputMessageReplyTo) if reply_to_message_ids + else (None, None) + ) + + if ids is None: + raise ValueError("No argument supplied") + peer = self.resolve_peer(chat_id) - is_iterable = not isinstance(message_ids, int) - message_ids = list(message_ids) if is_iterable else [message_ids] - message_ids = [types.InputMessageID(i) for i in message_ids] + + is_iterable = not isinstance(ids, int) + ids = list(ids) if is_iterable else [ids] + ids = [types.InputMessageID(i) for i in ids] if isinstance(peer, types.InputPeerChannel): - rpc = functions.channels.GetMessages( - channel=peer, - id=message_ids - ) + rpc = functions.channels.GetMessages(channel=peer, id=ids) else: - rpc = functions.messages.GetMessages( - id=message_ids - ) + rpc = functions.messages.GetMessages(id=ids) r = self.send(rpc) From 6cf6d496342e636f0d65e5835e1d6ed6cfc180fd Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 28 Oct 2018 17:24:05 +0100 Subject: [PATCH 346/530] Update utils to accommodate changes on get_messages --- pyrogram/client/ext/utils.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 94be83f5..492fbeb0 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -638,7 +638,8 @@ def parse_messages( while True: try: m.reply_to_message = client.get_messages( - m.chat.id, message.reply_to_msg_id, + m.chat.id, + reply_to_message_ids=message.id, replies=replies - 1 ) except FloodWait as e: @@ -750,8 +751,8 @@ def parse_messages( while True: try: m.pinned_message = client.get_messages( - m.chat.id, message.reply_to_msg_id, - replies=0 + m.chat.id, + message_ids=message.reply_to_msg_id ) except FloodWait as e: log.warning("get_messages flood: waiting {} seconds".format(e.x)) @@ -948,7 +949,7 @@ def parse_chat_full( if full_chat.pinned_msg_id: parsed_chat.pinned_message = client.get_messages( parsed_chat.id, - full_chat.pinned_msg_id + message_ids=full_chat.pinned_msg_id ) if isinstance(full_chat.exported_invite, types.ChatInviteExported): From 005c24e4bd711d4bd8005cb76bfe65e969ce7407 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 28 Oct 2018 17:24:37 +0100 Subject: [PATCH 347/530] Update get_messages docstrings --- .../client/methods/messages/get_messages.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/pyrogram/client/methods/messages/get_messages.py b/pyrogram/client/methods/messages/get_messages.py index 29cce695..25fd0da1 100644 --- a/pyrogram/client/methods/messages/get_messages.py +++ b/pyrogram/client/methods/messages/get_messages.py @@ -35,18 +35,23 @@ class GetMessages(BaseClient): For your personal cloud (Saved Messages) you can simply use "me" or "self". For a contact that exists in your Telegram address book you can use his phone number (str). - message_ids (``iterable``): - A list of Message identifiers in the chat specified in *chat_id* or a single message id, as integer. - Iterators and Generators are also accepted. + message_ids (``iterable``, *optional*): + Pass a single message identifier or a list of message ids (as integers) to get the content of the + message themselves. Iterators and Generators are also accepted. + + reply_to_message_ids (``iterable``, *optional*): + Pass a single message identifier or a list of message ids (as integers) to get the content of + the previous message you replied to using this message. Iterators and Generators are also accepted. + If *message_ids* is set, this argument will be ignored. replies (``int``, *optional*): The number of subsequent replies to get for each message. Defaults to 1. Returns: - On success and in case *message_ids* was a list, the returned value will be a list of the requested - :obj:`Messages ` even if a list contains just one element, otherwise if - *message_ids* was an integer, the single requested :obj:`Message ` - is returned. + On success and in case *message_ids* or *reply_to_message_ids* was a list, the returned value will be a + list of the requested :obj:`Messages ` even if a list contains just one element, + otherwise if *message_ids* or *reply_to_message_ids* was an integer, the single requested + :obj:`Message ` is returned. Raises: :class:`Error ` From 229b8df9cd98d816844503028053777c21c05652 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 28 Oct 2018 17:44:24 +0100 Subject: [PATCH 348/530] Fix bad behaviours of get_messages --- pyrogram/client/ext/utils.py | 3 ++- pyrogram/client/methods/messages/get_messages.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/ext/utils.py b/pyrogram/client/ext/utils.py index 492fbeb0..a2f1c3db 100644 --- a/pyrogram/client/ext/utils.py +++ b/pyrogram/client/ext/utils.py @@ -752,7 +752,8 @@ def parse_messages( try: m.pinned_message = client.get_messages( m.chat.id, - message_ids=message.reply_to_msg_id + reply_to_message_ids=message.id, + replies=0 ) except FloodWait as e: log.warning("get_messages flood: waiting {} seconds".format(e.x)) diff --git a/pyrogram/client/methods/messages/get_messages.py b/pyrogram/client/methods/messages/get_messages.py index 25fd0da1..e65ce128 100644 --- a/pyrogram/client/methods/messages/get_messages.py +++ b/pyrogram/client/methods/messages/get_messages.py @@ -69,7 +69,7 @@ class GetMessages(BaseClient): is_iterable = not isinstance(ids, int) ids = list(ids) if is_iterable else [ids] - ids = [types.InputMessageID(i) for i in ids] + ids = [ids_type(i) for i in ids] if isinstance(peer, types.InputPeerChannel): rpc = functions.channels.GetMessages(channel=peer, id=ids) From 529ef143f0de7fcc3d35b0735612f10f83c18962 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sun, 28 Oct 2018 19:52:54 +0100 Subject: [PATCH 349/530] Remove debugging piece of code --- pyrogram/client/ext/emoji.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pyrogram/client/ext/emoji.py b/pyrogram/client/ext/emoji.py index bcd98854..b2dd99fd 100644 --- a/pyrogram/client/ext/emoji.py +++ b/pyrogram/client/ext/emoji.py @@ -7849,8 +7849,3 @@ class Emoji: REVERSED_THUMBS_UP_SIGN_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f592\U0001f3ff" LEFT_WRITING_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f58e\U0001f3ff" REVERSED_VICTORY_HAND_EMOJI_MODIFIER_FITZPATRICK_TYPE_6 = "\U0001f594\U0001f3ff" - -with open("suca.txt", "w") as f: - for k, v in Emoji.__dict__.items(): - if not k.startswith("__"): - f.write("{},{}\n".format(k, v)) \ No newline at end of file From 27d10b04c0953c4718ac10ad93f2f3dd2b9f4433 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Fri, 2 Nov 2018 10:23:41 +0100 Subject: [PATCH 350/530] Update dev version --- pyrogram/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyrogram/__init__.py b/pyrogram/__init__.py index 12f181c3..e8e564cf 100644 --- a/pyrogram/__init__.py +++ b/pyrogram/__init__.py @@ -23,7 +23,7 @@ __copyright__ = "Copyright (C) 2017-2018 Dan Tès Date: Fri, 2 Nov 2018 10:26:59 +0100 Subject: [PATCH 351/530] Reformat code --- pyrogram/client/types/user_and_chats/__init__.py | 2 +- pyrogram/connection/transport/tcp/tcp.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyrogram/client/types/user_and_chats/__init__.py b/pyrogram/client/types/user_and_chats/__init__.py index f4742d83..0f814b92 100644 --- a/pyrogram/client/types/user_and_chats/__init__.py +++ b/pyrogram/client/types/user_and_chats/__init__.py @@ -22,5 +22,5 @@ from .chat_members import ChatMembers from .chat_photo import ChatPhoto from .dialog import Dialog from .dialogs import Dialogs -from .user_status import UserStatus from .user import User +from .user_status import UserStatus diff --git a/pyrogram/connection/transport/tcp/tcp.py b/pyrogram/connection/transport/tcp/tcp.py index 2ee08d09..4d8d4a58 100644 --- a/pyrogram/connection/transport/tcp/tcp.py +++ b/pyrogram/connection/transport/tcp/tcp.py @@ -16,9 +16,9 @@ # You should have received a copy of the GNU Lesser General Public License # along with Pyrogram. If not, see . +import ipaddress import logging import socket -import ipaddress try: import socks From 45129658b0c8eb69a29c92a91e4eb56fe535d210 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 3 Nov 2018 10:49:11 +0100 Subject: [PATCH 352/530] Revisit docstrings --- pyrogram/client/client.py | 17 +++--- .../methods/bots/answer_callback_query.py | 6 +++ .../methods/bots/get_inline_bot_results.py | 4 +- .../methods/bots/request_callback_answer.py | 4 +- .../methods/bots/send_inline_bot_result.py | 2 +- .../client/methods/chats/delete_chat_photo.py | 4 +- .../methods/chats/export_chat_invite_link.py | 2 +- pyrogram/client/methods/chats/get_chat.py | 2 +- .../client/methods/chats/get_chat_member.py | 2 +- .../client/methods/chats/get_chat_members.py | 14 +++-- .../methods/chats/get_chat_members_count.py | 4 +- pyrogram/client/methods/chats/get_dialogs.py | 2 +- pyrogram/client/methods/chats/join_chat.py | 2 +- .../client/methods/chats/kick_chat_member.py | 2 +- pyrogram/client/methods/chats/leave_chat.py | 2 +- .../client/methods/chats/pin_chat_message.py | 4 +- .../methods/chats/promote_chat_member.py | 2 +- .../methods/chats/restrict_chat_member.py | 2 +- .../methods/chats/set_chat_description.py | 4 +- .../client/methods/chats/set_chat_photo.py | 4 +- .../client/methods/chats/set_chat_title.py | 4 +- .../client/methods/chats/unban_chat_member.py | 2 +- .../methods/chats/unpin_chat_message.py | 4 +- .../client/methods/contacts/add_contacts.py | 2 +- .../methods/contacts/delete_contacts.py | 2 +- .../client/methods/contacts/get_contacts.py | 2 +- .../methods/messages/delete_messages.py | 2 +- .../methods/messages/edit_message_caption.py | 2 +- .../methods/messages/edit_message_media.py | 6 +++ .../messages/edit_message_reply_markup.py | 2 +- .../methods/messages/edit_message_text.py | 2 +- .../methods/messages/forward_messages.py | 2 +- .../client/methods/messages/get_history.py | 2 +- .../client/methods/messages/get_messages.py | 2 +- .../client/methods/messages/send_animation.py | 2 +- .../client/methods/messages/send_audio.py | 2 +- .../methods/messages/send_chat_action.py | 4 +- .../client/methods/messages/send_contact.py | 2 +- .../client/methods/messages/send_document.py | 2 +- .../client/methods/messages/send_location.py | 2 +- .../client/methods/messages/send_message.py | 2 +- .../client/methods/messages/send_photo.py | 2 +- .../client/methods/messages/send_sticker.py | 2 +- .../client/methods/messages/send_venue.py | 2 +- .../client/methods/messages/send_video.py | 2 +- .../methods/messages/send_video_note.py | 2 +- .../client/methods/messages/send_voice.py | 2 +- .../methods/password/change_cloud_password.py | 2 +- .../methods/password/enable_cloud_password.py | 2 +- .../methods/password/remove_cloud_password.py | 2 +- .../users/delete_user_profile_photos.py | 2 +- pyrogram/client/methods/users/get_me.py | 2 +- .../methods/users/get_user_profile_photos.py | 2 +- pyrogram/client/methods/users/get_users.py | 2 +- .../methods/users/set_user_profile_photo.py | 2 +- .../methods/utilities/download_media.py | 4 +- pyrogram/client/types/bots/callback_query.py | 4 +- .../types/bots/inline_keyboard_button.py | 18 +++---- .../types/bots/inline_keyboard_markup.py | 2 +- .../types/bots/reply_keyboard_markup.py | 4 +- .../types/messages_and_media/animation.py | 2 +- .../types/messages_and_media/contact.py | 2 +- .../types/messages_and_media/message.py | 54 +++++++++---------- .../client/types/messages_and_media/photo.py | 2 +- .../types/messages_and_media/sticker.py | 4 +- .../client/types/user_and_chats/dialog.py | 2 +- .../types/user_and_chats/user_status.py | 2 +- 67 files changed, 140 insertions(+), 125 deletions(-) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 9b45e941..0a973788 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -147,7 +147,7 @@ class Client(Methods, BaseClient): plugins_dir (``str``, *optional*): Define a custom directory for your plugins. The plugins directory is the location in your filesystem where Pyrogram will automatically load your update handlers. - Defaults to "./plugins". Set to None to completely disable plugins. + Defaults to None (plugins disabled). """ def __init__(self, @@ -218,7 +218,8 @@ class Client(Methods, BaseClient): Requires no parameters. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. + ``ConnectionError`` in case you try to start an already started Client. """ if self.is_started: raise ConnectionError("Client has already been started") @@ -296,6 +297,9 @@ class Client(Methods, BaseClient): def stop(self): """Use this method to manually stop the Client. Requires no parameters. + + Raises: + ``ConnectionError`` in case you try to stop an already stopped Client. """ if not self.is_started: raise ConnectionError("Client is already stopped") @@ -355,7 +359,7 @@ class Client(Methods, BaseClient): Requires no parameters. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ self.start() self.idle() @@ -887,7 +891,7 @@ class Client(Methods, BaseClient): Args: data (``Object``): - The API Scheme function filled with proper arguments. + The API Schema function filled with proper arguments. retries (``int``): Number of retries. @@ -896,7 +900,7 @@ class Client(Methods, BaseClient): Timeout in seconds. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ if not self.is_started: raise ConnectionError("Client has not been started") @@ -1085,7 +1089,8 @@ class Client(Methods, BaseClient): On success, the resolved peer id is returned in form of an InputPeer object. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. + ``KeyError`` in case the peer doesn't exist in the internal database. """ if type(peer_id) is str: if peer_id in ("self", "me"): diff --git a/pyrogram/client/methods/bots/answer_callback_query.py b/pyrogram/client/methods/bots/answer_callback_query.py index 64951692..00e437b1 100644 --- a/pyrogram/client/methods/bots/answer_callback_query.py +++ b/pyrogram/client/methods/bots/answer_callback_query.py @@ -50,6 +50,12 @@ class AnswerCallbackQuery(BaseClient): cache_time (``int``): The maximum amount of time in seconds that the result of the callback query may be cached client-side. Telegram apps will support caching starting in version 3.14. Defaults to 0. + + Returns: + True, on success. + + Raises: + :class:`Error ` in case of a Telegram RPC error. """ return self.send( functions.messages.SetBotCallbackAnswer( diff --git a/pyrogram/client/methods/bots/get_inline_bot_results.py b/pyrogram/client/methods/bots/get_inline_bot_results.py index a43eb6c1..cb931d49 100644 --- a/pyrogram/client/methods/bots/get_inline_bot_results.py +++ b/pyrogram/client/methods/bots/get_inline_bot_results.py @@ -54,8 +54,8 @@ class GetInlineBotResults(BaseClient): On Success, :obj:`BotResults ` is returned. Raises: - :class:`Error ` - ``TimeoutError``: If the bot fails to answer within 10 seconds + :class:`Error ` in case of a Telegram RPC error. + ``TimeoutError`` if the bot fails to answer within 10 seconds """ # TODO: Don't return the raw type diff --git a/pyrogram/client/methods/bots/request_callback_answer.py b/pyrogram/client/methods/bots/request_callback_answer.py index b242f4af..c2c7e312 100644 --- a/pyrogram/client/methods/bots/request_callback_answer.py +++ b/pyrogram/client/methods/bots/request_callback_answer.py @@ -45,8 +45,8 @@ class RequestCallbackAnswer(BaseClient): or as an alert. Raises: - :class:`Error ` - ``TimeoutError``: If the bot fails to answer within 10 seconds + :class:`Error ` in case of a Telegram RPC error. + ``TimeoutError`` if the bot fails to answer within 10 seconds. """ return self.send( functions.messages.GetBotCallbackAnswer( diff --git a/pyrogram/client/methods/bots/send_inline_bot_result.py b/pyrogram/client/methods/bots/send_inline_bot_result.py index bdfcc65c..97ea2a4a 100644 --- a/pyrogram/client/methods/bots/send_inline_bot_result.py +++ b/pyrogram/client/methods/bots/send_inline_bot_result.py @@ -53,7 +53,7 @@ class SendInlineBotResult(BaseClient): On success, the sent Message is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ return self.send( functions.messages.SendInlineBotResult( diff --git a/pyrogram/client/methods/chats/delete_chat_photo.py b/pyrogram/client/methods/chats/delete_chat_photo.py index 31e02923..5a1fe74e 100644 --- a/pyrogram/client/methods/chats/delete_chat_photo.py +++ b/pyrogram/client/methods/chats/delete_chat_photo.py @@ -38,8 +38,8 @@ class DeleteChatPhoto(BaseClient): True on success. Raises: - :class:`Error ` - ``ValueError``: If a chat_id belongs to user. + :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` if a chat_id belongs to user. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/chats/export_chat_invite_link.py b/pyrogram/client/methods/chats/export_chat_invite_link.py index dc289af3..4972493b 100644 --- a/pyrogram/client/methods/chats/export_chat_invite_link.py +++ b/pyrogram/client/methods/chats/export_chat_invite_link.py @@ -35,7 +35,7 @@ class ExportChatInviteLink(BaseClient): On success, the exported invite link as string is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/chats/get_chat.py b/pyrogram/client/methods/chats/get_chat.py index 5cb22db1..8e41695a 100644 --- a/pyrogram/client/methods/chats/get_chat.py +++ b/pyrogram/client/methods/chats/get_chat.py @@ -33,7 +33,7 @@ class GetChat(BaseClient): On success, a :obj:`Chat ` object is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/chats/get_chat_member.py b/pyrogram/client/methods/chats/get_chat_member.py index 51e07f91..b9b23e54 100644 --- a/pyrogram/client/methods/chats/get_chat_member.py +++ b/pyrogram/client/methods/chats/get_chat_member.py @@ -39,7 +39,7 @@ class GetChatMember(BaseClient): On success, a :obj:`ChatMember ` object is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ chat_id = self.resolve_peer(chat_id) user_id = self.resolve_peer(user_id) diff --git a/pyrogram/client/methods/chats/get_chat_members.py b/pyrogram/client/methods/chats/get_chat_members.py index 818c667e..5952a39d 100644 --- a/pyrogram/client/methods/chats/get_chat_members.py +++ b/pyrogram/client/methods/chats/get_chat_members.py @@ -39,7 +39,7 @@ class GetChatMembers(BaseClient): """Use this method to get the members list of a chat. A chat can be either a basic group, a supergroup or a channel. - You must be admin to retrieve the members (also known as "subscribers") list of a channel. + You must be admin to retrieve the members list of a channel (also known as "subscribers"). Args: chat_id (``int`` | ``str``): @@ -51,7 +51,7 @@ class GetChatMembers(BaseClient): limit (``int``, *optional*): Limits the number of members to be retrieved. - Defaults to 200, which is also the maximum limit allowed per method call. + Defaults to 200, which is also the maximum server limit allowed per method call. query (``str``, *optional*): Query string to filter members based on their display names and usernames. @@ -68,9 +68,17 @@ class GetChatMembers(BaseClient): *"administrators"* - chat administrators only. Defaults to *"all"*. - .. [1] On supergroups and channels you can get up to 10,000 members for a single query string. + .. [1] Server limit: on supergroups, you can get up to 10,000 members for a single query and up to 200 members + on channels. .. [2] A query string is applicable only for *"all"*, *"kicked"* and *"restricted"* filters only. + + Returns: + On success, a :obj:`ChatMembers` object is returned. + + Raises: + :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` if you used an invalid filter or a chat_id that belongs to a user. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/chats/get_chat_members_count.py b/pyrogram/client/methods/chats/get_chat_members_count.py index 41650bdd..ec5aaae0 100644 --- a/pyrogram/client/methods/chats/get_chat_members_count.py +++ b/pyrogram/client/methods/chats/get_chat_members_count.py @@ -32,8 +32,8 @@ class GetChatMembersCount(BaseClient): On success, an integer is returned. Raises: - :class:`Error ` - ``ValueError``: If a chat_id belongs to user. + :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` if a chat_id belongs to user. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/chats/get_dialogs.py b/pyrogram/client/methods/chats/get_dialogs.py index e22f7e2f..045c541a 100644 --- a/pyrogram/client/methods/chats/get_dialogs.py +++ b/pyrogram/client/methods/chats/get_dialogs.py @@ -47,7 +47,7 @@ class GetDialogs(BaseClient): On success, a :obj:`Dialogs` object is returned. Raises: - :class:`Error` + :class:`Error ` in case of a Telegram RPC error. """ if pinned_only: diff --git a/pyrogram/client/methods/chats/join_chat.py b/pyrogram/client/methods/chats/join_chat.py index b7b8d42c..f5e3953c 100644 --- a/pyrogram/client/methods/chats/join_chat.py +++ b/pyrogram/client/methods/chats/join_chat.py @@ -30,7 +30,7 @@ class JoinChat(BaseClient): channel/supergroup (in the format @username). Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ match = self.INVITE_LINK_RE.match(chat_id) diff --git a/pyrogram/client/methods/chats/kick_chat_member.py b/pyrogram/client/methods/chats/kick_chat_member.py index e0efa722..5bac80b8 100644 --- a/pyrogram/client/methods/chats/kick_chat_member.py +++ b/pyrogram/client/methods/chats/kick_chat_member.py @@ -53,7 +53,7 @@ class KickChatMember(BaseClient): True on success. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ chat_peer = self.resolve_peer(chat_id) user_peer = self.resolve_peer(user_id) diff --git a/pyrogram/client/methods/chats/leave_chat.py b/pyrogram/client/methods/chats/leave_chat.py index 55d6ef21..8f070b82 100644 --- a/pyrogram/client/methods/chats/leave_chat.py +++ b/pyrogram/client/methods/chats/leave_chat.py @@ -33,7 +33,7 @@ class LeaveChat(BaseClient): Deletes the group chat dialog after leaving (for simple group chats, not supergroups). Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/chats/pin_chat_message.py b/pyrogram/client/methods/chats/pin_chat_message.py index eb653f3c..de7e69d4 100644 --- a/pyrogram/client/methods/chats/pin_chat_message.py +++ b/pyrogram/client/methods/chats/pin_chat_message.py @@ -41,8 +41,8 @@ class PinChatMessage(BaseClient): True on success. Raises: - :class:`Error ` - ``ValueError``: If a chat_id doesn't belong to a supergroup or a channel. + :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` if a chat_id doesn't belong to a supergroup or a channel. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/chats/promote_chat_member.py b/pyrogram/client/methods/chats/promote_chat_member.py index adff4605..9db7709b 100644 --- a/pyrogram/client/methods/chats/promote_chat_member.py +++ b/pyrogram/client/methods/chats/promote_chat_member.py @@ -74,7 +74,7 @@ class PromoteChatMember(BaseClient): True on success. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ self.send( functions.channels.EditAdmin( diff --git a/pyrogram/client/methods/chats/restrict_chat_member.py b/pyrogram/client/methods/chats/restrict_chat_member.py index fb11a989..35db5e59 100644 --- a/pyrogram/client/methods/chats/restrict_chat_member.py +++ b/pyrogram/client/methods/chats/restrict_chat_member.py @@ -64,7 +64,7 @@ class RestrictChatMember(BaseClient): True on success. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ send_messages = True send_media = True diff --git a/pyrogram/client/methods/chats/set_chat_description.py b/pyrogram/client/methods/chats/set_chat_description.py index f9b5c7a2..5f5ead7f 100644 --- a/pyrogram/client/methods/chats/set_chat_description.py +++ b/pyrogram/client/methods/chats/set_chat_description.py @@ -36,8 +36,8 @@ class SetChatDescription(BaseClient): True on success. Raises: - :class:`Error ` - ``ValueError``: If a chat_id doesn't belong to a supergroup or a channel. + :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` if a chat_id doesn't belong to a supergroup or a channel. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/chats/set_chat_photo.py b/pyrogram/client/methods/chats/set_chat_photo.py index 224a8d99..51045a8a 100644 --- a/pyrogram/client/methods/chats/set_chat_photo.py +++ b/pyrogram/client/methods/chats/set_chat_photo.py @@ -45,8 +45,8 @@ class SetChatPhoto(BaseClient): True on success. Raises: - :class:`Error ` - ``ValueError``: If a chat_id belongs to user. + :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` if a chat_id belongs to user. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/chats/set_chat_title.py b/pyrogram/client/methods/chats/set_chat_title.py index 98da8737..c7176c82 100644 --- a/pyrogram/client/methods/chats/set_chat_title.py +++ b/pyrogram/client/methods/chats/set_chat_title.py @@ -41,8 +41,8 @@ class SetChatTitle(BaseClient): True on success. Raises: - :class:`Error ` - ``ValueError``: If a chat_id belongs to user. + :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` if a chat_id belongs to user. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/chats/unban_chat_member.py b/pyrogram/client/methods/chats/unban_chat_member.py index e191a0b7..c8b20131 100644 --- a/pyrogram/client/methods/chats/unban_chat_member.py +++ b/pyrogram/client/methods/chats/unban_chat_member.py @@ -40,7 +40,7 @@ class UnbanChatMember(BaseClient): True on success. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ self.send( functions.channels.EditBanned( diff --git a/pyrogram/client/methods/chats/unpin_chat_message.py b/pyrogram/client/methods/chats/unpin_chat_message.py index 4b0ee46b..9bbb1021 100644 --- a/pyrogram/client/methods/chats/unpin_chat_message.py +++ b/pyrogram/client/methods/chats/unpin_chat_message.py @@ -34,8 +34,8 @@ class UnpinChatMessage(BaseClient): True on success. Raises: - :class:`Error ` - ``ValueError``: If a chat_id doesn't belong to a supergroup or a channel. + :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` if a chat_id doesn't belong to a supergroup or a channel. """ peer = self.resolve_peer(chat_id) diff --git a/pyrogram/client/methods/contacts/add_contacts.py b/pyrogram/client/methods/contacts/add_contacts.py index 10b5e415..3a1dcc92 100644 --- a/pyrogram/client/methods/contacts/add_contacts.py +++ b/pyrogram/client/methods/contacts/add_contacts.py @@ -32,7 +32,7 @@ class AddContacts(BaseClient): On success, the added contacts are returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ imported_contacts = self.send( functions.contacts.ImportContacts( diff --git a/pyrogram/client/methods/contacts/delete_contacts.py b/pyrogram/client/methods/contacts/delete_contacts.py index ed3d67f9..74f08dd1 100644 --- a/pyrogram/client/methods/contacts/delete_contacts.py +++ b/pyrogram/client/methods/contacts/delete_contacts.py @@ -34,7 +34,7 @@ class DeleteContacts(BaseClient): True on success. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ contacts = [] diff --git a/pyrogram/client/methods/contacts/get_contacts.py b/pyrogram/client/methods/contacts/get_contacts.py index 376e8be2..c8f903ce 100644 --- a/pyrogram/client/methods/contacts/get_contacts.py +++ b/pyrogram/client/methods/contacts/get_contacts.py @@ -36,7 +36,7 @@ class GetContacts(BaseClient): On success, the user's contacts are returned Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ while True: try: diff --git a/pyrogram/client/methods/messages/delete_messages.py b/pyrogram/client/methods/messages/delete_messages.py index 8932a699..f824a4b6 100644 --- a/pyrogram/client/methods/messages/delete_messages.py +++ b/pyrogram/client/methods/messages/delete_messages.py @@ -53,7 +53,7 @@ class DeleteMessages(BaseClient): True on success. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ peer = self.resolve_peer(chat_id) message_ids = list(message_ids) if not isinstance(message_ids, int) else [message_ids] diff --git a/pyrogram/client/methods/messages/edit_message_caption.py b/pyrogram/client/methods/messages/edit_message_caption.py index a83c670e..0e12f72b 100644 --- a/pyrogram/client/methods/messages/edit_message_caption.py +++ b/pyrogram/client/methods/messages/edit_message_caption.py @@ -53,7 +53,7 @@ class EditMessageCaption(BaseClient): On success, the edited :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ style = self.html if parse_mode.lower() == "html" else self.markdown diff --git a/pyrogram/client/methods/messages/edit_message_media.py b/pyrogram/client/methods/messages/edit_message_media.py index 74778865..ccbacac7 100644 --- a/pyrogram/client/methods/messages/edit_message_media.py +++ b/pyrogram/client/methods/messages/edit_message_media.py @@ -57,6 +57,12 @@ class EditMessageMedia(BaseClient): reply_markup (:obj:`InlineKeyboardMarkup`, *optional*): An InlineKeyboardMarkup object. + + Returns: + On success, the edited :obj:`Message ` is returned. + + Raises: + :class:`Error ` in case of a Telegram RPC error. """ style = self.html if media.parse_mode.lower() == "html" else self.markdown caption = media.caption diff --git a/pyrogram/client/methods/messages/edit_message_reply_markup.py b/pyrogram/client/methods/messages/edit_message_reply_markup.py index 6d846ca4..72796306 100644 --- a/pyrogram/client/methods/messages/edit_message_reply_markup.py +++ b/pyrogram/client/methods/messages/edit_message_reply_markup.py @@ -44,7 +44,7 @@ class EditMessageReplyMarkup(BaseClient): :obj:`Message ` is returned, otherwise True is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ r = self.send( diff --git a/pyrogram/client/methods/messages/edit_message_text.py b/pyrogram/client/methods/messages/edit_message_text.py index 379a1988..144f5413 100644 --- a/pyrogram/client/methods/messages/edit_message_text.py +++ b/pyrogram/client/methods/messages/edit_message_text.py @@ -57,7 +57,7 @@ class EditMessageText(BaseClient): On success, the edited :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ style = self.html if parse_mode.lower() == "html" else self.markdown diff --git a/pyrogram/client/methods/messages/forward_messages.py b/pyrogram/client/methods/messages/forward_messages.py index 2b24aadf..a8783044 100644 --- a/pyrogram/client/methods/messages/forward_messages.py +++ b/pyrogram/client/methods/messages/forward_messages.py @@ -54,7 +54,7 @@ class ForwardMessages(BaseClient): is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ is_iterable = not isinstance(message_ids, int) message_ids = list(message_ids) if is_iterable else [message_ids] diff --git a/pyrogram/client/methods/messages/get_history.py b/pyrogram/client/methods/messages/get_history.py index 66949a1c..017c7f8b 100644 --- a/pyrogram/client/methods/messages/get_history.py +++ b/pyrogram/client/methods/messages/get_history.py @@ -56,7 +56,7 @@ class GetHistory(BaseClient): On success, a :obj:`Messages ` object is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ r = self.send( diff --git a/pyrogram/client/methods/messages/get_messages.py b/pyrogram/client/methods/messages/get_messages.py index e65ce128..7411e22f 100644 --- a/pyrogram/client/methods/messages/get_messages.py +++ b/pyrogram/client/methods/messages/get_messages.py @@ -54,7 +54,7 @@ class GetMessages(BaseClient): :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ ids, ids_type = ( (message_ids, types.InputMessageID) if message_ids diff --git a/pyrogram/client/methods/messages/send_animation.py b/pyrogram/client/methods/messages/send_animation.py index 39bfb27f..dbd29575 100644 --- a/pyrogram/client/methods/messages/send_animation.py +++ b/pyrogram/client/methods/messages/send_animation.py @@ -116,7 +116,7 @@ class SendAnimation(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ file = None style = self.html if parse_mode.lower() == "html" else self.markdown diff --git a/pyrogram/client/methods/messages/send_audio.py b/pyrogram/client/methods/messages/send_audio.py index 124f3bb3..613ec90c 100644 --- a/pyrogram/client/methods/messages/send_audio.py +++ b/pyrogram/client/methods/messages/send_audio.py @@ -118,7 +118,7 @@ class SendAudio(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ file = None style = self.html if parse_mode.lower() == "html" else self.markdown diff --git a/pyrogram/client/methods/messages/send_chat_action.py b/pyrogram/client/methods/messages/send_chat_action.py index 1117a2dd..c519f67b 100644 --- a/pyrogram/client/methods/messages/send_chat_action.py +++ b/pyrogram/client/methods/messages/send_chat_action.py @@ -47,8 +47,8 @@ class SendChatAction(BaseClient): On success, True is returned. Raises: - :class:`Error ` - ``ValueError``: If the provided string is not a valid ChatAction + :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` if the provided string is not a valid ChatAction. """ # Resolve Enum type diff --git a/pyrogram/client/methods/messages/send_contact.py b/pyrogram/client/methods/messages/send_contact.py index f661a31f..b40321be 100644 --- a/pyrogram/client/methods/messages/send_contact.py +++ b/pyrogram/client/methods/messages/send_contact.py @@ -65,7 +65,7 @@ class SendContact(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ r = self.send( functions.messages.SendMedia( diff --git a/pyrogram/client/methods/messages/send_document.py b/pyrogram/client/methods/messages/send_document.py index 7cab15a5..f3f52178 100644 --- a/pyrogram/client/methods/messages/send_document.py +++ b/pyrogram/client/methods/messages/send_document.py @@ -104,7 +104,7 @@ class SendDocument(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ file = None style = self.html if parse_mode.lower() == "html" else self.markdown diff --git a/pyrogram/client/methods/messages/send_location.py b/pyrogram/client/methods/messages/send_location.py index 49a41256..2bd3eff3 100644 --- a/pyrogram/client/methods/messages/send_location.py +++ b/pyrogram/client/methods/messages/send_location.py @@ -57,7 +57,7 @@ class SendLocation(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ r = self.send( functions.messages.SendMedia( diff --git a/pyrogram/client/methods/messages/send_message.py b/pyrogram/client/methods/messages/send_message.py index 00087307..2ad4b8e4 100644 --- a/pyrogram/client/methods/messages/send_message.py +++ b/pyrogram/client/methods/messages/send_message.py @@ -64,7 +64,7 @@ class SendMessage(BaseClient): On success, the sent :obj:`Message` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ style = self.html if parse_mode.lower() == "html" else self.markdown diff --git a/pyrogram/client/methods/messages/send_photo.py b/pyrogram/client/methods/messages/send_photo.py index c8a74598..7f0c2d07 100644 --- a/pyrogram/client/methods/messages/send_photo.py +++ b/pyrogram/client/methods/messages/send_photo.py @@ -102,7 +102,7 @@ class SendPhoto(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ file = None style = self.html if parse_mode.lower() == "html" else self.markdown diff --git a/pyrogram/client/methods/messages/send_sticker.py b/pyrogram/client/methods/messages/send_sticker.py index 9f1f64da..0b8f8073 100644 --- a/pyrogram/client/methods/messages/send_sticker.py +++ b/pyrogram/client/methods/messages/send_sticker.py @@ -86,7 +86,7 @@ class SendSticker(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ file = None diff --git a/pyrogram/client/methods/messages/send_venue.py b/pyrogram/client/methods/messages/send_venue.py index 3decd5fb..30b848ea 100644 --- a/pyrogram/client/methods/messages/send_venue.py +++ b/pyrogram/client/methods/messages/send_venue.py @@ -74,7 +74,7 @@ class SendVenue(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ r = self.send( functions.messages.SendMedia( diff --git a/pyrogram/client/methods/messages/send_video.py b/pyrogram/client/methods/messages/send_video.py index d58d1851..e8e4627a 100644 --- a/pyrogram/client/methods/messages/send_video.py +++ b/pyrogram/client/methods/messages/send_video.py @@ -120,7 +120,7 @@ class SendVideo(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ file = None style = self.html if parse_mode.lower() == "html" else self.markdown diff --git a/pyrogram/client/methods/messages/send_video_note.py b/pyrogram/client/methods/messages/send_video_note.py index 6da1962a..de539a81 100644 --- a/pyrogram/client/methods/messages/send_video_note.py +++ b/pyrogram/client/methods/messages/send_video_note.py @@ -102,7 +102,7 @@ class SendVideoNote(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ file = None diff --git a/pyrogram/client/methods/messages/send_voice.py b/pyrogram/client/methods/messages/send_voice.py index a3a35b8f..4be702d0 100644 --- a/pyrogram/client/methods/messages/send_voice.py +++ b/pyrogram/client/methods/messages/send_voice.py @@ -101,7 +101,7 @@ class SendVoice(BaseClient): On success, the sent :obj:`Message ` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ file = None style = self.html if parse_mode.lower() == "html" else self.markdown diff --git a/pyrogram/client/methods/password/change_cloud_password.py b/pyrogram/client/methods/password/change_cloud_password.py index 045a0cc9..4b5e86b3 100644 --- a/pyrogram/client/methods/password/change_cloud_password.py +++ b/pyrogram/client/methods/password/change_cloud_password.py @@ -41,7 +41,7 @@ class ChangeCloudPassword(BaseClient): True on success, False otherwise. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ r = self.send(functions.account.GetPassword()) diff --git a/pyrogram/client/methods/password/enable_cloud_password.py b/pyrogram/client/methods/password/enable_cloud_password.py index 639879cb..80d527c4 100644 --- a/pyrogram/client/methods/password/enable_cloud_password.py +++ b/pyrogram/client/methods/password/enable_cloud_password.py @@ -43,7 +43,7 @@ class EnableCloudPassword(BaseClient): True on success, False otherwise. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ r = self.send(functions.account.GetPassword()) diff --git a/pyrogram/client/methods/password/remove_cloud_password.py b/pyrogram/client/methods/password/remove_cloud_password.py index bfbb2c8b..5a9875ff 100644 --- a/pyrogram/client/methods/password/remove_cloud_password.py +++ b/pyrogram/client/methods/password/remove_cloud_password.py @@ -34,7 +34,7 @@ class RemoveCloudPassword(BaseClient): True on success, False otherwise. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ r = self.send(functions.account.GetPassword()) diff --git a/pyrogram/client/methods/users/delete_user_profile_photos.py b/pyrogram/client/methods/users/delete_user_profile_photos.py index 58c2deb4..6f13e17f 100644 --- a/pyrogram/client/methods/users/delete_user_profile_photos.py +++ b/pyrogram/client/methods/users/delete_user_profile_photos.py @@ -36,7 +36,7 @@ class DeleteUserProfilePhotos(BaseClient): True on success. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ id = id if isinstance(id, list) else [id] input_photos = [] diff --git a/pyrogram/client/methods/users/get_me.py b/pyrogram/client/methods/users/get_me.py index 80ee65e9..009ef71e 100644 --- a/pyrogram/client/methods/users/get_me.py +++ b/pyrogram/client/methods/users/get_me.py @@ -28,7 +28,7 @@ class GetMe(BaseClient): Basic information about the user or bot in form of a :obj:`User` object Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ return utils.parse_user( self.send( diff --git a/pyrogram/client/methods/users/get_user_profile_photos.py b/pyrogram/client/methods/users/get_user_profile_photos.py index 127ad232..552ebb9a 100644 --- a/pyrogram/client/methods/users/get_user_profile_photos.py +++ b/pyrogram/client/methods/users/get_user_profile_photos.py @@ -45,7 +45,7 @@ class GetUserProfilePhotos(BaseClient): On success, a :obj:`UserProfilePhotos` object is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ return utils.parse_profile_photos( self.send( diff --git a/pyrogram/client/methods/users/get_users.py b/pyrogram/client/methods/users/get_users.py index 400e35a1..70c62568 100644 --- a/pyrogram/client/methods/users/get_users.py +++ b/pyrogram/client/methods/users/get_users.py @@ -37,7 +37,7 @@ class GetUsers(BaseClient): *user_ids* was an integer, the single requested :obj:`User` is returned. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ is_iterable = not isinstance(user_ids, (int, str)) user_ids = list(user_ids) if is_iterable else [user_ids] diff --git a/pyrogram/client/methods/users/set_user_profile_photo.py b/pyrogram/client/methods/users/set_user_profile_photo.py index b107a968..b3ab66b1 100644 --- a/pyrogram/client/methods/users/set_user_profile_photo.py +++ b/pyrogram/client/methods/users/set_user_profile_photo.py @@ -36,7 +36,7 @@ class SetUserProfilePhoto(BaseClient): True on success. Raises: - :class:`Error ` + :class:`Error ` in case of a Telegram RPC error. """ return bool( diff --git a/pyrogram/client/methods/utilities/download_media.py b/pyrogram/client/methods/utilities/download_media.py index 26918f27..1453539c 100644 --- a/pyrogram/client/methods/utilities/download_media.py +++ b/pyrogram/client/methods/utilities/download_media.py @@ -73,8 +73,8 @@ class DownloadMedia(BaseClient): On success, the absolute path of the downloaded file as string is returned, None otherwise. Raises: - :class:`Error ` - ``ValueError``: If the message doesn't contain any downloadable media + :class:`Error ` in case of a Telegram RPC error. + ``ValueError`` if the message doesn't contain any downloadable media """ error_message = "This message doesn't contain any downloadable media" diff --git a/pyrogram/client/types/bots/callback_query.py b/pyrogram/client/types/bots/callback_query.py index 083ab58a..843a9bb8 100644 --- a/pyrogram/client/types/bots/callback_query.py +++ b/pyrogram/client/types/bots/callback_query.py @@ -73,7 +73,9 @@ class CallbackQuery(Object): self.game_short_name = game_short_name # flags.3?string def answer(self, text: str = None, show_alert: bool = None, url: str = None, cache_time: int = 0): - """Use this method as a shortcut for: + """Bound method *answer* of :obj:`CallbackQuery `. + + Use this method as a shortcut for: .. code-block:: python diff --git a/pyrogram/client/types/bots/inline_keyboard_button.py b/pyrogram/client/types/bots/inline_keyboard_button.py index 001b105f..0f4779a9 100644 --- a/pyrogram/client/types/bots/inline_keyboard_button.py +++ b/pyrogram/client/types/bots/inline_keyboard_button.py @@ -50,16 +50,10 @@ class InlineKeyboardButton(Object): chat's input field. Can be empty, in which case only the bot's username will be inserted.This offers a quick way for the user to open your bot in inline mode in the same chat – good for selecting something from multiple options. - - callback_game (:obj:`CallbackGame `, *optional*): - Description of the game that will be launched when the user presses the button.NOTE: This type of button - must always be the first button in the first row. - - pay (``bool``, *optional*): - Specify True, to send a Pay button.NOTE: This type of button must always be the first button in the - first row. """ + # TODO: Add callback_game and pay fields + ID = 0xb0700019 def __init__( @@ -69,16 +63,16 @@ class InlineKeyboardButton(Object): url: str = None, switch_inline_query: str = None, switch_inline_query_current_chat: str = None, - callback_game=None, - pay: bool = None + # callback_game=None, + # pay: bool = None ): self.text = text self.url = url self.callback_data = callback_data self.switch_inline_query = switch_inline_query self.switch_inline_query_current_chat = switch_inline_query_current_chat - self.callback_game = callback_game - self.pay = pay + # self.callback_game = callback_game + # self.pay = pay @staticmethod def read(b, *args): diff --git a/pyrogram/client/types/bots/inline_keyboard_markup.py b/pyrogram/client/types/bots/inline_keyboard_markup.py index c21fabab..2a6993c4 100644 --- a/pyrogram/client/types/bots/inline_keyboard_markup.py +++ b/pyrogram/client/types/bots/inline_keyboard_markup.py @@ -27,7 +27,7 @@ class InlineKeyboardMarkup(Object): Args: inline_keyboard (List of List of :obj:`InlineKeyboardButton `): - Array of button rows, each represented by an Array of InlineKeyboardButton objects. + List of button rows, each represented by a List of InlineKeyboardButton objects. """ ID = 0xb0700020 diff --git a/pyrogram/client/types/bots/reply_keyboard_markup.py b/pyrogram/client/types/bots/reply_keyboard_markup.py index f6d42a2b..29fc1081 100644 --- a/pyrogram/client/types/bots/reply_keyboard_markup.py +++ b/pyrogram/client/types/bots/reply_keyboard_markup.py @@ -25,11 +25,11 @@ from . import KeyboardButton class ReplyKeyboardMarkup(Object): - """This object represents a custom keyboard with reply options (see Introduction to bots for details and examples). + """This object represents a custom keyboard with reply options. Args: keyboard (List of List of :obj:`KeyboardButton `): - Array of button rows, each represented by an Array of KeyboardButton objects. + List of button rows, each represented by a List of KeyboardButton objects. resize_keyboard (``bool``, *optional*): Requests clients to resize the keyboard vertically for optimal fit (e.g., make the keyboard smaller if diff --git a/pyrogram/client/types/messages_and_media/animation.py b/pyrogram/client/types/messages_and_media/animation.py index 85d5a365..a8641e9e 100644 --- a/pyrogram/client/types/messages_and_media/animation.py +++ b/pyrogram/client/types/messages_and_media/animation.py @@ -48,7 +48,7 @@ class Animation(Object): File size. date (``int``, *optional*): - Date the Animation was sent in Unix time. + Date the animation was sent in Unix time. """ ID = 0xb0700025 diff --git a/pyrogram/client/types/messages_and_media/contact.py b/pyrogram/client/types/messages_and_media/contact.py index a7be558e..2569f03a 100644 --- a/pyrogram/client/types/messages_and_media/contact.py +++ b/pyrogram/client/types/messages_and_media/contact.py @@ -36,7 +36,7 @@ class Contact(Object): Contact's user identifier in Telegram. vcard (``str``, *optional*): - Additional data about the contact in the form of a vCard + Additional data about the contact in the form of a vCard. """ ID = 0xb0700011 diff --git a/pyrogram/client/types/messages_and_media/message.py b/pyrogram/client/types/messages_and_media/message.py index e86e4300..86bb57bc 100644 --- a/pyrogram/client/types/messages_and_media/message.py +++ b/pyrogram/client/types/messages_and_media/message.py @@ -164,20 +164,11 @@ class Message(Object): Note that the Message object in this field will not contain further reply_to_message fields even if it is itself a reply. - invoice (:obj:`Invoice `, *optional*): - Message is an invoice for a payment, information about the invoice. More about payments. - - successful_payment (:obj:`SuccessfulPayment `, *optional*): - Message is a service message about a successful payment, information about the payment. More about payments. - - connected_website (``str``, *optional*): - The domain name of the website on which the user has logged in. More about Telegram Login. - views (``int``, *optional*): Channel post views. via_bot (:obj:`User `): - Via bot. + The information of the bot that generated the message from an inline query of a user. outgoing (``bool``, *optional*): Whether the message is incoming or outgoing. @@ -199,6 +190,7 @@ class Message(Object): instructions to remove reply keyboard or to force a reply from the user. """ + # TODO: Add game missing field. Also invoice, successful_payment, connected_website ID = 0xb0700003 def __init__( @@ -243,9 +235,6 @@ class Message(Object): migrate_to_chat_id: int = None, migrate_from_chat_id: int = None, pinned_message=None, - invoice=None, - successful_payment=None, - connected_website=None, views: int = None, via_bot=None, outgoing: bool = None, @@ -293,9 +282,6 @@ class Message(Object): self.migrate_to_chat_id = migrate_to_chat_id # flags.33?int self.migrate_from_chat_id = migrate_from_chat_id # flags.34?int self.pinned_message = pinned_message # flags.35?Message - self.invoice = invoice # flags.36?Invoice - self.successful_payment = successful_payment # flags.37?SuccessfulPayment - self.connected_website = connected_website # flags.38?string self.views = views # flags.39?int self.via_bot = via_bot # flags.40?User self.outgoing = outgoing @@ -311,7 +297,9 @@ class Message(Object): disable_notification: bool = None, reply_to_message_id: int = None, reply_markup=None): - """Use this method as a shortcut for: + """Bound method *reply* of :obj:`Message `. + + Use as a shortcut for: .. code-block:: python @@ -379,7 +367,9 @@ class Message(Object): def forward(self, chat_id: int or str, disable_notification: bool = None): - """Use this method as a shortcut for: + """Bound method *forward* of :obj:`Message `. + + Use as a shortcut for: .. code-block:: python @@ -418,7 +408,9 @@ class Message(Object): ) def delete(self, revoke: bool = True): - """Use this method as a shortcut for: + """Bound method *delete* of :obj:`Message `. + + Use as a shortcut for: .. code-block:: python @@ -454,8 +446,9 @@ class Message(Object): return True def click(self, x: int or str, y: int = None, quote: bool = None): - """Use this method to click a button attached to the message. - It's a shortcut for: + """Bound method *click* of :obj:`Message `. + + Use as a shortcut for clicking a button attached to the message instead of. - Clicking inline buttons: @@ -476,16 +469,17 @@ class Message(Object): text=message.reply_markup[i][j].text ) - This method can be used in three different ways: + Example: + This method can be used in three different ways: - 1. Pass one integer argument only (e.g.: ``.click(2)``, to click a button at index 2). - Buttons are counted left to right, starting from the top. + 1. Pass one integer argument only (e.g.: ``.click(2)``, to click a button at index 2). + Buttons are counted left to right, starting from the top. - 2. Pass two integer arguments (e.g.: ``.click(1, 0)``, to click a button at position (1, 0)). - The origin (0, 0) is top-left. + 2. Pass two integer arguments (e.g.: ``.click(1, 0)``, to click a button at position (1, 0)). + The origin (0, 0) is top-left. - 3. Pass one string argument only (e.g.: ``.click("Settings")``, to click a button by using its label). - Only the first matching button will be pressed. + 3. Pass one string argument only (e.g.: ``.click("Settings")``, to click a button by using its label). + Only the first matching button will be pressed. Args: x (``int`` | ``str``): @@ -567,7 +561,9 @@ class Message(Object): raise ValueError("The message doesn't contain any keyboard") def download(self, file_name: str = "", block: bool = True): - """Use this method as a shortcut for: + """Bound method *download* of :obj:`Message `. + + Use as a shortcut for: .. code-block:: python diff --git a/pyrogram/client/types/messages_and_media/photo.py b/pyrogram/client/types/messages_and_media/photo.py index d9deed76..4037025b 100644 --- a/pyrogram/client/types/messages_and_media/photo.py +++ b/pyrogram/client/types/messages_and_media/photo.py @@ -20,7 +20,7 @@ from pyrogram.api.core import Object class Photo(Object): - """This object represents a Photo + """This object represents a Photo. Args: id (``str``): diff --git a/pyrogram/client/types/messages_and_media/sticker.py b/pyrogram/client/types/messages_and_media/sticker.py index 2e7ac901..d2ff6731 100644 --- a/pyrogram/client/types/messages_and_media/sticker.py +++ b/pyrogram/client/types/messages_and_media/sticker.py @@ -52,11 +52,9 @@ class Sticker(Object): set_name (``str``, *optional*): Name of the sticker set to which the sticker belongs. - - mask_position (:obj:`MaskPosition `, *optional*): - For mask stickers, the position where the mask should be placed. """ + # TODO: Add mask position ID = 0xb0700017 def __init__( diff --git a/pyrogram/client/types/user_and_chats/dialog.py b/pyrogram/client/types/user_and_chats/dialog.py index fa5fb2b8..8107d363 100644 --- a/pyrogram/client/types/user_and_chats/dialog.py +++ b/pyrogram/client/types/user_and_chats/dialog.py @@ -20,7 +20,7 @@ from pyrogram.api.core import Object class Dialog(Object): - """This object represents a dialog + """This object represents a dialog. Args: chat (:obj:`Chat `): diff --git a/pyrogram/client/types/user_and_chats/user_status.py b/pyrogram/client/types/user_and_chats/user_status.py index b2974dbe..cc96df52 100644 --- a/pyrogram/client/types/user_and_chats/user_status.py +++ b/pyrogram/client/types/user_and_chats/user_status.py @@ -20,7 +20,7 @@ from pyrogram.api.core import Object class UserStatus(Object): - """This object represents a User status (Last Seen privacy) + """This object represents a User status (Last Seen privacy). .. note:: From 74754f288aebf1f6f309eaf3507207eec2ae698f Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 3 Nov 2018 11:00:26 +0100 Subject: [PATCH 353/530] Update SmartPlugins page --- docs/source/resources/SmartPlugins.rst | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/source/resources/SmartPlugins.rst b/docs/source/resources/SmartPlugins.rst index ecb5dfdc..46c4e17a 100644 --- a/docs/source/resources/SmartPlugins.rst +++ b/docs/source/resources/SmartPlugins.rst @@ -5,15 +5,22 @@ Pyrogram embeds a **smart** (automatic) and lightweight plugin system that is me of large projects and to provide a way for creating pluggable components that can be **easily shared** across different Pyrogram applications with **minimal boilerplate code**. +.. tip:: + + Smart Plugins are completely optional and disabled by default. + Introduction ------------ Prior to the Smart Plugin system, pluggable handlers were already possible. For example, if you wanted to modularize your applications, you had to do something like this... -.. note:: This is an example application that replies in private chats with two messages: one containing the same - text message you sent and the other containing the reversed text message (e.g.: "pyrogram" -> "pyrogram" and - "margoryp"): +.. note:: + + This is an example application that replies in private chats with two messages: one containing the same + text message you sent and the other containing the reversed text message. + + Example: *"Pyrogram"* replies with *"Pyrogram"* and *"margoryP"* .. code-block:: text From 09563067c77404326233ae5fbc49711c025b483d Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 3 Nov 2018 11:10:43 +0100 Subject: [PATCH 354/530] Add a check for 0 B file sizes --- pyrogram/client/client.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyrogram/client/client.py b/pyrogram/client/client.py index 9deecd3d..33f11bad 100644 --- a/pyrogram/client/client.py +++ b/pyrogram/client/client.py @@ -1123,8 +1123,13 @@ class Client(Methods, BaseClient): progress_args: tuple = ()): part_size = 512 * 1024 file_size = os.path.getsize(path) + + if file_size == 0: + raise ValueError("File size equals to 0 B") + if file_size > 1500 * 1024 * 1024: raise ValueError("Telegram doesn't support uploading files bigger than 1500 MiB") + file_total_parts = int(math.ceil(file_size / part_size)) is_big = True if file_size > 10 * 1024 * 1024 else False is_missing_part = True if file_id is not None else False From bc703ae6d733631220986c4984494a27afdc699e Mon Sep 17 00:00:00 2001 From: Furoin Date: Sat, 3 Nov 2018 14:57:57 +0300 Subject: [PATCH 355/530] added Filters.dan --- pyrogram/client/filters/filters.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyrogram/client/filters/filters.py b/pyrogram/client/filters/filters.py index 173b211c..aeb730a7 100644 --- a/pyrogram/client/filters/filters.py +++ b/pyrogram/client/filters/filters.py @@ -166,6 +166,8 @@ class Filters: inline_keyboard = create("InlineKeyboard", lambda _, m: isinstance(m.reply_markup, InlineKeyboardMarkup)) """Filter messages containing inline keyboard markups""" + dan = create("Dan", lambda _, m: bool(m.from_user and m.from_user.id == 23122162)) + @staticmethod def command(command: str or list, prefix: str or list = "/", From caea507f058f412806da34c74364b974dac4513c Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 3 Nov 2018 14:23:48 +0100 Subject: [PATCH 356/530] Remove undoc-members for Filters doc page --- docs/source/pyrogram/Filters.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/source/pyrogram/Filters.rst b/docs/source/pyrogram/Filters.rst index 083bd64a..091031ae 100644 --- a/docs/source/pyrogram/Filters.rst +++ b/docs/source/pyrogram/Filters.rst @@ -3,4 +3,3 @@ Filters .. autoclass:: pyrogram.Filters :members: - :undoc-members: From a48e0ce33ad948809258342368d148699a755bec Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Sat, 3 Nov 2018 14:24:02 +0100 Subject: [PATCH 357/530] Update Installation page --- docs/source/start/Installation.rst | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/source/start/Installation.rst b/docs/source/start/Installation.rst index 2a738b57..e7b2eb3d 100644 --- a/docs/source/start/Installation.rst +++ b/docs/source/start/Installation.rst @@ -50,14 +50,18 @@ Use this command to install: $ pip3 install --upgrade git+https://github.com/pyrogram/pyrogram.git@asyncio -Pyrogram API remains the same and features are kept up to date from the non-async, default develop branch. +Pyrogram API remains the same and features are kept up to date from the non-async, default develop branch, but you +are obviously required Python asyncio knowledge in order to take full advantage of it. -.. note:: +.. tip:: The idea to turn Pyrogram fully asynchronous is still under consideration, but is wise to expect that in future this would be the one and only way to work with Pyrogram. + You can start using Pyrogram Async variant right now as an excuse to learn more about asynchronous programming and + do experiments with it! + .. raw:: html