diff --git a/CHANGELOG.md b/CHANGELOG.md index 2727d1f2c..0ea649111 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed -- **Breaking:** Changed `mix pleroma.user toggle_confirmed` to `mix pleroma.user confirm` +- **Breaking**: Changed `mix pleroma.user toggle_confirmed` to `mix pleroma.user confirm` +- **Breaking**: Changed `mix pleroma.user toggle_activated` to `mix pleroma.user activate/deactivate` - **Breaking**: AdminAPI changed User field `confirmation_pending` to `is_confirmed` - **Breaking**: AdminAPI changed User field `approval_pending` to `is_approved` +- **Breaking**: AdminAPI changed User field `deactivated` to `is_active` - Polls now always return a `voters_count`, even if they are single-choice. - Admin Emails: The ap id is used as the user link in emails now. - Improved registration workflow for email confirmation and account approval modes. diff --git a/docs/administration/CLI_tasks/user.md b/docs/administration/CLI_tasks/user.md index b57dce0e7..24fdaeab4 100644 --- a/docs/administration/CLI_tasks/user.md +++ b/docs/administration/CLI_tasks/user.md @@ -133,22 +133,20 @@ mix pleroma.user sign_out ``` - -## Deactivate or activate a user +## Activate a user === "OTP" ```sh - ./bin/pleroma_ctl user toggle_activated + ./bin/pleroma_ctl user activate NICKNAME ``` === "From Source" ```sh - mix pleroma.user toggle_activated + mix pleroma.user activate NICKNAME ``` - ## Deactivate a user and unsubscribes local users from the user === "OTP" diff --git a/lib/mix/tasks/pleroma/email.ex b/lib/mix/tasks/pleroma/email.ex index 6b7555fb8..e05c207e5 100644 --- a/lib/mix/tasks/pleroma/email.ex +++ b/lib/mix/tasks/pleroma/email.ex @@ -33,7 +33,7 @@ def run(["resend_confirmation_emails"]) do Pleroma.User.Query.build(%{ local: true, - deactivated: false, + is_active: true, is_confirmed: false, invisible: false }) diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index e87f1c271..53d5fc6d9 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -107,21 +107,6 @@ def run(["rm", nickname]) do end end - def run(["toggle_activated", nickname]) do - start_pleroma() - - with %User{} = user <- User.get_cached_by_nickname(nickname) do - {:ok, user} = User.deactivate(user, !user.deactivated) - - shell_info( - "Activation status of #{nickname}: #{if(user.deactivated, do: "de", else: "")}activated" - ) - else - _ -> - shell_error("No user #{nickname}") - end - end - def run(["reset_password", nickname]) do start_pleroma() @@ -156,20 +141,41 @@ def run(["reset_mfa", nickname]) do end end + def run(["activate", nickname]) do + start_pleroma() + + with %User{} = user <- User.get_cached_by_nickname(nickname), + false <- user.is_active do + User.set_activation(user, true) + :timer.sleep(500) + + shell_info("Successfully activated #{nickname}") + else + true -> + shell_info("User #{nickname} already activated") + + _ -> + shell_error("No user #{nickname}") + end + end + def run(["deactivate", nickname]) do start_pleroma() - with %User{} = user <- User.get_cached_by_nickname(nickname) do - shell_info("Deactivating #{user.nickname}") - User.deactivate(user) + with %User{} = user <- User.get_cached_by_nickname(nickname), + true <- user.is_active do + User.set_activation(user, false) :timer.sleep(500) user = User.get_cached_by_id(user.id) if Enum.empty?(Enum.filter(User.get_friends(user), & &1.local)) do - shell_info("Successfully unsubscribed all local followers from #{user.nickname}") + shell_info("Successfully deactivated #{nickname} and unsubscribed all local followers") end else + false -> + shell_info("User #{nickname} already deactivated") + _ -> shell_error("No user #{nickname}") end @@ -365,7 +371,7 @@ def run(["confirm_all"]) do Pleroma.User.Query.build(%{ local: true, - deactivated: false, + is_active: true, is_moderator: false, is_admin: false, invisible: false @@ -383,7 +389,7 @@ def run(["unconfirm_all"]) do Pleroma.User.Query.build(%{ local: true, - deactivated: false, + is_active: true, is_moderator: false, is_admin: false, invisible: false @@ -420,7 +426,7 @@ def run(["list"]) do shell_info( "#{user.nickname} moderator: #{user.is_moderator}, admin: #{user.is_admin}, locked: #{ user.is_locked - }, deactivated: #{user.deactivated}" + }, is_active: #{user.is_active}" ) end) end) diff --git a/lib/pleroma/following_relationship.ex b/lib/pleroma/following_relationship.ex index 147cb9df0..a0c7e6e39 100644 --- a/lib/pleroma/following_relationship.ex +++ b/lib/pleroma/following_relationship.ex @@ -152,7 +152,7 @@ def get_follow_requests(%User{id: id}) do |> join(:inner, [r], f in assoc(r, :follower)) |> where([r], r.state == ^:follow_pending) |> where([r], r.following_id == ^id) - |> where([r, f], f.deactivated != true) + |> where([r, f], f.is_active == true) |> select([r, f], f) |> Repo.all() end diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 7a69dacde..55b513212 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -115,7 +115,7 @@ def for_user_query(user, opts \\ %{}) do |> where( [n, a], fragment( - "? not in (SELECT ap_id FROM users WHERE deactivated = 'true')", + "? not in (SELECT ap_id FROM users WHERE is_active = 'false')", a.actor ) ) diff --git a/lib/pleroma/stats.ex b/lib/pleroma/stats.ex index 77505bb04..b096a9b1e 100644 --- a/lib/pleroma/stats.ex +++ b/lib/pleroma/stats.ex @@ -75,7 +75,7 @@ def calculate_stat_data do users_query = from(u in User, - where: u.deactivated != true, + where: u.is_active == true, where: u.local == true, where: not is_nil(u.nickname), where: not u.invisible diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 2aeacf816..e422b59f1 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -117,7 +117,7 @@ defmodule Pleroma.User do field(:confirmation_token, :string, default: nil) field(:default_scope, :string, default: "public") field(:domain_blocks, {:array, :string}, default: []) - field(:deactivated, :boolean, default: false) + field(:is_active, :boolean, default: true) field(:no_rich_text, :boolean, default: false) field(:ap_enabled, :boolean, default: false) field(:is_moderator, :boolean, default: false) @@ -217,7 +217,8 @@ def unquote(:"#{outgoing_relation_target}_relation")(user, restrict_deactivated? target_users_query = assoc(user, unquote(outgoing_relation_target)) if restrict_deactivated? do - restrict_deactivated(target_users_query) + target_users_query + |> User.Query.build(%{deactivated: false}) else target_users_query end @@ -286,7 +287,7 @@ def binary_id(%User{} = user), do: binary_id(user.id) @doc "Returns status account" @spec account_status(User.t()) :: account_status() - def account_status(%User{deactivated: true}), do: :deactivated + def account_status(%User{is_active: false}), do: :deactivated def account_status(%User{password_reset_pending: true}), do: :password_reset_pending def account_status(%User{local: true, is_approved: false}), do: :approval_pending def account_status(%User{local: true, is_confirmed: false}), do: :confirmation_pending @@ -378,11 +379,6 @@ def ap_followers(%User{} = user), do: "#{ap_id(user)}/followers" def ap_following(%User{following_address: fa}) when is_binary(fa), do: fa def ap_following(%User{} = user), do: "#{ap_id(user)}/following" - @spec restrict_deactivated(Ecto.Query.t()) :: Ecto.Query.t() - def restrict_deactivated(query) do - from(u in query, where: u.deactivated != ^true) - end - defp truncate_fields_param(params) do if Map.has_key?(params, :fields) do Map.put(params, :fields, Enum.map(params[:fields], &truncate_field/1)) @@ -777,7 +773,7 @@ defp autofollow_users(user) do candidates = Config.get([:instance, :autofollowed_nicknames]) autofollowed_users = - User.Query.build(%{nickname: candidates, local: true, deactivated: false}) + User.Query.build(%{nickname: candidates, local: true, is_active: true}) |> Repo.all() follow_all(user, autofollowed_users) @@ -938,7 +934,7 @@ def follow(%User{} = follower, %User{} = followed, state \\ :follow_accept) do deny_follow_blocked = Config.get([:user, :deny_follow_blocked]) cond do - followed.deactivated -> + not followed.is_active -> {:error, "Could not follow user: #{followed.nickname} is deactivated."} deny_follow_blocked and blocks?(followed, follower) -> @@ -1173,7 +1169,7 @@ def get_or_fetch_by_nickname(nickname) do @spec get_followers_query(User.t(), pos_integer() | nil) :: Ecto.Query.t() def get_followers_query(%User{} = user, nil) do - User.Query.build(%{followers: user, deactivated: false}) + User.Query.build(%{followers: user, is_active: true}) end def get_followers_query(%User{} = user, page) do @@ -1349,7 +1345,7 @@ def update_following_count(%User{local: true} = user) do @spec get_users_from_set([String.t()], keyword()) :: [User.t()] def get_users_from_set(ap_ids, opts \\ []) do local_only = Keyword.get(opts, :local_only, true) - criteria = %{ap_id: ap_ids, deactivated: false} + criteria = %{ap_id: ap_ids, is_active: true} criteria = if local_only, do: Map.put(criteria, :local, true), else: criteria User.Query.build(criteria) @@ -1360,7 +1356,7 @@ def get_users_from_set(ap_ids, opts \\ []) do def get_recipients_from_activity(%Activity{recipients: to, actor: actor}) do to = [actor | to] - query = User.Query.build(%{recipients_from_activity: to, local: true, deactivated: false}) + query = User.Query.build(%{recipients_from_activity: to, local: true, is_active: true}) query |> Repo.all() @@ -1579,19 +1575,19 @@ defp maybe_filter_on_ap_id(query, ap_ids) when is_list(ap_ids) do defp maybe_filter_on_ap_id(query, _ap_ids), do: query - def deactivate_async(user, status \\ true) do - BackgroundWorker.enqueue("deactivate_user", %{"user_id" => user.id, "status" => status}) + def set_activation_async(user, status \\ true) do + BackgroundWorker.enqueue("user_activation", %{"user_id" => user.id, "status" => status}) end - def deactivate(user, status \\ true) - - def deactivate(users, status) when is_list(users) do + @spec set_activation([User.t()], boolean()) :: {:ok, User.t()} | {:error, Changeset.t()} + def set_activation(users, status) when is_list(users) do Repo.transaction(fn -> - for user <- users, do: deactivate(user, status) + for user <- users, do: set_activation(user, status) end) end - def deactivate(%User{} = user, status) do + @spec set_activation(User.t(), boolean()) :: {:ok, User.t()} | {:error, Changeset.t()} + def set_activation(%User{} = user, status) do with {:ok, user} <- set_activation_status(user, status) do user |> get_followers() @@ -1680,7 +1676,7 @@ def purge_user_changeset(user) do registration_reason: nil, confirmation_token: nil, domain_blocks: [], - deactivated: true, + is_active: false, ap_enabled: false, is_moderator: false, is_admin: false, @@ -1754,7 +1750,7 @@ def perform(:delete, %User{} = user) do delete_or_deactivate(user) end - def perform(:deactivate_async, user, status), do: deactivate(user, status) + def perform(:set_activation_async, user, status), do: set_activation(user, status) @spec external_users_query() :: Ecto.Query.t() def external_users_query do @@ -2048,7 +2044,7 @@ def error_user(ap_id) do @spec all_superusers() :: [User.t()] def all_superusers do - User.Query.build(%{super_users: true, local: true, deactivated: false}) + User.Query.build(%{super_users: true, local: true, is_active: true}) |> Repo.all() end @@ -2089,7 +2085,7 @@ def list_inactive_users_query(inactivity_threshold \\ 7) do left_join: a in Pleroma.Activity, on: u.ap_id == a.actor, where: not is_nil(u.nickname), - where: u.deactivated != ^true, + where: u.is_active == ^true, where: u.id not in ^has_read_notifications, group_by: u.id, having: @@ -2210,9 +2206,9 @@ def change_email(user, email) do end # Internal function; public one is `deactivate/2` - defp set_activation_status(user, deactivated) do + defp set_activation_status(user, status) do user - |> cast(%{deactivated: deactivated}, [:deactivated]) + |> cast(%{is_active: status}, [:is_active]) |> update_and_set_cache() end diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex index 4076925aa..fa46545da 100644 --- a/lib/pleroma/user/query.ex +++ b/lib/pleroma/user/query.ex @@ -137,7 +137,7 @@ defp compose_query({:local, _}, query), do: location_query(query, true) defp compose_query({:external, _}, query), do: location_query(query, false) defp compose_query({:active, _}, query) do - User.restrict_deactivated(query) + where(query, [u], u.is_active == true) |> where([u], u.is_approved == true) |> where([u], u.is_confirmed == true) end @@ -148,11 +148,11 @@ defp compose_query({:legacy_active, _}, query) do end defp compose_query({:deactivated, false}, query) do - User.restrict_deactivated(query) + where(query, [u], u.is_active == true) end defp compose_query({:deactivated, true}, query) do - where(query, [u], u.deactivated == ^true) + where(query, [u], u.is_active == false) end defp compose_query({:confirmation_pending, bool}, query) do diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index c5bc08153..d0bb07aab 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -56,7 +56,7 @@ defp check_actor_is_active(nil), do: true defp check_actor_is_active(actor) when is_binary(actor) do case User.get_cached_by_ap_id(actor) do - %User{deactivated: deactivated} -> not deactivated + %User{is_active: true} -> true _ -> false end end diff --git a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex index f5f87ca5d..093549a45 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_validations.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_validations.ex @@ -35,7 +35,7 @@ def validate_actor_presence(cng, options \\ []) do cng |> validate_change(field_name, fn field_name, actor -> case User.get_cached_by_ap_id(actor) do - %User{deactivated: true} -> + %User{is_active: false} -> [{field_name, "user is deactivated"}] %User{} -> diff --git a/lib/pleroma/web/admin_api/controllers/user_controller.ex b/lib/pleroma/web/admin_api/controllers/user_controller.ex index fa710c7ec..a18b9f8d5 100644 --- a/lib/pleroma/web/admin_api/controllers/user_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/user_controller.ex @@ -172,9 +172,9 @@ def show(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname}) do def toggle_activation(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname}) do user = User.get_cached_by_nickname(nickname) - {:ok, updated_user} = User.deactivate(user, !user.deactivated) + {:ok, updated_user} = User.set_activation(user, !user.is_active) - action = if user.deactivated, do: "activate", else: "deactivate" + action = if !user.is_active, do: "activate", else: "deactivate" ModerationLog.insert_log(%{ actor: admin, @@ -189,7 +189,7 @@ def toggle_activation(%{assigns: %{user: admin}} = conn, %{"nickname" => nicknam def activate(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do users = Enum.map(nicknames, &User.get_cached_by_nickname/1) - {:ok, updated_users} = User.deactivate(users, false) + {:ok, updated_users} = User.set_activation(users, true) ModerationLog.insert_log(%{ actor: admin, @@ -204,7 +204,7 @@ def activate(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do def deactivate(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do users = Enum.map(nicknames, &User.get_cached_by_nickname/1) - {:ok, updated_users} = User.deactivate(users, true) + {:ok, updated_users} = User.set_activation(users, false) ModerationLog.insert_log(%{ actor: admin, diff --git a/lib/pleroma/web/admin_api/views/account_view.ex b/lib/pleroma/web/admin_api/views/account_view.ex index 34bf2e67a..d7c63d385 100644 --- a/lib/pleroma/web/admin_api/views/account_view.ex +++ b/lib/pleroma/web/admin_api/views/account_view.ex @@ -73,7 +73,7 @@ def render("show.json", %{user: user}) do "avatar" => avatar, "nickname" => user.nickname, "display_name" => display_name, - "deactivated" => user.deactivated, + "is_active" => user.is_active, "local" => user.local, "roles" => User.roles(user), "tags" => user.tags || [], diff --git a/lib/pleroma/web/api_spec/operations/admin/report_operation.ex b/lib/pleroma/web/api_spec/operations/admin/report_operation.ex index d60e84a66..e7acfa271 100644 --- a/lib/pleroma/web/api_spec/operations/admin/report_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/report_operation.ex @@ -182,7 +182,7 @@ defp account_admin do properties: Map.merge(Account.schema().properties, %{ nickname: %Schema{type: :string}, - deactivated: %Schema{type: :boolean}, + is_active: %Schema{type: :boolean}, local: %Schema{type: :boolean}, roles: %Schema{ type: :object, diff --git a/lib/pleroma/web/api_spec/operations/admin/status_operation.ex b/lib/pleroma/web/api_spec/operations/admin/status_operation.ex index fed3da27a..34a0bce07 100644 --- a/lib/pleroma/web/api_spec/operations/admin/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/admin/status_operation.ex @@ -132,7 +132,7 @@ def admin_account do avatar: %Schema{type: :string}, nickname: %Schema{type: :string}, display_name: %Schema{type: :string}, - deactivated: %Schema{type: :boolean}, + is_active: %Schema{type: :boolean}, local: %Schema{type: :boolean}, roles: %Schema{ type: :object, diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index da1221d47..63417142f 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -376,7 +376,7 @@ defp maybe_put_allow_following_move(data, %User{id: user_id} = user, %User{id: u defp maybe_put_allow_following_move(data, _, _), do: data defp maybe_put_activation_status(data, user, %User{is_admin: true}) do - Kernel.put_in(data, [:pleroma, :deactivated], user.deactivated) + Kernel.put_in(data, [:pleroma, :deactivated], !user.is_active) end defp maybe_put_activation_status(data, _, _), do: data diff --git a/lib/pleroma/web/mongoose_im/mongoose_im_controller.ex b/lib/pleroma/web/mongoose_im/mongoose_im_controller.ex index e7903dde8..6ace3e0b5 100644 --- a/lib/pleroma/web/mongoose_im/mongoose_im_controller.ex +++ b/lib/pleroma/web/mongoose_im/mongoose_im_controller.ex @@ -14,7 +14,7 @@ defmodule Pleroma.Web.MongooseIM.MongooseIMController do plug(RateLimiter, [name: :authentication, params: ["user"]] when action == :check_password) def user_exists(conn, %{"user" => username}) do - with %User{} <- Repo.get_by(User, nickname: username, local: true, deactivated: false) do + with %User{} <- Repo.get_by(User, nickname: username, local: true, is_active: true) do conn |> json(true) else @@ -26,7 +26,7 @@ def user_exists(conn, %{"user" => username}) do end def check_password(conn, %{"user" => username, "pass" => password}) do - with %User{password_hash: password_hash, deactivated: false} <- + with %User{password_hash: password_hash, is_active: true} <- Repo.get_by(User, nickname: username, local: true), true <- AuthenticationPlug.checkpw(password, password_hash) do conn diff --git a/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex b/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex index 809ef9b40..c94527e6d 100644 --- a/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex +++ b/lib/pleroma/web/pleroma_api/views/emoji_reaction_view.ex @@ -26,7 +26,7 @@ defp fetch_users(user_ap_ids) do user_ap_ids |> Enum.map(&Pleroma.User.get_cached_by_ap_id/1) |> Enum.filter(fn - %{deactivated: false} -> true + %{is_active: true} -> true _ -> false end) end diff --git a/lib/pleroma/web/twitter_api/controllers/util_controller.ex b/lib/pleroma/web/twitter_api/controllers/util_controller.ex index 1e252f7bb..940a645bb 100644 --- a/lib/pleroma/web/twitter_api/controllers/util_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/util_controller.ex @@ -150,7 +150,7 @@ def delete_account(%{assigns: %{user: user}} = conn, params) do def disable_account(%{assigns: %{user: user}} = conn, params) do case CommonAPI.Utils.confirm_current_password(user, params["password"]) do {:ok, user} -> - User.deactivate_async(user) + User.set_activation_async(user, false) json(conn, %{status: "success"}) {:error, msg} -> diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index f6d721da6..76ca82d20 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -59,7 +59,7 @@ defp create_user(params, opts) do def password_reset(nickname_or_email) do with true <- is_binary(nickname_or_email), - %User{local: true, email: email, deactivated: false} = user when is_binary(email) <- + %User{local: true, email: email, is_active: true} = user when is_binary(email) <- User.get_by_nickname_or_email(nickname_or_email), {:ok, token_record} <- Pleroma.PasswordResetToken.create_token(user) do user diff --git a/lib/pleroma/workers/background_worker.ex b/lib/pleroma/workers/background_worker.ex index e24b9c175..1e28384cb 100644 --- a/lib/pleroma/workers/background_worker.ex +++ b/lib/pleroma/workers/background_worker.ex @@ -9,9 +9,9 @@ defmodule Pleroma.Workers.BackgroundWorker do @impl Oban.Worker - def perform(%Job{args: %{"op" => "deactivate_user", "user_id" => user_id, "status" => status}}) do + def perform(%Job{args: %{"op" => "user_activation", "user_id" => user_id, "status" => status}}) do user = User.get_cached_by_id(user_id) - User.perform(:deactivate_async, user, status) + User.perform(:set_activation_async, user, status) end def perform(%Job{args: %{"op" => "delete_user", "user_id" => user_id}}) do diff --git a/priv/repo/migrations/20201012173004_refactor_deactivated_user_field.exs b/priv/repo/migrations/20201012173004_refactor_deactivated_user_field.exs new file mode 100644 index 000000000..58b75b436 --- /dev/null +++ b/priv/repo/migrations/20201012173004_refactor_deactivated_user_field.exs @@ -0,0 +1,22 @@ +# Pleroma: A lightweight social networking server +# Copyright ยฉ 2017-2020 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Repo.Migrations.RefactorDeactivatedUserField do + use Ecto.Migration + + def up do + # Flip the values before we change the meaning of the column + execute("UPDATE users SET deactivated = NOT deactivated;") + execute("ALTER TABLE users RENAME COLUMN deactivated TO is_active;") + execute("ALTER TABLE users ALTER COLUMN is_active SET DEFAULT true;") + execute("ALTER INDEX users_deactivated_index RENAME TO users_is_active_index;") + end + + def down do + execute("UPDATE users SET is_active = NOT is_active;") + execute("ALTER TABLE users RENAME COLUMN is_active TO deactivated;") + execute("ALTER TABLE users ALTER COLUMN deactivated SET DEFAULT false;") + execute("ALTER INDEX users_is_active_index RENAME TO users_deactivated_index;") + end +end diff --git a/priv/static/adminfe/chunk-1e46.0411a9b2.css b/priv/static/adminfe/chunk-bc60.4417dd06.css similarity index 53% rename from priv/static/adminfe/chunk-1e46.0411a9b2.css rename to priv/static/adminfe/chunk-bc60.4417dd06.css index e511ebfe2..59ca45d6c 100644 Binary files a/priv/static/adminfe/chunk-1e46.0411a9b2.css and b/priv/static/adminfe/chunk-bc60.4417dd06.css differ diff --git a/priv/static/adminfe/index.html b/priv/static/adminfe/index.html index 9f6674b5c..09915e8cd 100644 --- a/priv/static/adminfe/index.html +++ b/priv/static/adminfe/index.html @@ -1 +1 @@ -Admin FE
\ No newline at end of file +Admin FE
\ No newline at end of file diff --git a/priv/static/adminfe/static/js/app.01bfc983.js b/priv/static/adminfe/static/js/app.01bfc983.js deleted file mode 100644 index b55da9cda..000000000 Binary files a/priv/static/adminfe/static/js/app.01bfc983.js and /dev/null differ diff --git a/priv/static/adminfe/static/js/app.01bfc983.js.map b/priv/static/adminfe/static/js/app.01bfc983.js.map deleted file mode 100644 index 19960bd78..000000000 Binary files a/priv/static/adminfe/static/js/app.01bfc983.js.map and /dev/null differ diff --git a/priv/static/adminfe/static/js/app.1428845f.js b/priv/static/adminfe/static/js/app.1428845f.js new file mode 100644 index 000000000..cc9541168 Binary files /dev/null and b/priv/static/adminfe/static/js/app.1428845f.js differ diff --git a/priv/static/adminfe/static/js/app.1428845f.js.map b/priv/static/adminfe/static/js/app.1428845f.js.map new file mode 100644 index 000000000..3fba88015 Binary files /dev/null and b/priv/static/adminfe/static/js/app.1428845f.js.map differ diff --git a/priv/static/adminfe/static/js/chunk-1e46.7c2ee531.js b/priv/static/adminfe/static/js/chunk-1e46.7c2ee531.js deleted file mode 100644 index bdd6fde97..000000000 Binary files a/priv/static/adminfe/static/js/chunk-1e46.7c2ee531.js and /dev/null differ diff --git a/priv/static/adminfe/static/js/chunk-1e46.7c2ee531.js.map b/priv/static/adminfe/static/js/chunk-1e46.7c2ee531.js.map deleted file mode 100644 index 305fa838d..000000000 Binary files a/priv/static/adminfe/static/js/chunk-1e46.7c2ee531.js.map and /dev/null differ diff --git a/priv/static/adminfe/static/js/chunk-35b1.50c1449b.js b/priv/static/adminfe/static/js/chunk-35b1.50c1449b.js new file mode 100644 index 000000000..75a2bf0c2 Binary files /dev/null and b/priv/static/adminfe/static/js/chunk-35b1.50c1449b.js differ diff --git a/priv/static/adminfe/static/js/chunk-35b1.50c1449b.js.map b/priv/static/adminfe/static/js/chunk-35b1.50c1449b.js.map new file mode 100644 index 000000000..b5e2a27b2 Binary files /dev/null and b/priv/static/adminfe/static/js/chunk-35b1.50c1449b.js.map differ diff --git a/priv/static/adminfe/static/js/chunk-35b1.ddb9524c.js b/priv/static/adminfe/static/js/chunk-35b1.ddb9524c.js deleted file mode 100644 index f31565f8f..000000000 Binary files a/priv/static/adminfe/static/js/chunk-35b1.ddb9524c.js and /dev/null differ diff --git a/priv/static/adminfe/static/js/chunk-35b1.ddb9524c.js.map b/priv/static/adminfe/static/js/chunk-35b1.ddb9524c.js.map deleted file mode 100644 index 7a2659f62..000000000 Binary files a/priv/static/adminfe/static/js/chunk-35b1.ddb9524c.js.map and /dev/null differ diff --git a/priv/static/adminfe/static/js/chunk-606c.35588dea.js b/priv/static/adminfe/static/js/chunk-606c.35588dea.js deleted file mode 100644 index 4cffaa5ce..000000000 Binary files a/priv/static/adminfe/static/js/chunk-606c.35588dea.js and /dev/null differ diff --git a/priv/static/adminfe/static/js/chunk-606c.35588dea.js.map b/priv/static/adminfe/static/js/chunk-606c.35588dea.js.map deleted file mode 100644 index 603c0fce4..000000000 Binary files a/priv/static/adminfe/static/js/chunk-606c.35588dea.js.map and /dev/null differ diff --git a/priv/static/adminfe/static/js/chunk-606c.8ac52179.js b/priv/static/adminfe/static/js/chunk-606c.8ac52179.js new file mode 100644 index 000000000..7ae3ce7b1 Binary files /dev/null and b/priv/static/adminfe/static/js/chunk-606c.8ac52179.js differ diff --git a/priv/static/adminfe/static/js/chunk-606c.8ac52179.js.map b/priv/static/adminfe/static/js/chunk-606c.8ac52179.js.map new file mode 100644 index 000000000..8c41c2755 Binary files /dev/null and b/priv/static/adminfe/static/js/chunk-606c.8ac52179.js.map differ diff --git a/priv/static/adminfe/static/js/chunk-7041.1495e01c.js.map b/priv/static/adminfe/static/js/chunk-7041.1495e01c.js.map deleted file mode 100644 index 9609e9b1b..000000000 Binary files a/priv/static/adminfe/static/js/chunk-7041.1495e01c.js.map and /dev/null differ diff --git a/priv/static/adminfe/static/js/chunk-7041.1495e01c.js b/priv/static/adminfe/static/js/chunk-7041.390b2ec4.js similarity index 64% rename from priv/static/adminfe/static/js/chunk-7041.1495e01c.js rename to priv/static/adminfe/static/js/chunk-7041.390b2ec4.js index e68346c2b..50eb1a5f5 100644 Binary files a/priv/static/adminfe/static/js/chunk-7041.1495e01c.js and b/priv/static/adminfe/static/js/chunk-7041.390b2ec4.js differ diff --git a/priv/static/adminfe/static/js/chunk-7041.390b2ec4.js.map b/priv/static/adminfe/static/js/chunk-7041.390b2ec4.js.map new file mode 100644 index 000000000..401bb0b1f Binary files /dev/null and b/priv/static/adminfe/static/js/chunk-7041.390b2ec4.js.map differ diff --git a/priv/static/adminfe/static/js/chunk-7968.d6317b83.js b/priv/static/adminfe/static/js/chunk-7968.88218960.js similarity index 50% rename from priv/static/adminfe/static/js/chunk-7968.d6317b83.js rename to priv/static/adminfe/static/js/chunk-7968.88218960.js index cb6371cfe..44348d9d1 100644 Binary files a/priv/static/adminfe/static/js/chunk-7968.d6317b83.js and b/priv/static/adminfe/static/js/chunk-7968.88218960.js differ diff --git a/priv/static/adminfe/static/js/chunk-7968.88218960.js.map b/priv/static/adminfe/static/js/chunk-7968.88218960.js.map new file mode 100644 index 000000000..6fa0131fc Binary files /dev/null and b/priv/static/adminfe/static/js/chunk-7968.88218960.js.map differ diff --git a/priv/static/adminfe/static/js/chunk-7968.d6317b83.js.map b/priv/static/adminfe/static/js/chunk-7968.d6317b83.js.map deleted file mode 100644 index 455fe8cb4..000000000 Binary files a/priv/static/adminfe/static/js/chunk-7968.d6317b83.js.map and /dev/null differ diff --git a/priv/static/adminfe/static/js/chunk-bc60.79f8c7e7.js b/priv/static/adminfe/static/js/chunk-bc60.79f8c7e7.js new file mode 100644 index 000000000..b2206aa11 Binary files /dev/null and b/priv/static/adminfe/static/js/chunk-bc60.79f8c7e7.js differ diff --git a/priv/static/adminfe/static/js/chunk-bc60.79f8c7e7.js.map b/priv/static/adminfe/static/js/chunk-bc60.79f8c7e7.js.map new file mode 100644 index 000000000..799352270 Binary files /dev/null and b/priv/static/adminfe/static/js/chunk-bc60.79f8c7e7.js.map differ diff --git a/priv/static/adminfe/static/js/chunk-f364.a5927f18.js b/priv/static/adminfe/static/js/chunk-f364.a5927f18.js new file mode 100644 index 000000000..9a872d819 Binary files /dev/null and b/priv/static/adminfe/static/js/chunk-f364.a5927f18.js differ diff --git a/priv/static/adminfe/static/js/chunk-f364.a5927f18.js.map b/priv/static/adminfe/static/js/chunk-f364.a5927f18.js.map new file mode 100644 index 000000000..05f67d1a5 Binary files /dev/null and b/priv/static/adminfe/static/js/chunk-f364.a5927f18.js.map differ diff --git a/priv/static/adminfe/static/js/chunk-f364.f22b0eee.js b/priv/static/adminfe/static/js/chunk-f364.f22b0eee.js deleted file mode 100644 index fb1546f1f..000000000 Binary files a/priv/static/adminfe/static/js/chunk-f364.f22b0eee.js and /dev/null differ diff --git a/priv/static/adminfe/static/js/chunk-f364.f22b0eee.js.map b/priv/static/adminfe/static/js/chunk-f364.f22b0eee.js.map deleted file mode 100644 index 79292c5d5..000000000 Binary files a/priv/static/adminfe/static/js/chunk-f364.f22b0eee.js.map and /dev/null differ diff --git a/priv/static/adminfe/static/js/runtime.5c1034c4.js b/priv/static/adminfe/static/js/runtime.6b30c658.js similarity index 63% rename from priv/static/adminfe/static/js/runtime.5c1034c4.js rename to priv/static/adminfe/static/js/runtime.6b30c658.js index 7d2f6d83b..ecdf93f1b 100644 Binary files a/priv/static/adminfe/static/js/runtime.5c1034c4.js and b/priv/static/adminfe/static/js/runtime.6b30c658.js differ diff --git a/priv/static/adminfe/static/js/runtime.5c1034c4.js.map b/priv/static/adminfe/static/js/runtime.6b30c658.js.map similarity index 92% rename from priv/static/adminfe/static/js/runtime.5c1034c4.js.map rename to priv/static/adminfe/static/js/runtime.6b30c658.js.map index 723da6ee7..67a46d4bf 100644 Binary files a/priv/static/adminfe/static/js/runtime.5c1034c4.js.map and b/priv/static/adminfe/static/js/runtime.6b30c658.js.map differ diff --git a/priv/static/index.html b/priv/static/index.html index 9b774959a..c4dcf5d37 100644 --- a/priv/static/index.html +++ b/priv/static/index.html @@ -1 +1 @@ -Pleroma
\ No newline at end of file +
\ No newline at end of file diff --git a/priv/static/static/emoji.json b/priv/static/static/emoji.json index ae93d17e1..12b91b3f6 100644 --- a/priv/static/static/emoji.json +++ b/priv/static/static/emoji.json @@ -1,969 +1,1431 @@ { - "womans_clothes": "\ud83d\udc5a", - "cookie": "\ud83c\udf6a", - "woman_with_headscarf": "\ud83e\uddd5", - "no_smoking": "\ud83d\udead", - "e-mail": "\ud83d\udce7", - "regional_indicator_d": "\ud83c\udde9", - "oncoming_bus": "\ud83d\ude8d", - "knife": "\ud83d\udd2a", - "person_getting_haircut": "\ud83d\udc87", - "grimacing": "\ud83d\ude2c", - "ophiuchus": "\u26ce", - "regional_indicator_q": "\ud83c\uddf6", - "thinking": "\ud83e\udd14", - "signal_strength": "\ud83d\udcf6", - "cactus": "\ud83c\udf35", - "bullettrain_front": "\ud83d\ude85", - "floppy_disk": "\ud83d\udcbe", - "doughnut": "\ud83c\udf69", - "tv": "\ud83d\udcfa", - "1234": "\ud83d\udd22", - "anguished": "\ud83d\ude27", - "clock1030": "\ud83d\udd65", - "u7533": "\ud83c\ude38", - "speak_no_evil": "\ud83d\ude4a", - "chart_with_upwards_trend": "\ud83d\udcc8", - "trophy": "\ud83c\udfc6", - "musical_score": "\ud83c\udfbc", - "chestnut": "\ud83c\udf30", - "clock1130": "\ud83d\udd66", - "abcd": "\ud83d\udd21", - "syringe": "\ud83d\udc89", - "shrimp": "\ud83e\udd90", - "pisces": "\u2653", - "left_facing_fist": "\ud83e\udd1b", - "bar_chart": "\ud83d\udcca", - "eagle": "\ud83e\udd85", - "woman": "\ud83d\udc69", - "keycap_ten": "\ud83d\udd1f", - "yellow_heart": "\ud83d\udc9b", - "croissant": "\ud83e\udd50", - "mosque": "\ud83d\udd4c", - "rice_ball": "\ud83c\udf59", - "volcano": "\ud83c\udf0b", - "baggage_claim": "\ud83d\udec4", - "family": "\ud83d\udc6a", - "beetle": "\ud83d\udc1e", - "older_adult": "\ud83e\uddd3", - "clock830": "\ud83d\udd63", - "bacon": "\ud83e\udd53", - "sound": "\ud83d\udd09", - "no_bicycles": "\ud83d\udeb3", - "rewind": "\u23ea", - "adult": "\ud83e\uddd1", - "scream_cat": "\ud83d\ude40", - "person_playing_water_polo": "\ud83e\udd3d", - "blue_car": "\ud83d\ude99", - "smiley": "\ud83d\ude03", - "kaaba": "\ud83d\udd4b", - "twisted_rightwards_arrows": "\ud83d\udd00", - "last_quarter_moon": "\ud83c\udf17", - "first_place": "\ud83e\udd47", - "joy_cat": "\ud83d\ude39", - "sleeping": "\ud83d\ude34", - "basketball": "\ud83c\udfc0", - "pray": "\ud83d\ude4f", - "trumpet": "\ud83c\udfba", - "purple_heart": "\ud83d\udc9c", - "broken_heart": "\ud83d\udc94", - "astonished": "\ud83d\ude32", - "soccer": "\u26bd", - "princess": "\ud83d\udc78", - "ant": "\ud83d\udc1c", - "pig": "\ud83d\udc37", - "vhs": "\ud83d\udcfc", - "scream": "\ud83d\ude31", - "mouse": "\ud83d\udc2d", - "field_hockey": "\ud83c\udfd1", - "ab": "\ud83c\udd8e", - "tokyo_tower": "\ud83d\uddfc", - "girl": "\ud83d\udc67", - "u55b6": "\ud83c\ude3a", - "guard": "\ud83d\udc82", - "regional_indicator_s": "\ud83c\uddf8", - "tulip": "\ud83c\udf37", - "capital_abcd": "\ud83d\udd20", - "beginner": "\ud83d\udd30", - "couplekiss": "\ud83d\udc8f", - "u5408": "\ud83c\ude34", - "black_medium_small_square": "\u25fe", - "paperclip": "\ud83d\udcce", - "hedgehog": "\ud83e\udd94", - "musical_note": "\ud83c\udfb5", - "pill": "\ud83d\udc8a", - "blue_heart": "\ud83d\udc99", - "mens": "\ud83d\udeb9", - "third_place": "\ud83e\udd49", - "stew": "\ud83c\udf72", - "prince": "\ud83e\udd34", - "mortar_board": "\ud83c\udf93", - "clock6": "\ud83d\udd55", - "beer": "\ud83c\udf7a", - "person_tipping_hand": "\ud83d\udc81", - "triangular_ruler": "\ud83d\udcd0", - "regional_indicator_y": "\ud83c\uddfe", - "person_facepalming": "\ud83e\udd26", - "steam_locomotive": "\ud83d\ude82", - "fire_engine": "\ud83d\ude92", - "horse": "\ud83d\udc34", - "ribbon": "\ud83c\udf80", - "white_large_square": "\u2b1c", - "smirk": "\ud83d\ude0f", - "genie": "\ud83e\uddde", - "tangerine": "\ud83c\udf4a", - "cl": "\ud83c\udd91", - "japanese_goblin": "\ud83d\udc7a", - "regional_indicator_u": "\ud83c\uddfa", - "ring": "\ud83d\udc8d", - "roller_coaster": "\ud83c\udfa2", - "100": "\ud83d\udcaf", - "clock12": "\ud83d\udd5b", - "two_hearts": "\ud83d\udc95", - "anger": "\ud83d\udca2", - "black_circle": "\u26ab", - "revolving_hearts": "\ud83d\udc9e", - "space_invader": "\ud83d\udc7e", - "bell": "\ud83d\udd14", - "point_up_2": "\ud83d\udc46", - "person_mountain_biking": "\ud83d\udeb5", - "flags": "\ud83c\udf8f", - "pushpin": "\ud83d\udccc", - "large_blue_diamond": "\ud83d\udd37", - "fairy": "\ud83e\uddda", - "european_post_office": "\ud83c\udfe4", - "statue_of_liberty": "\ud83d\uddfd", - "man": "\ud83d\udc68", - "microphone": "\ud83c\udfa4", - "inbox_tray": "\ud83d\udce5", - "bath": "\ud83d\udec0", - "person_gesturing_ok": "\ud83d\ude46", - "clap": "\ud83d\udc4f", - "confused": "\ud83d\ude15", - "fortune_cookie": "\ud83e\udd60", - "kissing_closed_eyes": "\ud83d\ude1a", - "kissing_heart": "\ud83d\ude18", - "tropical_fish": "\ud83d\udc20", - "taco": "\ud83c\udf2e", - "kimono": "\ud83d\udc58", - "u7a7a": "\ud83c\ude33", - "rat": "\ud83d\udc00", - "taurus": "\u2649", - "shopping_cart": "\ud83d\uded2", - "womans_hat": "\ud83d\udc52", - "blossom": "\ud83c\udf3c", - "moyai": "\ud83d\uddff", - "clock130": "\ud83d\udd5c", - "telescope": "\ud83d\udd2d", - "running_shirt_with_sash": "\ud83c\udfbd", - "person_running": "\ud83c\udfc3", - "dizzy": "\ud83d\udcab", - "crescent_moon": "\ud83c\udf19", - "boom": "\ud83d\udca5", - "restroom": "\ud83d\udebb", - "fist": "\u270a", - "white_flower": "\ud83d\udcae", - "clown": "\ud83e\udd21", - "neutral_face": "\ud83d\ude10", - "id": "\ud83c\udd94", - "carrot": "\ud83e\udd55", - "rice_scene": "\ud83c\udf91", - "foggy": "\ud83c\udf01", - "turtle": "\ud83d\udc22", - "mailbox_with_mail": "\ud83d\udcec", - "baseball": "\u26be", - "grin": "\ud83d\ude01", - "bathtub": "\ud83d\udec1", - "feet": "\ud83d\udc3e", - "small_red_triangle": "\ud83d\udd3a", - "camel": "\ud83d\udc2b", - "aquarius": "\u2652", - "face_with_symbols_over_mouth": "\ud83e\udd2c", - "handbag": "\ud83d\udc5c", - "date": "\ud83d\udcc5", - "nail_care": "\ud83d\udc85", - "satellite": "\ud83d\udce1", - "candy": "\ud83c\udf6c", - "white_medium_small_square": "\u25fd", - "clock930": "\ud83d\udd64", - "fearful": "\ud83d\ude28", - "fork_and_knife": "\ud83c\udf74", - "person_wearing_turban": "\ud83d\udc73", - "confounded": "\ud83d\ude16", - "helicopter": "\ud83d\ude81", - "arrow_double_down": "\u23ec", - "convenience_store": "\ud83c\udfea", - "ghost": "\ud83d\udc7b", - "bus": "\ud83d\ude8c", - "waning_gibbous_moon": "\ud83c\udf16", - "bank": "\ud83c\udfe6", - "department_store": "\ud83c\udfec", - "hockey": "\ud83c\udfd2", - "fingers_crossed": "\ud83e\udd1e", - "blond_haired_person": "\ud83d\udc71", - "mag": "\ud83d\udd0d", - "cut_of_meat": "\ud83e\udd69", - "wink": "\ud83d\ude09", - "railway_car": "\ud83d\ude83", - "face_vomiting": "\ud83e\udd2e", - "star_struck": "\ud83e\udd29", - "first_quarter_moon_with_face": "\ud83c\udf1b", - "octagonal_sign": "\ud83d\uded1", - "hospital": "\ud83c\udfe5", - "monkey": "\ud83d\udc12", - "curly_loop": "\u27b0", - "avocado": "\ud83e\udd51", - "earth_americas": "\ud83c\udf0e", - "flashlight": "\ud83d\udd26", - "8ball": "\ud83c\udfb1", - "clock630": "\ud83d\udd61", - "boar": "\ud83d\udc17", - "birthday": "\ud83c\udf82", - "crocodile": "\ud83d\udc0a", - "confetti_ball": "\ud83c\udf8a", - "door": "\ud83d\udeaa", - "school_satchel": "\ud83c\udf92", - "peanuts": "\ud83e\udd5c", - "regional_indicator_m": "\ud83c\uddf2", - "bust_in_silhouette": "\ud83d\udc64", - "sweat_drops": "\ud83d\udca6", - "tongue": "\ud83d\udc45", - "mag_right": "\ud83d\udd0e", - "t_rex": "\ud83e\udd96", - "post_office": "\ud83c\udfe3", - "shell": "\ud83d\udc1a", - "disappointed_relieved": "\ud83d\ude25", - "card_index": "\ud83d\udcc7", - "oncoming_automobile": "\ud83d\ude98", - "passport_control": "\ud83d\udec2", - "cherry_blossom": "\ud83c\udf38", - "shallow_pan_of_food": "\ud83e\udd58", - "heart": "\u2764\ufe0f", - "heartbeat": "\ud83d\udc93", - "crazy_face": "\ud83e\udd2a", - "grapes": "\ud83c\udf47", - "symbols": "\ud83d\udd23", - "gift": "\ud83c\udf81", - "scorpion": "\ud83e\udd82", - "wedding": "\ud83d\udc92", - "last_quarter_moon_with_face": "\ud83c\udf1c", - "love_letter": "\ud83d\udc8c", - "postal_horn": "\ud83d\udcef", - "stuffed_flatbread": "\ud83e\udd59", - "heavy_dollar_sign": "\ud83d\udcb2", - "love_hotel": "\ud83c\udfe9", - "yen": "\ud83d\udcb4", - "person_in_steamy_room": "\ud83e\uddd6", - "palm_tree": "\ud83c\udf34", - "name_badge": "\ud83d\udcdb", - "clock430": "\ud83d\udd5f", - "bike": "\ud83d\udeb2", - "snail": "\ud83d\udc0c", - "bowling": "\ud83c\udfb3", - "umbrella": "\u2614", - "sleeping_accommodation": "\ud83d\udecc", - "fireworks": "\ud83c\udf86", - "closed_book": "\ud83d\udcd5", - "city_sunset": "\ud83c\udf07", - "persevere": "\ud83d\ude23", - "bento": "\ud83c\udf71", - "nut_and_bolt": "\ud83d\udd29", - "page_facing_up": "\ud83d\udcc4", - "snowman": "\u26c4", - "two_women_holding_hands": "\ud83d\udc6d", - "regional_indicator_o": "\ud83c\uddf4", - "calling": "\ud83d\udcf2", - "person_shrugging": "\ud83e\udd37", - "sneezing_face": "\ud83e\udd27", - "arrows_clockwise": "\ud83d\udd03", - "no_pedestrians": "\ud83d\udeb7", - "potato": "\ud83e\udd54", - "cheese": "\ud83e\uddc0", - "full_moon": "\ud83c\udf15", - "mount_fuji": "\ud83d\uddfb", - "sob": "\ud83d\ude2d", - "construction": "\ud83d\udea7", - "head_bandage": "\ud83e\udd15", - "sailboat": "\u26f5", - "slight_frown": "\ud83d\ude41", - "ping_pong": "\ud83c\udfd3", - "hatched_chick": "\ud83d\udc25", - "sun_with_face": "\ud83c\udf1e", - "seedling": "\ud83c\udf31", - "repeat_one": "\ud83d\udd02", - "muscle": "\ud83d\udcaa", - "bridge_at_night": "\ud83c\udf09", - "raised_hands": "\ud83d\ude4c", - "house": "\ud83c\udfe0", - "nerd": "\ud83e\udd13", - "penguin": "\ud83d\udc27", - "peach": "\ud83c\udf51", - "dumpling": "\ud83e\udd5f", - "watch": "\u231a", - "womens": "\ud83d\udeba", - "round_pushpin": "\ud83d\udccd", - "alarm_clock": "\u23f0", - "relieved": "\ud83d\ude0c", - "sagittarius": "\u2650", - "busstop": "\ud83d\ude8f", - "regional_indicator_a": "\ud83c\udde6", - "sandal": "\ud83d\udc61", - "whale2": "\ud83d\udc0b", - "book": "\ud83d\udcd6", - "sweat": "\ud83d\ude13", - "movie_camera": "\ud83c\udfa5", - "clock230": "\ud83d\udd5d", - "tiger": "\ud83d\udc2f", - "tractor": "\ud83d\ude9c", - "smile": "\ud83d\ude04", - "vertical_traffic_light": "\ud83d\udea6", - "exploding_head": "\ud83e\udd2f", - "raised_hand": "\u270b", - "smoking": "\ud83d\udeac", - "page_with_curl": "\ud83d\udcc3", - "exclamation": "\u2757", - "fish": "\ud83d\udc1f", - "mans_shoe": "\ud83d\udc5e", - "sos": "\ud83c\udd98", - "unlock": "\ud83d\udd13", - "dolls": "\ud83c\udf8e", - "ear_of_rice": "\ud83c\udf3e", - "cat2": "\ud83d\udc08", - "u7121": "\ud83c\ude1a", - "repeat": "\ud83d\udd01", - "cool": "\ud83c\udd92", - "minibus": "\ud83d\ude90", - "aerial_tramway": "\ud83d\udea1", - "key": "\ud83d\udd11", - "child": "\ud83e\uddd2", - "camera": "\ud83d\udcf7", - "sunflower": "\ud83c\udf3b", - "white_check_mark": "\u2705", - "white_square_button": "\ud83d\udd33", - "banana": "\ud83c\udf4c", - "milky_way": "\ud83c\udf0c", - "person_gesturing_no": "\ud83d\ude45", - "sushi": "\ud83c\udf63", - "heart_eyes_cat": "\ud83d\ude3b", - "guitar": "\ud83c\udfb8", - "pie": "\ud83e\udd67", - "calendar": "\ud83d\udcc6", - "bear": "\ud83d\udc3b", - "person_in_lotus_position": "\ud83e\uddd8", - "clock10": "\ud83d\udd59", - "top": "\ud83d\udd1d", - "fuelpump": "\u26fd", - "rainbow": "\ud83c\udf08", - "snowboarder": "\ud83c\udfc2", - "drum": "\ud83e\udd41", - "leaves": "\ud83c\udf43", - "first_quarter_moon": "\ud83c\udf13", - "spoon": "\ud83e\udd44", - "pouting_cat": "\ud83d\ude3e", - "shaved_ice": "\ud83c\udf67", - "unamused": "\ud83d\ude12", - "train2": "\ud83d\ude86", - "clock1230": "\ud83d\udd67", - "regional_indicator_r": "\ud83c\uddf7", - "fast_forward": "\u23e9", - "accept": "\ud83c\ude51", - "hammer": "\ud83d\udd28", - "panda_face": "\ud83d\udc3c", - "briefcase": "\ud83d\udcbc", - "package": "\ud83d\udce6", - "flag_black": "\ud83c\udff4", - "smiling_imp": "\ud83d\ude08", - "sunrise_over_mountains": "\ud83c\udf04", - "airplane_departure": "\ud83d\udeeb", - "tiger2": "\ud83d\udc05", - "non-potable_water": "\ud83d\udeb1", - "bird": "\ud83d\udc26", - "barber": "\ud83d\udc88", - "cry": "\ud83d\ude22", - "billed_cap": "\ud83e\udde2", - "pouch": "\ud83d\udc5d", - "link": "\ud83d\udd17", - "zebra": "\ud83e\udd93", - "kiss": "\ud83d\udc8b", - "scorpius": "\u264f", - "prayer_beads": "\ud83d\udcff", - "high_brightness": "\ud83d\udd06", - "kissing_smiling_eyes": "\ud83d\ude19", - "rhino": "\ud83e\udd8f", - "left_luggage": "\ud83d\udec5", - "o": "\u2b55", - "crying_cat_face": "\ud83d\ude3f", - "clock8": "\ud83d\udd57", - "dress": "\ud83d\udc57", - "clock7": "\ud83d\udd56", - "bowl_with_spoon": "\ud83e\udd63", - "rolling_eyes": "\ud83d\ude44", - "fax": "\ud83d\udce0", - "worried": "\ud83d\ude1f", - "grey_question": "\u2754", - "saxophone": "\ud83c\udfb7", - "burrito": "\ud83c\udf2f", - "salad": "\ud83e\udd57", - "regional_indicator_z": "\ud83c\uddff", - "bikini": "\ud83d\udc59", - "milk": "\ud83e\udd5b", - "stars": "\ud83c\udf20", - "lips": "\ud83d\udc44", - "cd": "\ud83d\udcbf", - "weary": "\ud83d\ude29", - "face_with_raised_eyebrow": "\ud83e\udd28", - "lizard": "\ud83e\udd8e", - "tone1": "\ud83c\udffb", - "bullettrain_side": "\ud83d\ude84", - "nose": "\ud83d\udc43", - "innocent": "\ud83d\ude07", - "wilted_rose": "\ud83e\udd40", - "mahjong": "\ud83c\udc04", - "factory": "\ud83c\udfed", - "people_wrestling": "\ud83e\udd3c", - "mailbox": "\ud83d\udceb", - "rage": "\ud83d\ude21", - "wheelchair": "\u267f", - "x": "\u274c", - "flower_playing_cards": "\ud83c\udfb4", - "nauseated_face": "\ud83e\udd22", - "underage": "\ud83d\udd1e", - "ideograph_advantage": "\ud83c\ude50", - "high_heel": "\ud83d\udc60", - "dizzy_face": "\ud83d\ude35", - "stuck_out_tongue": "\ud83d\ude1b", - "mailbox_with_no_mail": "\ud83d\udced", - "orange_heart": "\ud83e\udde1", - "raised_back_of_hand": "\ud83e\udd1a", - "footprints": "\ud83d\udc63", - "notebook_with_decorative_cover": "\ud83d\udcd4", - "mask": "\ud83d\ude37", - "sunglasses": "\ud83d\ude0e", - "pancakes": "\ud83e\udd5e", - "regional_indicator_f": "\ud83c\uddeb", - "dog": "\ud83d\udc36", - "pig2": "\ud83d\udc16", - "ng": "\ud83c\udd96", - "unicorn": "\ud83e\udd84", - "triumph": "\ud83d\ude24", - "eggplant": "\ud83c\udf46", - "egg": "\ud83e\udd5a", - "office": "\ud83c\udfe2", - "goat": "\ud83d\udc10", - "handshake": "\ud83e\udd1d", - "star": "\u2b50", - "rugby_football": "\ud83c\udfc9", - "call_me": "\ud83e\udd19", - "rice_cracker": "\ud83c\udf58", - "droplet": "\ud83d\udca7", - "badminton": "\ud83c\udff8", - "waxing_crescent_moon": "\ud83c\udf12", - "ocean": "\ud83c\udf0a", - "slot_machine": "\ud83c\udfb0", - "wine_glass": "\ud83c\udf77", - "elephant": "\ud83d\udc18", - "blowfish": "\ud83d\udc21", - "ledger": "\ud83d\udcd2", - "money_mouth": "\ud83e\udd11", - "heart_decoration": "\ud83d\udc9f", - "arrow_down_small": "\ud83d\udd3d", - "station": "\ud83d\ude89", - "man_with_chinese_cap": "\ud83d\udc72", - "vampire": "\ud83e\udddb", - "pencil": "\ud83d\udcdd", - "cyclone": "\ud83c\udf00", - "mushroom": "\ud83c\udf44", - "sandwich": "\ud83e\udd6a", - "champagne": "\ud83c\udf7e", - "expressionless": "\ud83d\ude11", - "cold_sweat": "\ud83d\ude30", - "maple_leaf": "\ud83c\udf41", - "dromedary_camel": "\ud83d\udc2a", - "vs": "\ud83c\udd9a", - "person_fencing": "\ud83e\udd3a", - "straight_ruler": "\ud83d\udccf", - "baby_bottle": "\ud83c\udf7c", - "currency_exchange": "\ud83d\udcb1", - "regional_indicator_h": "\ud83c\udded", - "stuck_out_tongue_closed_eyes": "\ud83d\ude1d", - "closed_lock_with_key": "\ud83d\udd10", - "eyes": "\ud83d\udc40", - "water_buffalo": "\ud83d\udc03", - "lock_with_ink_pen": "\ud83d\udd0f", - "heavy_plus_sign": "\u2795", - "bookmark": "\ud83d\udd16", - "soon": "\ud83d\udd1c", - "orange_book": "\ud83d\udcd9", - "pineapple": "\ud83c\udf4d", - "clock9": "\ud83d\udd58", - "small_blue_diamond": "\ud83d\udd39", - "black_large_square": "\u2b1b", - "person_surfing": "\ud83c\udfc4", - "leo": "\u264c", - "merperson": "\ud83e\udddc", - "canoe": "\ud83d\udef6", - "rooster": "\ud83d\udc13", - "hear_no_evil": "\ud83d\ude49", - "corn": "\ud83c\udf3d", - "takeout_box": "\ud83e\udd61", - "oncoming_taxi": "\ud83d\ude96", - "taxi": "\ud83d\ude95", - "chart": "\ud83d\udcb9", - "goal": "\ud83e\udd45", - "melon": "\ud83c\udf48", - "notes": "\ud83c\udfb6", - "sparkler": "\ud83c\udf87", - "dolphin": "\ud83d\udc2c", - "speedboat": "\ud83d\udea4", - "cancer": "\u264b", - "sled": "\ud83d\udef7", - "tanabata_tree": "\ud83c\udf8b", - "train": "\ud83d\ude8b", - "christmas_tree": "\ud83c\udf84", - "two_men_holding_hands": "\ud83d\udc6c", - "back": "\ud83d\udd19", - "balloon": "\ud83c\udf88", - "checkered_flag": "\ud83c\udfc1", - "loop": "\u27bf", - "wc": "\ud83d\udebe", - "jeans": "\ud83d\udc56", - "green_apple": "\ud83c\udf4f", - "crown": "\ud83d\udc51", - "cowboy": "\ud83e\udd20", - "postbox": "\ud83d\udcee", - "volleyball": "\ud83c\udfd0", - "upside_down": "\ud83d\ude43", - "cricket": "\ud83e\udd97", - "custard": "\ud83c\udf6e", - "rose": "\ud83c\udf39", - "eyeglasses": "\ud83d\udc53", - "oncoming_police_car": "\ud83d\ude94", - "atm": "\ud83c\udfe7", - "flying_saucer": "\ud83d\udef8", - "alien": "\ud83d\udc7d", - "hamster": "\ud83d\udc39", - "trident": "\ud83d\udd31", - "disappointed": "\ud83d\ude1e", - "cow": "\ud83d\udc2e", - "police_officer": "\ud83d\udc6e", - "popcorn": "\ud83c\udf7f", - "baby_chick": "\ud83d\udc24", - "video_camera": "\ud83d\udcf9", - "zzz": "\ud83d\udca4", - "person_climbing": "\ud83e\uddd7", - "star2": "\ud83c\udf1f", - "ok": "\ud83c\udd97", - "capricorn": "\u2651", - "chicken": "\ud83d\udc14", - "arrow_double_up": "\u23eb", - "zombie": "\ud83e\udddf", - "closed_umbrella": "\ud83c\udf02", - "person_walking": "\ud83d\udeb6", - "lemon": "\ud83c\udf4b", - "heartpulse": "\ud83d\udc97", - "regional_indicator_i": "\ud83c\uddee", - "sauropod": "\ud83e\udd95", - "u7981": "\ud83c\ude32", - "regional_indicator_w": "\ud83c\uddfc", - "evergreen_tree": "\ud83c\udf32", - "mobile_phone_off": "\ud83d\udcf4", - "koko": "\ud83c\ude01", - "poop": "\ud83d\udca9", - "cup_with_straw": "\ud83e\udd64", - "leopard": "\ud83d\udc06", - "radio_button": "\ud83d\udd18", - "mega": "\ud83d\udce3", - "metal": "\ud83e\udd18", - "shushing_face": "\ud83e\udd2b", - "stuck_out_tongue_winking_eye": "\ud83d\ude1c", - "octopus": "\ud83d\udc19", - "boxing_glove": "\ud83e\udd4a", - "person_juggling": "\ud83e\udd39", - "money_with_wings": "\ud83d\udcb8", - "dollar": "\ud83d\udcb5", - "bride_with_veil": "\ud83d\udc70", - "second_place": "\ud83e\udd48", - "spaghetti": "\ud83c\udf5d", - "waning_crescent_moon": "\ud83c\udf18", - "football": "\ud83c\udfc8", - "white_circle": "\u26aa", - "full_moon_with_face": "\ud83c\udf1d", - "selfie": "\ud83e\udd33", - "tone3": "\ud83c\udffd", - "rabbit": "\ud83d\udc30", - "computer": "\ud83d\udcbb", - "clock11": "\ud83d\udd5a", - "heavy_minus_sign": "\u2796", - "synagogue": "\ud83d\udd4d", - "hourglass": "\u231b", - "gem": "\ud83d\udc8e", - "person_doing_cartwheel": "\ud83e\udd38", - "new_moon_with_face": "\ud83c\udf1a", - "sunrise": "\ud83c\udf05", - "regional_indicator_x": "\ud83c\uddfd", - "open_file_folder": "\ud83d\udcc2", - "gift_heart": "\ud83d\udc9d", - "tada": "\ud83c\udf89", - "green_heart": "\ud83d\udc9a", - "battery": "\ud83d\udd0b", - "regional_indicator_t": "\ud83c\uddf9", - "wrench": "\ud83d\udd27", - "aries": "\u2648", - "man_in_tuxedo": "\ud83e\udd35", - "regional_indicator_e": "\ud83c\uddea", - "regional_indicator_l": "\ud83c\uddf1", - "cake": "\ud83c\udf70", - "clapper": "\ud83c\udfac", - "japanese_castle": "\ud83c\udfef", - "crystal_ball": "\ud83d\udd2e", - "golf": "\u26f3", - "no_mobile_phones": "\ud83d\udcf5", - "person_biking": "\ud83d\udeb4", - "icecream": "\ud83c\udf66", - "mage": "\ud83e\uddd9", - "bookmark_tabs": "\ud83d\udcd1", - "tone4": "\ud83c\udffe", - "mountain_cableway": "\ud83d\udea0", - "person_playing_handball": "\ud83e\udd3e", - "bulb": "\ud83d\udca1", - "clock330": "\ud83d\udd5e", - "metro": "\ud83d\ude87", - "wave": "\ud83d\udc4b", - "whale": "\ud83d\udc33", - "strawberry": "\ud83c\udf53", - "hatching_chick": "\ud83d\udc23", - "trolleybus": "\ud83d\ude8e", - "lollipop": "\ud83c\udf6d", - "clipboard": "\ud83d\udccb", - "point_right": "\ud83d\udc49", - "u6307": "\ud83c\ude2f", - "santa": "\ud83c\udf85", - "hibiscus": "\ud83c\udf3a", - "green_book": "\ud83d\udcd7", - "skull": "\ud83d\udc80", - "tumbler_glass": "\ud83e\udd43", - "clock2": "\ud83d\udd51", - "open_mouth": "\ud83d\ude2e", - "bouquet": "\ud83d\udc90", - "champagne_glass": "\ud83e\udd42", - "poodle": "\ud83d\udc29", - "hushed": "\ud83d\ude2f", - "earth_asia": "\ud83c\udf0f", - "face_with_monocle": "\ud83e\uddd0", - "libra": "\u264e", - "clock5": "\ud83d\udd54", - "ambulance": "\ud83d\ude91", - "u5272": "\ud83c\ude39", - "lipstick": "\ud83d\udc84", - "apple": "\ud83c\udf4e", - "headphones": "\ud83c\udfa7", - "turkey": "\ud83e\udd83", - "pretzel": "\ud83e\udd68", - "bug": "\ud83d\udc1b", - "school": "\ud83c\udfeb", - "speaker": "\ud83d\udd08", - "boot": "\ud83d\udc62", - "cat": "\ud83d\udc31", - "dancer": "\ud83d\udc83", - "no_entry": "\u26d4", - "kissing_cat": "\ud83d\ude3d", - "art": "\ud83c\udfa8", - "coat": "\ud83e\udde5", - "credit_card": "\ud83d\udcb3", - "customs": "\ud83d\udec3", - "broccoli": "\ud83e\udd66", - "point_left": "\ud83d\udc48", - "canned_food": "\ud83e\udd6b", - "sheep": "\ud83d\udc11", - "person_bowing": "\ud83d\ude47", - "scroll": "\ud83d\udcdc", - "martial_arts_uniform": "\ud83e\udd4b", - "amphora": "\ud83c\udffa", - "thought_balloon": "\ud83d\udcad", - "no_bell": "\ud83d\udd15", - "musical_keyboard": "\ud83c\udfb9", - "people_with_bunny_ears_partying": "\ud83d\udc6f", - "european_castle": "\ud83c\udff0", - "punch": "\ud83d\udc4a", - "camera_with_flash": "\ud83d\udcf8", - "regional_indicator_p": "\ud83c\uddf5", - "red_car": "\ud83d\ude97", - "regional_indicator_j": "\ud83c\uddef", - "owl": "\ud83e\udd89", - "chart_with_downwards_trend": "\ud83d\udcc9", - "older_woman": "\ud83d\udc75", - "gemini": "\u264a", - "incoming_envelope": "\ud83d\udce8", - "waxing_gibbous_moon": "\ud83c\udf14", - "toilet": "\ud83d\udebd", - "dragon_face": "\ud83d\udc32", - "koala": "\ud83d\udc28", - "tone5": "\ud83c\udfff", - "kiwi": "\ud83e\udd5d", - "dash": "\ud83d\udca8", - "imp": "\ud83d\udc7f", - "tent": "\u26fa", - "regional_indicator_b": "\ud83c\udde7", - "monorail": "\ud83d\ude9d", - "ox": "\ud83d\udc02", - "giraffe": "\ud83e\udd92", - "new": "\ud83c\udd95", - "person_raising_hand": "\ud83d\ude4b", - "japan": "\ud83d\uddfe", - "rice": "\ud83c\udf5a", - "ticket": "\ud83c\udfab", - "rotating_light": "\ud83d\udea8", - "loudspeaker": "\ud83d\udce2", - "person_getting_massage": "\ud83d\udc86", - "loud_sound": "\ud83d\udd0a", - "hugging": "\ud83e\udd17", - "herb": "\ud83c\udf3f", - "baby": "\ud83d\udc76", - "angel": "\ud83d\udc7c", - "athletic_shoe": "\ud83d\udc5f", - "euro": "\ud83d\udcb6", - "ram": "\ud83d\udc0f", - "large_orange_diamond": "\ud83d\udd36", - "red_circle": "\ud83d\udd34", - "ferris_wheel": "\ud83c\udfa1", - "drooling_face": "\ud83e\udd24", - "microscope": "\ud83d\udd2c", - "middle_finger": "\ud83d\udd95", - "pager": "\ud83d\udcdf", - "pensive": "\ud83d\ude14", - "potable_water": "\ud83d\udeb0", - "abc": "\ud83d\udd24", - "four_leaf_clover": "\ud83c\udf40", - "vulcan": "\ud83d\udd96", - "french_bread": "\ud83e\udd56", - "motor_scooter": "\ud83d\udef5", - "moneybag": "\ud83d\udcb0", - "sparkles": "\u2728", - "gloves": "\ud83e\udde4", - "envelope_with_arrow": "\ud83d\udce9", - "thumbsdown": "\ud83d\udc4e", - "regional_indicator_g": "\ud83c\uddec", - "video_game": "\ud83c\udfae", - "on": "\ud83d\udd1b", - "open_hands": "\ud83d\udc50", - "monkey_face": "\ud83d\udc35", - "mountain_railway": "\ud83d\ude9e", - "bee": "\ud83d\udc1d", - "scooter": "\ud83d\udef4", - "fishing_pole_and_fish": "\ud83c\udfa3", - "smiley_cat": "\ud83d\ude3a", - "heart_eyes": "\ud83d\ude0d", - "horse_racing": "\ud83c\udfc7", - "ear": "\ud83d\udc42", - "blue_circle": "\ud83d\udd35", - "crossed_flags": "\ud83c\udf8c", - "black_joker": "\ud83c\udccf", - "six_pointed_star": "\ud83d\udd2f", - "fountain": "\u26f2", - "free": "\ud83c\udd93", - "tennis": "\ud83c\udfbe", - "yum": "\ud83d\ude0b", - "fried_shrimp": "\ud83c\udf64", - "dragon": "\ud83d\udc09", - "purse": "\ud83d\udc5b", - "clock1": "\ud83d\udd50", - "airplane_arriving": "\ud83d\udeec", - "cucumber": "\ud83e\udd52", - "man_dancing": "\ud83d\udd7a", - "clock730": "\ud83d\udd62", - "deer": "\ud83e\udd8c", - "meat_on_bone": "\ud83c\udf56", - "bomb": "\ud83d\udca3", - "night_with_stars": "\ud83c\udf03", - "snake": "\ud83d\udc0d", - "ramen": "\ud83c\udf5c", - "end": "\ud83d\udd1a", - "do_not_litter": "\ud83d\udeaf", - "joy": "\ud83d\ude02", - "light_rail": "\ud83d\ude88", - "game_die": "\ud83c\udfb2", - "violin": "\ud83c\udfbb", - "tone2": "\ud83c\udffc", - "tropical_drink": "\ud83c\udf79", - "love_you_gesture": "\ud83e\udd1f", - "cherries": "\ud83c\udf52", - "traffic_light": "\ud83d\udea5", - "iphone": "\ud83d\udcf1", - "socks": "\ud83e\udde6", - "wind_chime": "\ud83c\udf90", - "no_entry_sign": "\ud83d\udeab", - "elf": "\ud83e\udddd", - "squid": "\ud83e\udd91", - "person_pouting": "\ud83d\ude4e", - "smile_cat": "\ud83d\ude38", - "beers": "\ud83c\udf7b", - "minidisc": "\ud83d\udcbd", - "clock4": "\ud83d\udd53", - "ice_cream": "\ud83c\udf68", - "cocktail": "\ud83c\udf78", - "clock3": "\ud83d\udd52", - "frowning": "\ud83d\ude26", - "hamburger": "\ud83c\udf54", - "brain": "\ud83e\udde0", - "heavy_division_sign": "\u2797", - "tophat": "\ud83c\udfa9", - "no_mouth": "\ud83d\ude36", - "ski": "\ud83c\udfbf", - "right_facing_fist": "\ud83e\udd1c", - "mailbox_closed": "\ud83d\udcea", - "chocolate_bar": "\ud83c\udf6b", - "rabbit2": "\ud83d\udc07", - "honey_pot": "\ud83c\udf6f", - "izakaya_lantern": "\ud83c\udfee", - "articulated_lorry": "\ud83d\ude9b", - "face_with_hand_over_mouth": "\ud83e\udd2d", - "japanese_ogre": "\ud83d\udc79", - "zap": "\u26a1", - "rocket": "\ud83d\ude80", - "pizza": "\ud83c\udf55", - "pound": "\ud83d\udcb7", - "person_swimming": "\ud83c\udfca", - "anchor": "\u2693", - "coconut": "\ud83e\udd65", - "sparkling_heart": "\ud83d\udc96", - "older_man": "\ud83d\udc74", - "mouse2": "\ud83d\udc01", - "angry": "\ud83d\ude20", - "up": "\ud83c\udd99", - "gorilla": "\ud83e\udd8d", - "children_crossing": "\ud83d\udeb8", - "smirk_cat": "\ud83d\ude3c", - "pregnant_woman": "\ud83e\udd30", - "electric_plug": "\ud83d\udd0c", - "dog2": "\ud83d\udc15", - "question": "\u2753", - "carousel_horse": "\ud83c\udfa0", - "church": "\u26ea", - "outbox_tray": "\ud83d\udce4", - "cinema": "\ud83c\udfa6", - "flushed": "\ud83d\ude33", - "blush": "\ud83d\ude0a", - "medal": "\ud83c\udfc5", - "coffee": "\u2615", - "gun": "\ud83d\udd2b", - "city_dusk": "\ud83c\udf06", - "watermelon": "\ud83c\udf49", - "cricket_game": "\ud83c\udfcf", - "shower": "\ud83d\udebf", - "mute": "\ud83d\udd07", - "breast_feeding": "\ud83e\udd31", - "sweat_smile": "\ud83d\ude05", - "construction_worker": "\ud83d\udc77", - "cow2": "\ud83d\udc04", - "arrows_counterclockwise": "\ud83d\udd04", - "u6e80": "\ud83c\ude35", - "grinning": "\ud83d\ude00", - "globe_with_meridians": "\ud83c\udf10", - "diamond_shape_with_a_dot_inside": "\ud83d\udca0", - "deciduous_tree": "\ud83c\udf33", - "shark": "\ud83e\udd88", - "tram": "\ud83d\ude8a", - "person_rowing_boat": "\ud83d\udea3", - "chopsticks": "\ud83e\udd62", - "black_heart": "\ud83d\udda4", - "seat": "\ud83d\udcba", - "kissing": "\ud83d\ude17", - "laughing": "\ud83d\ude06", - "slight_smile": "\ud83d\ude42", - "radio": "\ud83d\udcfb", - "arrow_up_small": "\ud83d\udd3c", - "dango": "\ud83c\udf61", - "rofl": "\ud83e\udd23", - "see_no_evil": "\ud83d\ude48", - "thermometer_face": "\ud83e\udd12", - "hotdog": "\ud83c\udf2d", - "virgo": "\u264d", - "poultry_leg": "\ud83c\udf57", - "hotel": "\ud83c\udfe8", - "wolf": "\ud83d\udc3a", - "curry": "\ud83c\udf5b", - "regional_indicator_v": "\ud83c\uddfb", - "crab": "\ud83e\udd80", - "tired_face": "\ud83d\ude2b", - "place_of_worship": "\ud83d\uded0", - "ok_hand": "\ud83d\udc4c", - "speech_balloon": "\ud83d\udcac", - "sleepy": "\ud83d\ude2a", - "earth_africa": "\ud83c\udf0d", - "police_car": "\ud83d\ude93", - "small_red_triangle_down": "\ud83d\udd3b", - "bearded_person": "\ud83e\uddd4", - "curling_stone": "\ud83e\udd4c", - "scarf": "\ud83e\udde3", - "fire": "\ud83d\udd25", - "file_folder": "\ud83d\udcc1", - "zipper_mouth": "\ud83e\udd10", - "new_moon": "\ud83c\udf11", - "regional_indicator_n": "\ud83c\uddf3", - "negative_squared_cross_mark": "\u274e", - "newspaper": "\ud83d\udcf0", - "dvd": "\ud83d\udcc0", - "pear": "\ud83c\udf50", - "partly_sunny": "\u26c5", - "black_square_button": "\ud83d\udd32", - "low_brightness": "\ud83d\udd05", - "sake": "\ud83c\udf76", - "bow_and_arrow": "\ud83c\udff9", - "cooking": "\ud83c\udf73", - "fish_cake": "\ud83c\udf65", - "tomato": "\ud83c\udf45", - "couple_with_heart": "\ud83d\udc91", - "telephone_receiver": "\ud83d\udcde", - "triangular_flag_on_post": "\ud83d\udea9", - "jack_o_lantern": "\ud83c\udf83", - "blue_book": "\ud83d\udcd8", - "clock530": "\ud83d\udd60", - "u6709": "\ud83c\ude36", - "palms_up_together": "\ud83e\udd32", - "lion_face": "\ud83e\udd81", - "lock": "\ud83d\udd12", - "duck": "\ud83e\udd86", - "truck": "\ud83d\ude9a", - "oden": "\ud83c\udf62", - "busts_in_silhouette": "\ud83d\udc65", - "hourglass_flowing_sand": "\u23f3", - "frog": "\ud83d\udc38", - "fox": "\ud83e\udd8a", - "bread": "\ud83c\udf5e", - "put_litter_in_its_place": "\ud83d\udeae", - "couple": "\ud83d\udc6b", - "bamboo": "\ud83c\udf8d", - "regional_indicator_c": "\ud83c\udde8", - "menorah": "\ud83d\udd4e", - "circus_tent": "\ud83c\udfaa", - "lying_face": "\ud83e\udd25", - "small_orange_diamond": "\ud83d\udd38", - "ship": "\ud83d\udea2", - "person_frowning": "\ud83d\ude4d", - "racehorse": "\ud83d\udc0e", - "thumbsup": "\ud83d\udc4d", - "cupid": "\ud83d\udc98", - "robot": "\ud83e\udd16", - "fallen_leaf": "\ud83c\udf42", - "pig_nose": "\ud83d\udc3d", - "vibration_mode": "\ud83d\udcf3", - "necktie": "\ud83d\udc54", - "boy": "\ud83d\udc66", - "house_with_garden": "\ud83c\udfe1", - "point_down": "\ud83d\udc47", - "grey_exclamation": "\u2755", - "books": "\ud83d\udcda", - "regional_indicator_k": "\ud83c\uddf0", - "shirt": "\ud83d\udc55", - "fries": "\ud83c\udf5f", - "dart": "\ud83c\udfaf", - "tea": "\ud83c\udf75", - "mrs_claus": "\ud83e\udd36", - "suspension_railway": "\ud83d\ude9f", - "baby_symbol": "\ud83d\udebc", - "sweet_potato": "\ud83c\udf60", - "butterfly": "\ud83e\udd8b", - "performing_arts": "\ud83c\udfad", - "notebook": "\ud83d\udcd3", - "bat": "\ud83e\udd87" -} + "100": "๐Ÿ’ฏ", + "1234": "๐Ÿ”ข", + "1st_place_medal": "๐Ÿฅ‡", + "2nd_place_medal": "๐Ÿฅˆ", + "3rd_place_medal": "๐Ÿฅ‰", + "8ball": "๐ŸŽฑ", + "a_button_blood_type": "๐Ÿ…ฐ", + "ab": "๐Ÿ†Ž", + "abacus": "๐Ÿงฎ", + "abc": "๐Ÿ”ค", + "abcd": "๐Ÿ”ก", + "accept": "๐Ÿ‰‘", + "adhesive_bandage": "๐Ÿฉน", + "admission_tickets": "๐ŸŽŸ", + "adult": "๐Ÿง‘", + "aerial_tramway": "๐Ÿšก", + "airplane": "โœˆ", + "airplane_arriving": "๐Ÿ›ฌ", + "airplane_departure": "๐Ÿ›ซ", + "alarm_clock": "โฐ", + "alembic": "โš—๏ธ", + "alien": "๐Ÿ‘ฝ", + "ambulance": "๐Ÿš‘", + "amphora": "๐Ÿบ", + "anchor": "โš“", + "angel": "๐Ÿ‘ผ", + "anger": "๐Ÿ’ข", + "anger_right": "๐Ÿ—ฏ", + "angry": "๐Ÿ˜ ", + "anguished": "๐Ÿ˜ง", + "ant": "๐Ÿœ", + "apple": "๐ŸŽ", + "aquarius": "โ™’", + "aries": "โ™ˆ", + "arrow_backward": "โ—€๏ธ", + "arrow_double_down": "โฌ", + "arrow_double_up": "โซ", + "arrow_down": "โฌ‡๏ธ", + "arrow_down_small": "๐Ÿ”ฝ", + "arrow_forward": "โ–ถ๏ธ", + "arrow_heading_down": "โคต๏ธ", + "arrow_heading_up": "โคด๏ธ", + "arrow_left": "โฌ…๏ธ", + "arrow_lower_left": "โ†™๏ธ", + "arrow_lower_right": "โ†˜๏ธ", + "arrow_right": "โžก", + "arrow_right_hook": "โ†ช๏ธ", + "arrow_up": "โฌ†๏ธ", + "arrow_up_down": "โ†•", + "arrow_up_small": "๐Ÿ”ผ", + "arrow_upper_left": "โ†–", + "arrow_upper_right": "โ†—๏ธ", + "arrows_clockwise": "๐Ÿ”ƒ", + "arrows_counterclockwise": "๐Ÿ”„", + "art": "๐ŸŽจ", + "articulated_lorry": "๐Ÿš›", + "artist_palette": "๐ŸŽจ", + "asterisk": "*โƒฃ", + "astonished": "๐Ÿ˜ฒ", + "athletic_shoe": "๐Ÿ‘Ÿ", + "atm": "๐Ÿง", + "atom": "โš›", + "atom_symbol": "โš›๏ธ", + "auto_rickshaw": "๐Ÿ›บ", + "automobile": "๐Ÿš—", + "avocado": "๐Ÿฅ‘", + "axe": "๐Ÿช“", + "b_button_blood_type": "๐Ÿ…ฑ", + "baby": "๐Ÿ‘ถ", + "baby_bottle": "๐Ÿผ", + "baby_chick": "๐Ÿค", + "baby_symbol": "๐Ÿšผ", + "back": "๐Ÿ”™", + "bacon": "๐Ÿฅ“", + "badger": "๐Ÿฆก", + "badminton": "๐Ÿธ", + "bagel": "๐Ÿฅฏ", + "baggage_claim": "๐Ÿ›„", + "baguette_bread": "๐Ÿฅ–", + "balance_scale": "โš–๏ธ", + "bald": "๐Ÿฆฒ", + "ballet_shoes": "๐Ÿฉฐ", + "balloon": "๐ŸŽˆ", + "ballot_box": "๐Ÿ—ณ", + "ballot_box_with_check": "โ˜‘๏ธ", + "bamboo": "๐ŸŽ", + "banana": "๐ŸŒ", + "bangbang": "โ€ผ๏ธ", + "banjo": "๐Ÿช•", + "bank": "๐Ÿฆ", + "bar_chart": "๐Ÿ“Š", + "barber": "๐Ÿ’ˆ", + "baseball": "โšพ", + "basket": "๐Ÿงบ", + "basketball": "๐Ÿ€", + "basketballer": "โ›น", + "bat": "๐Ÿฆ‡", + "bath": "๐Ÿ›€", + "bathtub": "๐Ÿ›", + "battery": "๐Ÿ”‹", + "beach_umbrella": "โ›ฑ", + "beach_with_umbrella": "๐Ÿ–", + "bear": "๐Ÿป", + "beard": "๐Ÿง”", + "bearded_person": "๐Ÿง”", + "bed": "๐Ÿ›", + "bee": "๐Ÿ", + "beer": "๐Ÿบ", + "beers": "๐Ÿป", + "beetle": "๐Ÿž", + "beginner": "๐Ÿ”ฐ", + "bell": "๐Ÿ””", + "bellhop_bell": "๐Ÿ›Ž", + "bento": "๐Ÿฑ", + "beverage_box": "๐Ÿงƒ", + "bicyclist": "๐Ÿšด", + "bike": "๐Ÿšฒ", + "bikini": "๐Ÿ‘™", + "billed_cap": "๐Ÿงข", + "biohazard": "โ˜ฃ๏ธ", + "bird": "๐Ÿฆ", + "birthday": "๐ŸŽ‚", + "black_circle": "โšซ", + "black_heart": "๐Ÿ–ค", + "black_joker": "๐Ÿƒ", + "black_large_square": "โฌ›", + "black_medium_small_square": "โ—พ", + "black_medium_square": "โ—ผ", + "black_nib": "โœ’๏ธ", + "black_small_square": "โ–ช", + "black_square_button": "๐Ÿ”ฒ", + "blond_haired_person": "๐Ÿ‘ฑ", + "blossom": "๐ŸŒผ", + "blowfish": "๐Ÿก", + "blue_book": "๐Ÿ“˜", + "blue_car": "๐Ÿš™", + "blue_circle": "๐Ÿ”ต", + "blue_heart": "๐Ÿ’™", + "blue_square": "๐ŸŸฆ", + "blush": "๐Ÿ˜Š", + "boar": "๐Ÿ—", + "bomb": "๐Ÿ’ฃ", + "bone": "๐Ÿฆด", + "book": "๐Ÿ“–", + "bookmark": "๐Ÿ”–", + "bookmark_tabs": "๐Ÿ“‘", + "books": "๐Ÿ“š", + "boom": "๐Ÿ’ฅ", + "boot": "๐Ÿ‘ข", + "bouquet": "๐Ÿ’", + "bow": "๐Ÿ™‡", + "bow_and_arrow": "๐Ÿน", + "bowl_with_spoon": "๐Ÿฅฃ", + "bowling": "๐ŸŽณ", + "boxing_glove": "๐ŸฅŠ", + "boy": "๐Ÿ‘ฆ", + "brain": "๐Ÿง ", + "bread": "๐Ÿž", + "breast_feeding": "๐Ÿคฑ", + "breastfeeding": "๐Ÿคฑ", + "brick": "๐Ÿงฑ", + "bride_with_veil": "๐Ÿ‘ฐ", + "bridge_at_night": "๐ŸŒ‰", + "briefcase": "๐Ÿ’ผ", + "briefs": "๐Ÿฉฒ", + "broccoli": "๐Ÿฅฆ", + "broken_heart": "๐Ÿ’”", + "broom": "๐Ÿงน", + "brown_circle": "๐ŸŸค", + "brown_heart": "๐ŸคŽ", + "bug": "๐Ÿ›", + "building_construction": "๐Ÿ—", + "bulb": "๐Ÿ’ก", + "bullettrain_front": "๐Ÿš…", + "bullettrain_side": "๐Ÿš„", + "burrito": "๐ŸŒฏ", + "bus": "๐ŸšŒ", + "busstop": "๐Ÿš", + "bust_in_silhouette": "๐Ÿ‘ค", + "busts_in_silhouette": "๐Ÿ‘ฅ", + "butter": "๐Ÿงˆ", + "butterfly": "๐Ÿฆ‹", + "cactus": "๐ŸŒต", + "cake": "๐Ÿฐ", + "calendar": "๐Ÿ“†", + "call_me": "๐Ÿค™", + "call_me_hand": "๐Ÿค™", + "calling": "๐Ÿ“ฒ", + "camel": "๐Ÿซ", + "camera": "๐Ÿ“ท", + "camera_with_flash": "๐Ÿ“ธ", + "camping": "๐Ÿ•", + "cancer": "โ™‹", + "candle": "๐Ÿ•ฏ", + "candy": "๐Ÿฌ", + "canned_food": "๐Ÿฅซ", + "canoe": "๐Ÿ›ถ", + "capital_abcd": "๐Ÿ” ", + "capricorn": "โ™‘", + "card_file_box": "๐Ÿ—ƒ", + "card_index": "๐Ÿ“‡", + "card_index_dividers": "๐Ÿ—‚", + "carousel_horse": "๐ŸŽ ", + "carrot": "๐Ÿฅ•", + "cat": "๐Ÿฑ", + "cat2": "๐Ÿˆ", + "cd": "๐Ÿ’ฟ", + "chains": "โ›“๏ธ", + "chair": "๐Ÿช‘", + "champagne": "๐Ÿพ", + "champagne_glass": "๐Ÿฅ‚", + "chart": "๐Ÿ’น", + "chart_with_downwards_trend": "๐Ÿ“‰", + "chart_with_upwards_trend": "๐Ÿ“ˆ", + "check_box_with_check": "โ˜‘", + "check_mark": "โœ”", + "checkered_flag": "๐Ÿ", + "cheese": "๐Ÿง€", + "cheese_wedge": "๐Ÿง€", + "cherries": "๐Ÿ’", + "cherry_blossom": "๐ŸŒธ", + "chess_pawn": "โ™Ÿ", + "chestnut": "๐ŸŒฐ", + "chicken": "๐Ÿ”", + "child": "๐Ÿง’", + "children_crossing": "๐Ÿšธ", + "chipmunk": "๐Ÿฟ", + "chocolate_bar": "๐Ÿซ", + "chopsticks": "๐Ÿฅข", + "christmas_tree": "๐ŸŽ„", + "church": "โ›ช", + "cinema": "๐ŸŽฆ", + "circled_m": "โ“‚", + "circus_tent": "๐ŸŽช", + "city_dusk": "๐ŸŒ†", + "city_sunset": "๐ŸŒ‡", + "cityscape": "๐Ÿ™", + "cityscape_at_dusk": "๐ŸŒ†", + "cl": "๐Ÿ†‘", + "clap": "๐Ÿ‘", + "clapper": "๐ŸŽฌ", + "classical_building": "๐Ÿ›", + "clinking_glasses": "๐Ÿฅ‚", + "clipboard": "๐Ÿ“‹", + "clock1": "๐Ÿ•", + "clock10": "๐Ÿ•™", + "clock1030": "๐Ÿ•ฅ", + "clock11": "๐Ÿ•š", + "clock1130": "๐Ÿ•ฆ", + "clock12": "๐Ÿ•›", + "clock1230": "๐Ÿ•ง", + "clock130": "๐Ÿ•œ", + "clock2": "๐Ÿ•‘", + "clock230": "๐Ÿ•", + "clock3": "๐Ÿ•’", + "clock330": "๐Ÿ•ž", + "clock4": "๐Ÿ•“", + "clock430": "๐Ÿ•Ÿ", + "clock5": "๐Ÿ•”", + "clock530": "๐Ÿ• ", + "clock6": "๐Ÿ••", + "clock630": "๐Ÿ•ก", + "clock7": "๐Ÿ•–", + "clock730": "๐Ÿ•ข", + "clock8": "๐Ÿ•—", + "clock830": "๐Ÿ•ฃ", + "clock9": "๐Ÿ•˜", + "clock930": "๐Ÿ•ค", + "closed_book": "๐Ÿ“•", + "closed_lock_with_key": "๐Ÿ”", + "closed_umbrella": "๐ŸŒ‚", + "cloud": "โ˜๏ธ", + "cloud_with_lightning": "๐ŸŒฉ", + "cloud_with_lightning_and_rain": "โ›ˆ๏ธ", + "cloud_with_rain": "๐ŸŒง", + "cloud_with_snow": "๐ŸŒจ", + "clown": "๐Ÿคก", + "clown_face": "๐Ÿคก", + "club_suit": "โ™ฃ๏ธ", + "clubs": "โ™ฃ", + "coat": "๐Ÿงฅ", + "cocktail": "๐Ÿธ", + "coconut": "๐Ÿฅฅ", + "coffee": "โ˜•", + "coffin": "โšฐ๏ธ", + "cold_face": "๐Ÿฅถ", + "cold_sweat": "๐Ÿ˜ฐ", + "comet": "โ˜„๏ธ", + "compass": "๐Ÿงญ", + "compression": "๐Ÿ—œ", + "computer": "๐Ÿ’ป", + "computer_mouse": "๐Ÿ–ฑ", + "confetti_ball": "๐ŸŽŠ", + "confounded": "๐Ÿ˜–", + "confused": "๐Ÿ˜•", + "congratulations": "ใŠ—", + "construction": "๐Ÿšง", + "construction_worker": "๐Ÿ‘ท", + "control_knobs": "๐ŸŽ›", + "convenience_store": "๐Ÿช", + "cookie": "๐Ÿช", + "cooking": "๐Ÿณ", + "cool": "๐Ÿ†’", + "cop": "๐Ÿ‘ฎ", + "copyright": "ยฉ", + "corn": "๐ŸŒฝ", + "couch_and_lamp": "๐Ÿ›‹", + "couple": "๐Ÿ‘ซ", + "couple_with_heart": "๐Ÿ’‘", + "couplekiss": "๐Ÿ’", + "cow": "๐Ÿฎ", + "cow2": "๐Ÿ„", + "cowboy": "๐Ÿค ", + "cowboy_hat_face": "๐Ÿค ", + "crab": "๐Ÿฆ€", + "crayon": "๐Ÿ–", + "crazy_face": "๐Ÿคช", + "credit_card": "๐Ÿ’ณ", + "crescent_moon": "๐ŸŒ™", + "cricket": "๐Ÿฆ—", + "cricket_game": "๐Ÿ", + "crocodile": "๐ŸŠ", + "croissant": "๐Ÿฅ", + "cross": "โœ๏ธ", + "crossed_fingers": "๐Ÿคž", + "crossed_flags": "๐ŸŽŒ", + "crossed_swords": "โš”๏ธ", + "crown": "๐Ÿ‘‘", + "cry": "๐Ÿ˜ข", + "crying_cat_face": "๐Ÿ˜ฟ", + "crystal_ball": "๐Ÿ”ฎ", + "cucumber": "๐Ÿฅ’", + "cup_with_straw": "๐Ÿฅค", + "cupcake": "๐Ÿง", + "cupid": "๐Ÿ’˜", + "curling_stone": "๐ŸฅŒ", + "curly_hair": "๐Ÿฆฑ", + "curly_loop": "โžฐ", + "currency_exchange": "๐Ÿ’ฑ", + "curry": "๐Ÿ›", + "custard": "๐Ÿฎ", + "customs": "๐Ÿ›ƒ", + "cut_of_meat": "๐Ÿฅฉ", + "cyclone": "๐ŸŒ€", + "dagger": "๐Ÿ—ก", + "dancer": "๐Ÿ’ƒ", + "dancers": "๐Ÿ‘ฏ", + "dango": "๐Ÿก", + "dark_skin_tone": "๐Ÿฟ", + "dark_sunglasses": "๐Ÿ•ถ", + "dart": "๐ŸŽฏ", + "dash": "๐Ÿ’จ", + "date": "๐Ÿ“…", + "deaf_person": "๐Ÿง", + "deciduous_tree": "๐ŸŒณ", + "deer": "๐ŸฆŒ", + "department_store": "๐Ÿฌ", + "derelict_house": "๐Ÿš", + "desert": "๐Ÿœ", + "desert_island": "๐Ÿ", + "desktop_computer": "๐Ÿ–ฅ", + "detective": "๐Ÿ•ต", + "diamond_shape_with_a_dot_inside": "๐Ÿ’ ", + "diamond_suit": "โ™ฆ๏ธ", + "diamonds": "โ™ฆ", + "disappointed": "๐Ÿ˜ž", + "disappointed_relieved": "๐Ÿ˜ฅ", + "diving_mask": "๐Ÿคฟ", + "diya_lamp": "๐Ÿช”", + "dizzy": "๐Ÿ’ซ", + "dizzy_face": "๐Ÿ˜ต", + "dna": "๐Ÿงฌ", + "do_not_litter": "๐Ÿšฏ", + "dog": "๐Ÿถ", + "dog2": "๐Ÿ•", + "dollar": "๐Ÿ’ต", + "dolls": "๐ŸŽŽ", + "dolphin": "๐Ÿฌ", + "door": "๐Ÿšช", + "double_exclamation_mark": "โ€ผ", + "doughnut": "๐Ÿฉ", + "dove": "๐Ÿ•Š", + "down_arrow": "โฌ‡", + "downleft_arrow": "โ†™", + "downright_arrow": "โ†˜", + "dragon": "๐Ÿ‰", + "dragon_face": "๐Ÿฒ", + "dress": "๐Ÿ‘—", + "dromedary_camel": "๐Ÿช", + "drooling_face": "๐Ÿคค", + "drop_of_blood": "๐Ÿฉธ", + "droplet": "๐Ÿ’ง", + "drum": "๐Ÿฅ", + "duck": "๐Ÿฆ†", + "dumpling": "๐ŸฅŸ", + "dvd": "๐Ÿ“€", + "e-mail": "๐Ÿ“ง", + "eagle": "๐Ÿฆ…", + "ear": "๐Ÿ‘‚", + "ear_of_rice": "๐ŸŒพ", + "ear_with_hearing_aid": "๐Ÿฆป", + "earth_africa": "๐ŸŒ", + "earth_americas": "๐ŸŒŽ", + "earth_asia": "๐ŸŒ", + "egg": "๐Ÿฅš", + "eggplant": "๐Ÿ†", + "eight": "8โƒฃ", + "eight_pointed_black_star": "โœด๏ธ", + "eight_spoked_asterisk": "โœณ๏ธ", + "eightpointed_star": "โœด", + "eightspoked_asterisk": "โœณ", + "eject_button": "โ", + "electric_plug": "๐Ÿ”Œ", + "elephant": "๐Ÿ˜", + "elf": "๐Ÿง", + "end": "๐Ÿ”š", + "envelope": "โœ‰", + "envelope_with_arrow": "๐Ÿ“ฉ", + "euro": "๐Ÿ’ถ", + "european_castle": "๐Ÿฐ", + "european_post_office": "๐Ÿค", + "evergreen_tree": "๐ŸŒฒ", + "exclamation": "โ—", + "exclamation_question_mark": "โ‰", + "exploding_head": "๐Ÿคฏ", + "expressionless": "๐Ÿ˜‘", + "eye": "๐Ÿ‘", + "eyeglasses": "๐Ÿ‘“", + "eyes": "๐Ÿ‘€", + "face_vomiting": "๐Ÿคฎ", + "face_with_hand_over_mouth": "๐Ÿคญ", + "face_with_headbandage": "๐Ÿค•", + "face_with_monocle": "๐Ÿง", + "face_with_raised_eyebrow": "๐Ÿคจ", + "face_with_symbols_on_mouth": "๐Ÿคฌ", + "face_with_symbols_over_mouth": "๐Ÿคฌ", + "face_with_thermometer": "๐Ÿค’", + "factory": "๐Ÿญ", + "fairy": "๐Ÿงš", + "falafel": "๐Ÿง†", + "fallen_leaf": "๐Ÿ‚", + "family": "๐Ÿ‘ช", + "fast_forward": "โฉ", + "fax": "๐Ÿ“ ", + "fearful": "๐Ÿ˜จ", + "feet": "๐Ÿพ", + "female_sign": "โ™€", + "ferris_wheel": "๐ŸŽก", + "ferry": "โ›ด๏ธ", + "field_hockey": "๐Ÿ‘", + "file_cabinet": "๐Ÿ—„", + "file_folder": "๐Ÿ“", + "film_frames": "๐ŸŽž", + "film_projector": "๐Ÿ“ฝ", + "fingers_crossed": "๐Ÿคž", + "fire": "๐Ÿ”ฅ", + "fire_engine": "๐Ÿš’", + "fire_extinguisher": "๐Ÿงฏ", + "firecracker": "๐Ÿงจ", + "fireworks": "๐ŸŽ†", + "first_place": "๐Ÿฅ‡", + "first_quarter_moon": "๐ŸŒ“", + "first_quarter_moon_with_face": "๐ŸŒ›", + "fish": "๐ŸŸ", + "fish_cake": "๐Ÿฅ", + "fishing_pole_and_fish": "๐ŸŽฃ", + "fist": "โœŠ", + "five": "5โƒฃ", + "flag_black": "๐Ÿด", + "flag_white": "๐Ÿณ", + "flags": "๐ŸŽ", + "flamingo": "๐Ÿฆฉ", + "flashlight": "๐Ÿ”ฆ", + "flat_shoe": "๐Ÿฅฟ", + "fleur-de-lis": "โšœ", + "fleurde-lis": "โšœ๏ธ", + "floppy_disk": "๐Ÿ’พ", + "flower_playing_cards": "๐ŸŽด", + "flushed": "๐Ÿ˜ณ", + "flying_disc": "๐Ÿฅ", + "flying_saucer": "๐Ÿ›ธ", + "fog": "๐ŸŒซ", + "foggy": "๐ŸŒ", + "foot": "๐Ÿฆถ", + "football": "๐Ÿˆ", + "footprints": "๐Ÿ‘ฃ", + "fork_and_knife": "๐Ÿด", + "fork_and_knife_with_plate": "๐Ÿฝ", + "fortune_cookie": "๐Ÿฅ ", + "fountain": "โ›ฒ", + "fountain_pen": "๐Ÿ–‹", + "four": "4โƒฃ", + "four_leaf_clover": "๐Ÿ€", + "fox": "๐ŸฆŠ", + "framed_picture": "๐Ÿ–ผ", + "free": "๐Ÿ†“", + "french_bread": "๐Ÿฅ–", + "fried_shrimp": "๐Ÿค", + "fries": "๐ŸŸ", + "frog": "๐Ÿธ", + "frowning": "๐Ÿ˜ฆ", + "frowning_face": "โ˜น๏ธ", + "fuelpump": "โ›ฝ", + "full_moon": "๐ŸŒ•", + "full_moon_with_face": "๐ŸŒ", + "funeral_urn": "โšฑ๏ธ", + "game_die": "๐ŸŽฒ", + "garlic": "๐Ÿง„", + "gear": "โš™๏ธ", + "gem": "๐Ÿ’Ž", + "gemini": "โ™Š", + "genie": "๐Ÿงž", + "ghost": "๐Ÿ‘ป", + "gift": "๐ŸŽ", + "gift_heart": "๐Ÿ’", + "giraffe": "๐Ÿฆ’", + "girl": "๐Ÿ‘ง", + "glass_of_milk": "๐Ÿฅ›", + "globe_with_meridians": "๐ŸŒ", + "gloves": "๐Ÿงค", + "goal": "๐Ÿฅ…", + "goal_net": "๐Ÿฅ…", + "goat": "๐Ÿ", + "goggles": "๐Ÿฅฝ", + "golf": "โ›ณ", + "golfer": "๐ŸŒ", + "gorilla": "๐Ÿฆ", + "grapes": "๐Ÿ‡", + "green_apple": "๐Ÿ", + "green_book": "๐Ÿ“—", + "green_circle": "๐ŸŸข", + "green_heart": "๐Ÿ’š", + "green_salad": "๐Ÿฅ—", + "green_square": "๐ŸŸฉ", + "grey_exclamation": "โ•", + "grey_question": "โ”", + "grimacing": "๐Ÿ˜ฌ", + "grin": "๐Ÿ˜", + "grinning": "๐Ÿ˜€", + "guard": "๐Ÿ’‚", + "guardsman": "๐Ÿ’‚", + "guide_dog": "๐Ÿฆฎ", + "guitar": "๐ŸŽธ", + "gun": "๐Ÿ”ซ", + "haircut": "๐Ÿ’‡", + "hamburger": "๐Ÿ”", + "hammer": "๐Ÿ”จ", + "hammer_and_pick": "โš’๏ธ", + "hammer_and_wrench": "๐Ÿ› ", + "hamster": "๐Ÿน", + "hand_with_fingers_splayed": "๐Ÿ–", + "handbag": "๐Ÿ‘œ", + "handshake": "๐Ÿค", + "hash": "#โƒฃ", + "hatched_chick": "๐Ÿฅ", + "hatching_chick": "๐Ÿฃ", + "head_bandage": "๐Ÿค•", + "headphones": "๐ŸŽง", + "hear_no_evil": "๐Ÿ™‰", + "heart": "โค๏ธ", + "heart_decoration": "๐Ÿ’Ÿ", + "heart_exclamation": "โฃ", + "heart_eyes": "๐Ÿ˜", + "heart_eyes_cat": "๐Ÿ˜ป", + "heart_suit": "โ™ฅ๏ธ", + "heartbeat": "๐Ÿ’“", + "heartpulse": "๐Ÿ’—", + "hearts": "โ™ฅ", + "heavy_check_mark": "โœ”๏ธ", + "heavy_division_sign": "โž—", + "heavy_dollar_sign": "๐Ÿ’ฒ", + "heavy_minus_sign": "โž–", + "heavy_multiplication_x": "โœ–๏ธ", + "heavy_plus_sign": "โž•", + "hedgehog": "๐Ÿฆ”", + "helicopter": "๐Ÿš", + "herb": "๐ŸŒฟ", + "hibiscus": "๐ŸŒบ", + "high_brightness": "๐Ÿ”†", + "high_heel": "๐Ÿ‘ ", + "hiking_boot": "๐Ÿฅพ", + "hindu_temple": "๐Ÿ›•", + "hippopotamus": "๐Ÿฆ›", + "hockey": "๐Ÿ’", + "hole": "๐Ÿ•ณ", + "honey_pot": "๐Ÿฏ", + "horse": "๐Ÿด", + "horse_racing": "๐Ÿ‡", + "hospital": "๐Ÿฅ", + "hot_face": "๐Ÿฅต", + "hot_pepper": "๐ŸŒถ", + "hot_springs": "โ™จ", + "hotdog": "๐ŸŒญ", + "hotel": "๐Ÿจ", + "hotsprings": "โ™จ๏ธ", + "hourglass": "โŒ›", + "hourglass_flowing_sand": "โณ", + "house": "๐Ÿ ", + "house_with_garden": "๐Ÿก", + "houses": "๐Ÿ˜", + "hugging": "๐Ÿค—", + "hundred_points": "๐Ÿ’ฏ", + "hushed": "๐Ÿ˜ฏ", + "ice": "๐ŸงŠ", + "ice_cream": "๐Ÿจ", + "ice_hockey": "๐Ÿ’", + "ice_skate": "โ›ธ๏ธ", + "icecream": "๐Ÿฆ", + "id": "๐Ÿ†”", + "ideograph_advantage": "๐Ÿ‰", + "imp": "๐Ÿ‘ฟ", + "inbox_tray": "๐Ÿ“ฅ", + "incoming_envelope": "๐Ÿ“จ", + "index_pointing_up": "โ˜", + "infinity": "โ™พ", + "information": "โ„น๏ธ", + "information_desk_person": "๐Ÿ’", + "information_source": "โ„น", + "innocent": "๐Ÿ˜‡", + "input_numbers": "๐Ÿ”ข", + "interrobang": "โ‰๏ธ", + "iphone": "๐Ÿ“ฑ", + "izakaya_lantern": "๐Ÿฎ", + "jack_o_lantern": "๐ŸŽƒ", + "japan": "๐Ÿ—พ", + "japanese_castle": "๐Ÿฏ", + "japanese_congratulations_button": "ใŠ—๏ธ", + "japanese_free_of_charge_button": "๐Ÿˆš", + "japanese_goblin": "๐Ÿ‘บ", + "japanese_ogre": "๐Ÿ‘น", + "japanese_reserved_button": "๐Ÿˆฏ", + "japanese_secret_button": "ใŠ™๏ธ", + "japanese_service_charge_button": "๐Ÿˆ‚", + "jeans": "๐Ÿ‘–", + "joy": "๐Ÿ˜‚", + "joy_cat": "๐Ÿ˜น", + "joystick": "๐Ÿ•น", + "kaaba": "๐Ÿ•‹", + "kangaroo": "๐Ÿฆ˜", + "key": "๐Ÿ”‘", + "keyboard": "โŒจ๏ธ", + "keycap_ten": "๐Ÿ”Ÿ", + "kick_scooter": "๐Ÿ›ด", + "kimono": "๐Ÿ‘˜", + "kiss": "๐Ÿ’‹", + "kissing": "๐Ÿ˜—", + "kissing_cat": "๐Ÿ˜ฝ", + "kissing_closed_eyes": "๐Ÿ˜š", + "kissing_heart": "๐Ÿ˜˜", + "kissing_smiling_eyes": "๐Ÿ˜™", + "kitchen_knife": "๐Ÿ”ช", + "kite": "๐Ÿช", + "kiwi": "๐Ÿฅ", + "kiwi_fruit": "๐Ÿฅ", + "knife": "๐Ÿ”ช", + "koala": "๐Ÿจ", + "koko": "๐Ÿˆ", + "lab_coat": "๐Ÿฅผ", + "label": "๐Ÿท", + "lacrosse": "๐Ÿฅ", + "large_blue_diamond": "๐Ÿ”ท", + "large_orange_diamond": "๐Ÿ”ถ", + "last_quarter_moon": "๐ŸŒ—", + "last_quarter_moon_with_face": "๐ŸŒœ", + "last_track_button": "โฎ๏ธ", + "latin_cross": "โœ", + "laughing": "๐Ÿ˜†", + "leafy_green": "๐Ÿฅฌ", + "leaves": "๐Ÿƒ", + "ledger": "๐Ÿ“’", + "left_arrow": "โฌ…", + "left_arrow_curving_right": "โ†ช", + "left_facing_fist": "๐Ÿค›", + "left_luggage": "๐Ÿ›…", + "left_right_arrow": "โ†”", + "leftfacing_fist": "๐Ÿค›", + "leftright_arrow": "โ†”๏ธ", + "leftwards_arrow_with_hook": "โ†ฉ๏ธ", + "leg": "๐Ÿฆต", + "lemon": "๐Ÿ‹", + "leo": "โ™Œ", + "leopard": "๐Ÿ†", + "level_slider": "๐ŸŽš", + "libra": "โ™Ž", + "light_rail": "๐Ÿšˆ", + "light_skin_tone": "๐Ÿป", + "link": "๐Ÿ”—", + "linked_paperclips": "๐Ÿ–‡", + "lion_face": "๐Ÿฆ", + "lips": "๐Ÿ‘„", + "lipstick": "๐Ÿ’„", + "lizard": "๐ŸฆŽ", + "llama": "๐Ÿฆ™", + "lobster": "๐Ÿฆž", + "lock": "๐Ÿ”’", + "lock_with_ink_pen": "๐Ÿ”", + "lollipop": "๐Ÿญ", + "loop": "โžฟ", + "lotion_bottle": "๐Ÿงด", + "loud_sound": "๐Ÿ”Š", + "loudspeaker": "๐Ÿ“ข", + "love_hotel": "๐Ÿฉ", + "love_letter": "๐Ÿ’Œ", + "love_you_gesture": "๐ŸคŸ", + "loveyou_gesture": "๐ŸคŸ", + "low_brightness": "๐Ÿ”…", + "luggage": "๐Ÿงณ", + "lying_face": "๐Ÿคฅ", + "m": "โ“‚๏ธ", + "mag": "๐Ÿ”", + "mag_right": "๐Ÿ”Ž", + "mage": "๐Ÿง™", + "magnet": "๐Ÿงฒ", + "mahjong": "๐Ÿ€„", + "mailbox": "๐Ÿ“ซ", + "mailbox_closed": "๐Ÿ“ช", + "mailbox_with_mail": "๐Ÿ“ฌ", + "mailbox_with_no_mail": "๐Ÿ“ญ", + "male_sign": "โ™‚", + "man": "๐Ÿ‘จ", + "man_dancing": "๐Ÿ•บ", + "man_in_suit": "๐Ÿ•ด", + "man_in_tuxedo": "๐Ÿคต", + "man_with_chinese_cap": "๐Ÿ‘ฒ", + "man_with_gua_pi_mao": "๐Ÿ‘ฒ", + "man_with_turban": "๐Ÿ‘ณ", + "mango": "๐Ÿฅญ", + "mans_shoe": "๐Ÿ‘ž", + "mantelpiece_clock": "๐Ÿ•ฐ", + "manual_wheelchair": "๐Ÿฆฝ", + "maple_leaf": "๐Ÿ", + "martial_arts_uniform": "๐Ÿฅ‹", + "mask": "๐Ÿ˜ท", + "massage": "๐Ÿ’†", + "mate": "๐Ÿง‰", + "meat_on_bone": "๐Ÿ–", + "mechanical_arm": "๐Ÿฆพ", + "mechanical_leg": "๐Ÿฆฟ", + "medal": "๐Ÿ…", + "medical_symbol": "โš•", + "medium_skin_tone": "๐Ÿฝ", + "mediumdark_skin_tone": "๐Ÿพ", + "mediumlight_skin_tone": "๐Ÿผ", + "mega": "๐Ÿ“ฃ", + "melon": "๐Ÿˆ", + "memo": "๐Ÿ“", + "menorah": "๐Ÿ•Ž", + "mens": "๐Ÿšน", + "merperson": "๐Ÿงœ", + "metal": "๐Ÿค˜", + "metro": "๐Ÿš‡", + "microbe": "๐Ÿฆ ", + "microphone": "๐ŸŽค", + "microscope": "๐Ÿ”ฌ", + "middle_finger": "๐Ÿ–•", + "military_medal": "๐ŸŽ–", + "milk": "๐Ÿฅ›", + "milky_way": "๐ŸŒŒ", + "minibus": "๐Ÿš", + "minidisc": "๐Ÿ’ฝ", + "mobile_phone_off": "๐Ÿ“ด", + "money_mouth": "๐Ÿค‘", + "money_with_wings": "๐Ÿ’ธ", + "moneybag": "๐Ÿ’ฐ", + "moneymouth_face": "๐Ÿค‘", + "monkey": "๐Ÿ’", + "monkey_face": "๐Ÿต", + "monorail": "๐Ÿš", + "moon_cake": "๐Ÿฅฎ", + "mortar_board": "๐ŸŽ“", + "mosque": "๐Ÿ•Œ", + "mosquito": "๐ŸฆŸ", + "motor_boat": "๐Ÿ›ฅ", + "motor_scooter": "๐Ÿ›ต", + "motorcycle": "๐Ÿ", + "motorized_wheelchair": "๐Ÿฆผ", + "motorway": "๐Ÿ›ฃ", + "mount_fuji": "๐Ÿ—ป", + "mountain": "โ›ฐ๏ธ", + "mountain_bicyclist": "๐Ÿšต", + "mountain_cableway": "๐Ÿš ", + "mountain_railway": "๐Ÿšž", + "mouse": "๐Ÿญ", + "mouse2": "๐Ÿ", + "movie_camera": "๐ŸŽฅ", + "moyai": "๐Ÿ—ฟ", + "mrs_claus": "๐Ÿคถ", + "multiplication_sign": "โœ–", + "muscle": "๐Ÿ’ช", + "mushroom": "๐Ÿ„", + "musical_keyboard": "๐ŸŽน", + "musical_note": "๐ŸŽต", + "musical_score": "๐ŸŽผ", + "mute": "๐Ÿ”‡", + "nail_care": "๐Ÿ’…", + "name_badge": "๐Ÿ“›", + "national_park": "๐Ÿž", + "nauseated_face": "๐Ÿคข", + "nazar_amulet": "๐Ÿงฟ", + "necktie": "๐Ÿ‘”", + "negative_squared_cross_mark": "โŽ", + "nerd": "๐Ÿค“", + "neutral_face": "๐Ÿ˜", + "new": "๐Ÿ†•", + "new_moon": "๐ŸŒ‘", + "new_moon_with_face": "๐ŸŒš", + "newspaper": "๐Ÿ“ฐ", + "next_track_button": "โญ๏ธ", + "ng": "๐Ÿ†–", + "night_with_stars": "๐ŸŒƒ", + "nine": "9โƒฃ", + "no_bell": "๐Ÿ”•", + "no_bicycles": "๐Ÿšณ", + "no_entry": "โ›”", + "no_entry_sign": "๐Ÿšซ", + "no_good": "๐Ÿ™…", + "no_mobile_phones": "๐Ÿ“ต", + "no_mouth": "๐Ÿ˜ถ", + "no_pedestrians": "๐Ÿšท", + "no_smoking": "๐Ÿšญ", + "non-potable_water": "๐Ÿšฑ", + "nose": "๐Ÿ‘ƒ", + "notebook": "๐Ÿ““", + "notebook_with_decorative_cover": "๐Ÿ“”", + "notes": "๐ŸŽถ", + "nut_and_bolt": "๐Ÿ”ฉ", + "o": "โญ•", + "o_button_blood_type": "๐Ÿ…พ", + "ocean": "๐ŸŒŠ", + "octagonal_sign": "๐Ÿ›‘", + "octopus": "๐Ÿ™", + "oden": "๐Ÿข", + "office": "๐Ÿข", + "oil_drum": "๐Ÿ›ข", + "ok": "๐Ÿ†—", + "ok_hand": "๐Ÿ‘Œ", + "ok_woman": "๐Ÿ™†", + "old_key": "๐Ÿ—", + "older_adult": "๐Ÿง“", + "older_man": "๐Ÿ‘ด", + "older_person": "๐Ÿง“", + "older_woman": "๐Ÿ‘ต", + "om_symbol": "๐Ÿ•‰", + "on": "๐Ÿ”›", + "oncoming_automobile": "๐Ÿš˜", + "oncoming_bus": "๐Ÿš", + "oncoming_fist": "๐Ÿ‘Š", + "oncoming_police_car": "๐Ÿš”", + "oncoming_taxi": "๐Ÿš–", + "one": "1โƒฃ", + "onepiece_swimsuit": "๐Ÿฉฑ", + "onion": "๐Ÿง…", + "open_file_folder": "๐Ÿ“‚", + "open_hands": "๐Ÿ‘", + "open_mouth": "๐Ÿ˜ฎ", + "ophiuchus": "โ›Ž", + "orange_book": "๐Ÿ“™", + "orange_circle": "๐ŸŸ ", + "orange_heart": "๐Ÿงก", + "orange_square": "๐ŸŸง", + "orangutan": "๐Ÿฆง", + "orthodox_cross": "โ˜ฆ๏ธ", + "otter": "๐Ÿฆฆ", + "outbox_tray": "๐Ÿ“ค", + "owl": "๐Ÿฆ‰", + "ox": "๐Ÿ‚", + "oyster": "๐Ÿฆช", + "p_button": "๐Ÿ…ฟ", + "package": "๐Ÿ“ฆ", + "page_facing_up": "๐Ÿ“„", + "page_with_curl": "๐Ÿ“ƒ", + "pager": "๐Ÿ“Ÿ", + "paintbrush": "๐Ÿ–Œ", + "palm_tree": "๐ŸŒด", + "palms_up_together": "๐Ÿคฒ", + "pancakes": "๐Ÿฅž", + "panda_face": "๐Ÿผ", + "paperclip": "๐Ÿ“Ž", + "parachute": "๐Ÿช‚", + "parrot": "๐Ÿฆœ", + "part_alternation_mark": "ใ€ฝ", + "partly_sunny": "โ›…", + "partying_face": "๐Ÿฅณ", + "passenger_ship": "๐Ÿ›ณ", + "passport_control": "๐Ÿ›‚", + "pause_button": "โธ๏ธ", + "peace": "โ˜ฎ", + "peace_symbol": "โ˜ฎ๏ธ", + "peach": "๐Ÿ‘", + "peacock": "๐Ÿฆš", + "peanuts": "๐Ÿฅœ", + "pear": "๐Ÿ", + "pen": "๐Ÿ–Š", + "pencil": "๐Ÿ“", + "pencil2": "โœ", + "penguin": "๐Ÿง", + "pensive": "๐Ÿ˜”", + "people_with_bunny_ears_partying": "๐Ÿ‘ฏ", + "people_wrestling": "๐Ÿคผ", + "performing_arts": "๐ŸŽญ", + "persevere": "๐Ÿ˜ฃ", + "person": "๐Ÿง‘", + "person_biking": "๐Ÿšด", + "person_bouncing_ball": "โ›น๏ธ", + "person_bowing": "๐Ÿ™‡", + "person_cartwheeling": "๐Ÿคธ", + "person_climbing": "๐Ÿง—", + "person_doing_cartwheel": "๐Ÿคธ", + "person_facepalming": "๐Ÿคฆ", + "person_fencing": "๐Ÿคบ", + "person_frowning": "๐Ÿ™", + "person_gesturing_no": "๐Ÿ™…", + "person_gesturing_ok": "๐Ÿ™†", + "person_getting_haircut": "๐Ÿ’‡", + "person_getting_massage": "๐Ÿ’†", + "person_in_lotus_position": "๐Ÿง˜", + "person_in_steamy_room": "๐Ÿง–", + "person_juggling": "๐Ÿคน", + "person_kneeling": "๐ŸงŽ", + "person_mountain_biking": "๐Ÿšต", + "person_playing_handball": "๐Ÿคพ", + "person_playing_water_polo": "๐Ÿคฝ", + "person_pouting": "๐Ÿ™Ž", + "person_raising_hand": "๐Ÿ™‹", + "person_rowing_boat": "๐Ÿšฃ", + "person_running": "๐Ÿƒ", + "person_shrugging": "๐Ÿคท", + "person_standing": "๐Ÿง", + "person_surfing": "๐Ÿ„", + "person_swimming": "๐ŸŠ", + "person_tipping_hand": "๐Ÿ’", + "person_walking": "๐Ÿšถ", + "person_wearing_turban": "๐Ÿ‘ณ", + "person_with_blond_hair": "๐Ÿ‘ฑ", + "person_with_pouting_face": "๐Ÿ™Ž", + "petri_dish": "๐Ÿงซ", + "pick": "โ›๏ธ", + "pie": "๐Ÿฅง", + "pig": "๐Ÿท", + "pig2": "๐Ÿ–", + "pig_nose": "๐Ÿฝ", + "pill": "๐Ÿ’Š", + "pinching_hand": "๐Ÿค", + "pineapple": "๐Ÿ", + "ping_pong": "๐Ÿ“", + "pisces": "โ™“", + "pizza": "๐Ÿ•", + "place_of_worship": "๐Ÿ›", + "play_button": "โ–ถ", + "play_or_pause_button": "โฏ๏ธ", + "play_pause": "โฏ", + "pleading_face": "๐Ÿฅบ", + "point_down": "๐Ÿ‘‡", + "point_left": "๐Ÿ‘ˆ", + "point_right": "๐Ÿ‘‰", + "point_up": "โ˜๏ธ", + "point_up_2": "๐Ÿ‘†", + "police_car": "๐Ÿš“", + "police_officer": "๐Ÿ‘ฎ", + "poodle": "๐Ÿฉ", + "poop": "๐Ÿ’ฉ", + "popcorn": "๐Ÿฟ", + "post_office": "๐Ÿฃ", + "postal_horn": "๐Ÿ“ฏ", + "postbox": "๐Ÿ“ฎ", + "potable_water": "๐Ÿšฐ", + "potato": "๐Ÿฅ”", + "pouch": "๐Ÿ‘", + "poultry_leg": "๐Ÿ—", + "pound": "๐Ÿ’ท", + "pouting_cat": "๐Ÿ˜พ", + "pray": "๐Ÿ™", + "prayer_beads": "๐Ÿ“ฟ", + "pregnant_woman": "๐Ÿคฐ", + "pretzel": "๐Ÿฅจ", + "prince": "๐Ÿคด", + "princess": "๐Ÿ‘ธ", + "printer": "๐Ÿ–จ", + "probing_cane": "๐Ÿฆฏ", + "punch": "๐Ÿ‘Š", + "purple_circle": "๐ŸŸฃ", + "purple_heart": "๐Ÿ’œ", + "purse": "๐Ÿ‘›", + "pushpin": "๐Ÿ“Œ", + "put_litter_in_its_place": "๐Ÿšฎ", + "puzzle_piece": "๐Ÿงฉ", + "question": "โ“", + "rabbit": "๐Ÿฐ", + "rabbit2": "๐Ÿ‡", + "raccoon": "๐Ÿฆ", + "racehorse": "๐ŸŽ", + "racing_car": "๐ŸŽ", + "radio": "๐Ÿ“ป", + "radio_button": "๐Ÿ”˜", + "radioactive": "โ˜ข๏ธ", + "rage": "๐Ÿ˜ก", + "railway_car": "๐Ÿšƒ", + "railway_track": "๐Ÿ›ค", + "rainbow": "๐ŸŒˆ", + "raised_back_of_hand": "๐Ÿคš", + "raised_hand": "โœ‹", + "raised_hands": "๐Ÿ™Œ", + "raising_hand": "๐Ÿ™‹", + "ram": "๐Ÿ", + "ramen": "๐Ÿœ", + "rat": "๐Ÿ€", + "razor": "๐Ÿช’", + "receipt": "๐Ÿงพ", + "record_button": "โบ๏ธ", + "recycle": "โ™ป", + "recycling_symbol": "โ™ป๏ธ", + "red_car": "๐Ÿš—", + "red_circle": "๐Ÿ”ด", + "red_envelope": "๐Ÿงง", + "red_hair": "๐Ÿฆฐ", + "red_heart": "โค", + "red_square": "๐ŸŸฅ", + "regional_indicator_a": "๐Ÿ‡ฆ", + "regional_indicator_b": "๐Ÿ‡ง", + "regional_indicator_c": "๐Ÿ‡จ", + "regional_indicator_d": "๐Ÿ‡ฉ", + "regional_indicator_e": "๐Ÿ‡ช", + "regional_indicator_f": "๐Ÿ‡ซ", + "regional_indicator_g": "๐Ÿ‡ฌ", + "regional_indicator_h": "๐Ÿ‡ญ", + "regional_indicator_i": "๐Ÿ‡ฎ", + "regional_indicator_j": "๐Ÿ‡ฏ", + "regional_indicator_k": "๐Ÿ‡ฐ", + "regional_indicator_l": "๐Ÿ‡ฑ", + "regional_indicator_m": "๐Ÿ‡ฒ", + "regional_indicator_n": "๐Ÿ‡ณ", + "regional_indicator_o": "๐Ÿ‡ด", + "regional_indicator_p": "๐Ÿ‡ต", + "regional_indicator_q": "๐Ÿ‡ถ", + "regional_indicator_r": "๐Ÿ‡ท", + "regional_indicator_s": "๐Ÿ‡ธ", + "regional_indicator_t": "๐Ÿ‡น", + "regional_indicator_u": "๐Ÿ‡บ", + "regional_indicator_v": "๐Ÿ‡ป", + "regional_indicator_w": "๐Ÿ‡ผ", + "regional_indicator_x": "๐Ÿ‡ฝ", + "regional_indicator_y": "๐Ÿ‡พ", + "regional_indicator_z": "๐Ÿ‡ฟ", + "registered": "ยฎ", + "relieved": "๐Ÿ˜Œ", + "reminder_ribbon": "๐ŸŽ—", + "repeat": "๐Ÿ”", + "repeat_one": "๐Ÿ”‚", + "rescue_workerโ€™s_helmet": "โ›‘๏ธ", + "restroom": "๐Ÿšป", + "reverse_button": "โ—€", + "revolving_hearts": "๐Ÿ’ž", + "rewind": "โช", + "rhino": "๐Ÿฆ", + "rhinoceros": "๐Ÿฆ", + "ribbon": "๐ŸŽ€", + "rice": "๐Ÿš", + "rice_ball": "๐Ÿ™", + "rice_cracker": "๐Ÿ˜", + "rice_scene": "๐ŸŽ‘", + "right_arrow": "โžก๏ธ", + "right_arrow_curving_down": "โคต", + "right_arrow_curving_left": "โ†ฉ", + "right_arrow_curving_up": "โคด", + "right_facing_fist": "๐Ÿคœ", + "rightfacing_fist": "๐Ÿคœ", + "ring": "๐Ÿ’", + "ringed_planet": "๐Ÿช", + "robot": "๐Ÿค–", + "rocket": "๐Ÿš€", + "rofl": "๐Ÿคฃ", + "roll_of_paper": "๐Ÿงป", + "rolledup_newspaper": "๐Ÿ—ž", + "roller_coaster": "๐ŸŽข", + "rolling_eyes": "๐Ÿ™„", + "rolling_on_the_floor_laughing": "๐Ÿคฃ", + "rooster": "๐Ÿ“", + "rose": "๐ŸŒน", + "rosette": "๐Ÿต", + "rotating_light": "๐Ÿšจ", + "round_pushpin": "๐Ÿ“", + "rowboat": "๐Ÿšฃ", + "rugby_football": "๐Ÿ‰", + "runner": "๐Ÿƒ", + "running_shirt_with_sash": "๐ŸŽฝ", + "safety_pin": "๐Ÿงท", + "safety_vest": "๐Ÿฆบ", + "sagittarius": "โ™", + "sailboat": "โ›ต", + "sake": "๐Ÿถ", + "salad": "๐Ÿฅ—", + "salt": "๐Ÿง‚", + "sandal": "๐Ÿ‘ก", + "sandwich": "๐Ÿฅช", + "santa": "๐ŸŽ…", + "sari": "๐Ÿฅป", + "satellite": "๐Ÿ“ก", + "sauropod": "๐Ÿฆ•", + "saxophone": "๐ŸŽท", + "scales": "โš–", + "scarf": "๐Ÿงฃ", + "school": "๐Ÿซ", + "school_satchel": "๐ŸŽ’", + "scissors": "โœ‚", + "scooter": "๐Ÿ›ด", + "scorpion": "๐Ÿฆ‚", + "scorpius": "โ™", + "scream": "๐Ÿ˜ฑ", + "scream_cat": "๐Ÿ™€", + "scroll": "๐Ÿ“œ", + "seat": "๐Ÿ’บ", + "second_place": "๐Ÿฅˆ", + "secret": "ใŠ™", + "see_no_evil": "๐Ÿ™ˆ", + "seedling": "๐ŸŒฑ", + "selfie": "๐Ÿคณ", + "seven": "7โƒฃ", + "shallow_pan_of_food": "๐Ÿฅ˜", + "shamrock": "โ˜˜๏ธ", + "shark": "๐Ÿฆˆ", + "shaved_ice": "๐Ÿง", + "sheep": "๐Ÿ‘", + "shell": "๐Ÿš", + "shield": "๐Ÿ›ก", + "shinto_shrine": "โ›ฉ๏ธ", + "ship": "๐Ÿšข", + "shirt": "๐Ÿ‘•", + "shopping_bags": "๐Ÿ›", + "shopping_cart": "๐Ÿ›’", + "shorts": "๐Ÿฉณ", + "shower": "๐Ÿšฟ", + "shrimp": "๐Ÿฆ", + "shushing_face": "๐Ÿคซ", + "sign_of_the_horns": "๐Ÿค˜", + "signal_strength": "๐Ÿ“ถ", + "six": "6โƒฃ", + "six_pointed_star": "๐Ÿ”ฏ", + "skateboard": "๐Ÿ›น", + "ski": "๐ŸŽฟ", + "skier": "โ›ท๏ธ", + "skull": "๐Ÿ’€", + "skull_and_crossbones": "โ˜ ๏ธ", + "skull_crossbones": "โ˜ ", + "skunk": "๐Ÿฆจ", + "sled": "๐Ÿ›ท", + "sleeping": "๐Ÿ˜ด", + "sleeping_accommodation": "๐Ÿ›Œ", + "sleepy": "๐Ÿ˜ช", + "slight_frown": "๐Ÿ™", + "slight_smile": "๐Ÿ™‚", + "slightly_frowning_face": "๐Ÿ™", + "slot_machine": "๐ŸŽฐ", + "sloth": "๐Ÿฆฅ", + "small_airplane": "๐Ÿ›ฉ", + "small_blue_diamond": "๐Ÿ”น", + "small_orange_diamond": "๐Ÿ”ธ", + "small_red_triangle": "๐Ÿ”บ", + "small_red_triangle_down": "๐Ÿ”ป", + "smile": "๐Ÿ˜„", + "smile_cat": "๐Ÿ˜ธ", + "smiley": "๐Ÿ˜ƒ", + "smiley_cat": "๐Ÿ˜บ", + "smiling": "โ˜บ๏ธ", + "smiling_face": "โ˜บ", + "smiling_face_with_hearts": "๐Ÿฅฐ", + "smiling_imp": "๐Ÿ˜ˆ", + "smirk": "๐Ÿ˜", + "smirk_cat": "๐Ÿ˜ผ", + "smoking": "๐Ÿšฌ", + "snail": "๐ŸŒ", + "snake": "๐Ÿ", + "sneezing_face": "๐Ÿคง", + "snowboarder": "๐Ÿ‚", + "snowcapped_mountain": "๐Ÿ”", + "snowflake": "โ„", + "snowman": "โ›„", + "soap": "๐Ÿงผ", + "sob": "๐Ÿ˜ญ", + "soccer": "โšฝ", + "socks": "๐Ÿงฆ", + "softball": "๐ŸฅŽ", + "soon": "๐Ÿ”œ", + "sos": "๐Ÿ†˜", + "sound": "๐Ÿ”‰", + "space_invader": "๐Ÿ‘พ", + "spade_suit": "โ™ ๏ธ", + "spades": "โ™ ", + "spaghetti": "๐Ÿ", + "sparkle": "โ‡", + "sparkler": "๐ŸŽ‡", + "sparkles": "โœจ", + "sparkling_heart": "๐Ÿ’–", + "speak_no_evil": "๐Ÿ™Š", + "speaker": "๐Ÿ”ˆ", + "speaking_head": "๐Ÿ—ฃ", + "speech_balloon": "๐Ÿ’ฌ", + "speech_left": "๐Ÿ—จ", + "speedboat": "๐Ÿšค", + "spider": "๐Ÿ•ท", + "spider_web": "๐Ÿ•ธ", + "spiral_calendar": "๐Ÿ—“", + "spiral_notepad": "๐Ÿ—’", + "sponge": "๐Ÿงฝ", + "spoon": "๐Ÿฅ„", + "squid": "๐Ÿฆ‘", + "stadium": "๐ŸŸ", + "star": "โญ", + "star2": "๐ŸŒŸ", + "star_and_crescent": "โ˜ช๏ธ", + "star_of_david": "โœก", + "star_struck": "๐Ÿคฉ", + "stars": "๐ŸŒ ", + "starstruck": "๐Ÿคฉ", + "station": "๐Ÿš‰", + "statue_of_liberty": "๐Ÿ—ฝ", + "steam_locomotive": "๐Ÿš‚", + "stethoscope": "๐Ÿฉบ", + "stew": "๐Ÿฒ", + "stop_button": "โน๏ธ", + "stopwatch": "โฑ๏ธ", + "straight_ruler": "๐Ÿ“", + "strawberry": "๐Ÿ“", + "stuck_out_tongue": "๐Ÿ˜›", + "stuck_out_tongue_closed_eyes": "๐Ÿ˜", + "stuck_out_tongue_winking_eye": "๐Ÿ˜œ", + "studio_microphone": "๐ŸŽ™", + "stuffed_flatbread": "๐Ÿฅ™", + "sun": "โ˜€", + "sun_behind_large_cloud": "๐ŸŒฅ", + "sun_behind_rain_cloud": "๐ŸŒฆ", + "sun_behind_small_cloud": "๐ŸŒค", + "sun_with_face": "๐ŸŒž", + "sunflower": "๐ŸŒป", + "sunglasses": "๐Ÿ˜Ž", + "sunny": "โ˜€๏ธ", + "sunrise": "๐ŸŒ…", + "sunrise_over_mountains": "๐ŸŒ„", + "superhero": "๐Ÿฆธ", + "supervillain": "๐Ÿฆน", + "surfer": "๐Ÿ„", + "sushi": "๐Ÿฃ", + "suspension_railway": "๐ŸšŸ", + "swan": "๐Ÿฆข", + "sweat": "๐Ÿ˜“", + "sweat_drops": "๐Ÿ’ฆ", + "sweat_smile": "๐Ÿ˜…", + "sweet_potato": "๐Ÿ ", + "swimmer": "๐ŸŠ", + "symbols": "๐Ÿ”ฃ", + "synagogue": "๐Ÿ•", + "syringe": "๐Ÿ’‰", + "t_rex": "๐Ÿฆ–", + "taco": "๐ŸŒฎ", + "tada": "๐ŸŽ‰", + "takeout_box": "๐Ÿฅก", + "tanabata_tree": "๐ŸŽ‹", + "tangerine": "๐ŸŠ", + "taurus": "โ™‰", + "taxi": "๐Ÿš•", + "tea": "๐Ÿต", + "teddy_bear": "๐Ÿงธ", + "telephone": "โ˜Ž", + "telephone_receiver": "๐Ÿ“ž", + "telescope": "๐Ÿ”ญ", + "tennis": "๐ŸŽพ", + "tent": "โ›บ", + "test_tube": "๐Ÿงช", + "thermometer": "๐ŸŒก", + "thermometer_face": "๐Ÿค’", + "thinking": "๐Ÿค”", + "third_place": "๐Ÿฅ‰", + "thought_balloon": "๐Ÿ’ญ", + "thread": "๐Ÿงต", + "three": "3โƒฃ", + "thumbsdown": "๐Ÿ‘Ž", + "thumbsup": "๐Ÿ‘", + "ticket": "๐ŸŽซ", + "tiger": "๐Ÿฏ", + "tiger2": "๐Ÿ…", + "timer_clock": "โฒ๏ธ", + "tired_face": "๐Ÿ˜ซ", + "tm": "โ„ข", + "toilet": "๐Ÿšฝ", + "tokyo_tower": "๐Ÿ—ผ", + "tomato": "๐Ÿ…", + "tone1": "๐Ÿป", + "tone2": "๐Ÿผ", + "tone3": "๐Ÿฝ", + "tone4": "๐Ÿพ", + "tone5": "๐Ÿฟ", + "tongue": "๐Ÿ‘…", + "toolbox": "๐Ÿงฐ", + "tooth": "๐Ÿฆท", + "top": "๐Ÿ”", + "tophat": "๐ŸŽฉ", + "tornado": "๐ŸŒช", + "track_next": "โญ", + "track_previous": "โฎ", + "trackball": "๐Ÿ–ฒ", + "tractor": "๐Ÿšœ", + "trade_mark": "โ„ข๏ธ", + "traffic_light": "๐Ÿšฅ", + "train": "๐Ÿš‹", + "train2": "๐Ÿš†", + "tram": "๐ŸšŠ", + "trex": "๐Ÿฆ–", + "triangular_flag_on_post": "๐Ÿšฉ", + "triangular_ruler": "๐Ÿ“", + "trident": "๐Ÿ”ฑ", + "triumph": "๐Ÿ˜ค", + "trolleybus": "๐ŸšŽ", + "trophy": "๐Ÿ†", + "tropical_drink": "๐Ÿน", + "tropical_fish": "๐Ÿ ", + "truck": "๐Ÿšš", + "trumpet": "๐ŸŽบ", + "tulip": "๐ŸŒท", + "tumbler_glass": "๐Ÿฅƒ", + "turkey": "๐Ÿฆƒ", + "turtle": "๐Ÿข", + "tv": "๐Ÿ“บ", + "twisted_rightwards_arrows": "๐Ÿ”€", + "two": "2โƒฃ", + "two_hearts": "๐Ÿ’•", + "two_men_holding_hands": "๐Ÿ‘ฌ", + "two_women_holding_hands": "๐Ÿ‘ญ", + "u5272": "๐Ÿˆน", + "u5408": "๐Ÿˆด", + "u55b6": "๐Ÿˆบ", + "u6307": "๐Ÿˆฏ", + "u6708": "๐Ÿˆท", + "u6709": "๐Ÿˆถ", + "u6e80": "๐Ÿˆต", + "u7121": "๐Ÿˆš", + "u7533": "๐Ÿˆธ", + "u7981": "๐Ÿˆฒ", + "u7a7a": "๐Ÿˆณ", + "umbrella": "โ˜”", + "umbrella_on_ground": "โ›ฑ๏ธ", + "unamused": "๐Ÿ˜’", + "underage": "๐Ÿ”ž", + "unicorn": "๐Ÿฆ„", + "unlock": "๐Ÿ”“", + "up": "๐Ÿ†™", + "up_arrow": "โฌ†", + "updown_arrow": "โ†•๏ธ", + "upleft_arrow": "โ†–๏ธ", + "upright_arrow": "โ†—", + "upside_down": "๐Ÿ™ƒ", + "v": "โœŒ๏ธ", + "vampire": "๐Ÿง›", + "vertical_traffic_light": "๐Ÿšฆ", + "vhs": "๐Ÿ“ผ", + "vibration_mode": "๐Ÿ“ณ", + "victory_hand": "โœŒ", + "video_camera": "๐Ÿ“น", + "video_game": "๐ŸŽฎ", + "violin": "๐ŸŽป", + "virgo": "โ™", + "volcano": "๐ŸŒ‹", + "volleyball": "๐Ÿ", + "vs": "๐Ÿ†š", + "vulcan": "๐Ÿ––", + "vulcan_salute": "๐Ÿ––", + "waffle": "๐Ÿง‡", + "walking": "๐Ÿšถ", + "waning_crescent_moon": "๐ŸŒ˜", + "waning_gibbous_moon": "๐ŸŒ–", + "warning": "โš ", + "wastebasket": "๐Ÿ—‘", + "watch": "โŒš", + "water_buffalo": "๐Ÿƒ", + "watermelon": "๐Ÿ‰", + "wave": "๐Ÿ‘‹", + "wavy_dash": "ใ€ฐ๏ธ", + "waxing_crescent_moon": "๐ŸŒ’", + "waxing_gibbous_moon": "๐ŸŒ”", + "wc": "๐Ÿšพ", + "weary": "๐Ÿ˜ฉ", + "wedding": "๐Ÿ’’", + "weightlifter": "๐Ÿ‹", + "whale": "๐Ÿณ", + "whale2": "๐Ÿ‹", + "wheel_of_dharma": "โ˜ธ๏ธ", + "wheelchair": "โ™ฟ", + "white_check_mark": "โœ…", + "white_circle": "โšช", + "white_flower": "๐Ÿ’ฎ", + "white_hair": "๐Ÿฆณ", + "white_heart": "๐Ÿค", + "white_large_square": "โฌœ", + "white_medium_small_square": "โ—ฝ", + "white_medium_square": "โ—ป๏ธ", + "white_small_square": "โ–ซ๏ธ", + "white_square_button": "๐Ÿ”ณ", + "wilted_flower": "๐Ÿฅ€", + "wilted_rose": "๐Ÿฅ€", + "wind_blowing_face": "๐ŸŒฌ", + "wind_chime": "๐ŸŽ", + "wine_glass": "๐Ÿท", + "wink": "๐Ÿ˜‰", + "wolf": "๐Ÿบ", + "woman": "๐Ÿ‘ฉ", + "woman_with_headscarf": "๐Ÿง•", + "womans_clothes": "๐Ÿ‘š", + "womans_hat": "๐Ÿ‘’", + "womens": "๐Ÿšบ", + "woozy_face": "๐Ÿฅด", + "world_map": "๐Ÿ—บ", + "worried": "๐Ÿ˜Ÿ", + "wrench": "๐Ÿ”ง", + "writing_hand": "โœ๏ธ", + "x": "โŒ", + "yarn": "๐Ÿงถ", + "yawning_face": "๐Ÿฅฑ", + "yellow_circle": "๐ŸŸก", + "yellow_heart": "๐Ÿ’›", + "yellow_square": "๐ŸŸจ", + "yen": "๐Ÿ’ด", + "yin_yang": "โ˜ฏ๏ธ", + "yoyo": "๐Ÿช€", + "yum": "๐Ÿ˜‹", + "zany_face": "๐Ÿคช", + "zap": "โšก", + "zebra": "๐Ÿฆ“", + "zero": "0โƒฃ", + "zipper_mouth": "๐Ÿค", + "zombie": "๐ŸงŸ", + "zzz": "๐Ÿ’ค" +} \ No newline at end of file diff --git a/priv/static/static/js/10.46f441b948010eda4403.js b/priv/static/static/js/10.46f441b948010eda4403.js deleted file mode 100644 index 308d124c0..000000000 Binary files a/priv/static/static/js/10.46f441b948010eda4403.js and /dev/null differ diff --git a/priv/static/static/js/10.a11a612e4c1ef51ded17.js b/priv/static/static/js/10.a11a612e4c1ef51ded17.js new file mode 100644 index 000000000..2a1ffcc2b Binary files /dev/null and b/priv/static/static/js/10.a11a612e4c1ef51ded17.js differ diff --git a/priv/static/static/js/10.46f441b948010eda4403.js.map b/priv/static/static/js/10.a11a612e4c1ef51ded17.js.map similarity index 56% rename from priv/static/static/js/10.46f441b948010eda4403.js.map rename to priv/static/static/js/10.a11a612e4c1ef51ded17.js.map index e0623e6bf..fd81b28be 100644 Binary files a/priv/static/static/js/10.46f441b948010eda4403.js.map and b/priv/static/static/js/10.a11a612e4c1ef51ded17.js.map differ diff --git a/priv/static/static/js/11.8ff1ed54814f2d34cb3e.js b/priv/static/static/js/11.22872a1f83121e70a148.js similarity index 99% rename from priv/static/static/js/11.8ff1ed54814f2d34cb3e.js rename to priv/static/static/js/11.22872a1f83121e70a148.js index cb57f2a65..a2e9cee51 100644 Binary files a/priv/static/static/js/11.8ff1ed54814f2d34cb3e.js and b/priv/static/static/js/11.22872a1f83121e70a148.js differ diff --git a/priv/static/static/js/11.8ff1ed54814f2d34cb3e.js.map b/priv/static/static/js/11.22872a1f83121e70a148.js.map similarity index 56% rename from priv/static/static/js/11.8ff1ed54814f2d34cb3e.js.map rename to priv/static/static/js/11.22872a1f83121e70a148.js.map index 4ce6d7227..6467c58a5 100644 Binary files a/priv/static/static/js/11.8ff1ed54814f2d34cb3e.js.map and b/priv/static/static/js/11.22872a1f83121e70a148.js.map differ diff --git a/priv/static/static/js/12.13204bdd0ad5703a3ea3.js b/priv/static/static/js/12.c6df5166dc6cdcf749e5.js similarity index 99% rename from priv/static/static/js/12.13204bdd0ad5703a3ea3.js rename to priv/static/static/js/12.c6df5166dc6cdcf749e5.js index a89bfeb67..441071f37 100644 Binary files a/priv/static/static/js/12.13204bdd0ad5703a3ea3.js and b/priv/static/static/js/12.c6df5166dc6cdcf749e5.js differ diff --git a/priv/static/static/js/12.13204bdd0ad5703a3ea3.js.map b/priv/static/static/js/12.c6df5166dc6cdcf749e5.js.map similarity index 56% rename from priv/static/static/js/12.13204bdd0ad5703a3ea3.js.map rename to priv/static/static/js/12.c6df5166dc6cdcf749e5.js.map index 366ec2927..c0bac6f0f 100644 Binary files a/priv/static/static/js/12.13204bdd0ad5703a3ea3.js.map and b/priv/static/static/js/12.c6df5166dc6cdcf749e5.js.map differ diff --git a/priv/static/static/js/13.e27c3eeddcc4b11c1f54.js b/priv/static/static/js/13.77214c18c6d2a9865281.js similarity index 99% rename from priv/static/static/js/13.e27c3eeddcc4b11c1f54.js rename to priv/static/static/js/13.77214c18c6d2a9865281.js index 8cd482b41..08e356de2 100644 Binary files a/priv/static/static/js/13.e27c3eeddcc4b11c1f54.js and b/priv/static/static/js/13.77214c18c6d2a9865281.js differ diff --git a/priv/static/static/js/13.e27c3eeddcc4b11c1f54.js.map b/priv/static/static/js/13.77214c18c6d2a9865281.js.map similarity index 56% rename from priv/static/static/js/13.e27c3eeddcc4b11c1f54.js.map rename to priv/static/static/js/13.77214c18c6d2a9865281.js.map index 0c61c3fca..3d7abf273 100644 Binary files a/priv/static/static/js/13.e27c3eeddcc4b11c1f54.js.map and b/priv/static/static/js/13.77214c18c6d2a9865281.js.map differ diff --git a/priv/static/static/js/14.273855b3e4e27ce80219.js.map b/priv/static/static/js/14.273855b3e4e27ce80219.js.map deleted file mode 100644 index 9ee527eaa..000000000 Binary files a/priv/static/static/js/14.273855b3e4e27ce80219.js.map and /dev/null differ diff --git a/priv/static/static/js/14.273855b3e4e27ce80219.js b/priv/static/static/js/14.e560f5e2f902b9ad2d0d.js similarity index 99% rename from priv/static/static/js/14.273855b3e4e27ce80219.js rename to priv/static/static/js/14.e560f5e2f902b9ad2d0d.js index 78c0bfebc..d2d291725 100644 Binary files a/priv/static/static/js/14.273855b3e4e27ce80219.js and b/priv/static/static/js/14.e560f5e2f902b9ad2d0d.js differ diff --git a/priv/static/static/js/14.e560f5e2f902b9ad2d0d.js.map b/priv/static/static/js/14.e560f5e2f902b9ad2d0d.js.map new file mode 100644 index 000000000..f9797f1b6 Binary files /dev/null and b/priv/static/static/js/14.e560f5e2f902b9ad2d0d.js.map differ diff --git a/priv/static/static/js/15.afbe29b6665fcd015b2d.js b/priv/static/static/js/15.2893c12f1ca2bcdc3cbf.js similarity index 98% rename from priv/static/static/js/15.afbe29b6665fcd015b2d.js rename to priv/static/static/js/15.2893c12f1ca2bcdc3cbf.js index b83752240..82318f797 100644 Binary files a/priv/static/static/js/15.afbe29b6665fcd015b2d.js and b/priv/static/static/js/15.2893c12f1ca2bcdc3cbf.js differ diff --git a/priv/static/static/js/15.2893c12f1ca2bcdc3cbf.js.map b/priv/static/static/js/15.2893c12f1ca2bcdc3cbf.js.map new file mode 100644 index 000000000..00cab138d Binary files /dev/null and b/priv/static/static/js/15.2893c12f1ca2bcdc3cbf.js.map differ diff --git a/priv/static/static/js/15.afbe29b6665fcd015b2d.js.map b/priv/static/static/js/15.afbe29b6665fcd015b2d.js.map deleted file mode 100644 index c7a0be582..000000000 Binary files a/priv/static/static/js/15.afbe29b6665fcd015b2d.js.map and /dev/null differ diff --git a/priv/static/static/js/16.5e3f20da470591d0cabf.js.map b/priv/static/static/js/16.5e3f20da470591d0cabf.js.map deleted file mode 100644 index 0c4d0e385..000000000 Binary files a/priv/static/static/js/16.5e3f20da470591d0cabf.js.map and /dev/null differ diff --git a/priv/static/static/js/16.5e3f20da470591d0cabf.js b/priv/static/static/js/16.be7f4b788716bec25023.js similarity index 98% rename from priv/static/static/js/16.5e3f20da470591d0cabf.js rename to priv/static/static/js/16.be7f4b788716bec25023.js index e90ed4ca1..ea5b554f1 100644 Binary files a/priv/static/static/js/16.5e3f20da470591d0cabf.js and b/priv/static/static/js/16.be7f4b788716bec25023.js differ diff --git a/priv/static/static/js/16.be7f4b788716bec25023.js.map b/priv/static/static/js/16.be7f4b788716bec25023.js.map new file mode 100644 index 000000000..121a49be1 Binary files /dev/null and b/priv/static/static/js/16.be7f4b788716bec25023.js.map differ diff --git a/priv/static/static/js/17.44e90ef82ee2ef12dc3f.js.map b/priv/static/static/js/17.44e90ef82ee2ef12dc3f.js.map deleted file mode 100644 index 1d191b94a..000000000 Binary files a/priv/static/static/js/17.44e90ef82ee2ef12dc3f.js.map and /dev/null differ diff --git a/priv/static/static/js/17.44e90ef82ee2ef12dc3f.js b/priv/static/static/js/17.4ddba89b4f8c284f6392.js similarity index 94% rename from priv/static/static/js/17.44e90ef82ee2ef12dc3f.js rename to priv/static/static/js/17.4ddba89b4f8c284f6392.js index 9b5adfd12..39283f245 100644 Binary files a/priv/static/static/js/17.44e90ef82ee2ef12dc3f.js and b/priv/static/static/js/17.4ddba89b4f8c284f6392.js differ diff --git a/priv/static/static/js/17.4ddba89b4f8c284f6392.js.map b/priv/static/static/js/17.4ddba89b4f8c284f6392.js.map new file mode 100644 index 000000000..322db8c6b Binary files /dev/null and b/priv/static/static/js/17.4ddba89b4f8c284f6392.js.map differ diff --git a/priv/static/static/js/18.990b88b57bf3a6809098.js b/priv/static/static/js/18.990b88b57bf3a6809098.js new file mode 100644 index 000000000..96de50c61 Binary files /dev/null and b/priv/static/static/js/18.990b88b57bf3a6809098.js differ diff --git a/priv/static/static/js/18.990b88b57bf3a6809098.js.map b/priv/static/static/js/18.990b88b57bf3a6809098.js.map new file mode 100644 index 000000000..b0fb3b629 Binary files /dev/null and b/priv/static/static/js/18.990b88b57bf3a6809098.js.map differ diff --git a/priv/static/static/js/18.9a5b877f94b2b53065e1.js b/priv/static/static/js/18.9a5b877f94b2b53065e1.js deleted file mode 100644 index c4aea5b25..000000000 Binary files a/priv/static/static/js/18.9a5b877f94b2b53065e1.js and /dev/null differ diff --git a/priv/static/static/js/18.9a5b877f94b2b53065e1.js.map b/priv/static/static/js/18.9a5b877f94b2b53065e1.js.map deleted file mode 100644 index 61d9a7d41..000000000 Binary files a/priv/static/static/js/18.9a5b877f94b2b53065e1.js.map and /dev/null differ diff --git a/priv/static/static/js/19.1fd4da643df0abf89122.js.map b/priv/static/static/js/19.1fd4da643df0abf89122.js.map deleted file mode 100644 index 010c8674d..000000000 Binary files a/priv/static/static/js/19.1fd4da643df0abf89122.js.map and /dev/null differ diff --git a/priv/static/static/js/19.1fd4da643df0abf89122.js b/priv/static/static/js/19.783715f17e3f98e8898e.js similarity index 99% rename from priv/static/static/js/19.1fd4da643df0abf89122.js rename to priv/static/static/js/19.783715f17e3f98e8898e.js index c1ca1643b..bf4fd22fd 100644 Binary files a/priv/static/static/js/19.1fd4da643df0abf89122.js and b/priv/static/static/js/19.783715f17e3f98e8898e.js differ diff --git a/priv/static/static/js/19.783715f17e3f98e8898e.js.map b/priv/static/static/js/19.783715f17e3f98e8898e.js.map new file mode 100644 index 000000000..d3bd148d5 Binary files /dev/null and b/priv/static/static/js/19.783715f17e3f98e8898e.js.map differ diff --git a/priv/static/static/js/2.422e6c756ac673a6fd44.js b/priv/static/static/js/2.422e6c756ac673a6fd44.js deleted file mode 100644 index 9fb47e2bf..000000000 Binary files a/priv/static/static/js/2.422e6c756ac673a6fd44.js and /dev/null differ diff --git a/priv/static/static/js/2.422e6c756ac673a6fd44.js.map b/priv/static/static/js/2.422e6c756ac673a6fd44.js.map deleted file mode 100644 index 92fdb4d2c..000000000 Binary files a/priv/static/static/js/2.422e6c756ac673a6fd44.js.map and /dev/null differ diff --git a/priv/static/static/js/2.88fa7ac80b2020ac2b46.js b/priv/static/static/js/2.88fa7ac80b2020ac2b46.js new file mode 100644 index 000000000..b2c2eeb25 Binary files /dev/null and b/priv/static/static/js/2.88fa7ac80b2020ac2b46.js differ diff --git a/priv/static/static/js/2.88fa7ac80b2020ac2b46.js.map b/priv/static/static/js/2.88fa7ac80b2020ac2b46.js.map new file mode 100644 index 000000000..f6aafd426 Binary files /dev/null and b/priv/static/static/js/2.88fa7ac80b2020ac2b46.js.map differ diff --git a/priv/static/static/js/20.a64fd29da59076399a27.js b/priv/static/static/js/20.96c40f6c9db8c08633bd.js similarity index 99% rename from priv/static/static/js/20.a64fd29da59076399a27.js rename to priv/static/static/js/20.96c40f6c9db8c08633bd.js index eae5b3947..a3b3d7894 100644 Binary files a/priv/static/static/js/20.a64fd29da59076399a27.js and b/priv/static/static/js/20.96c40f6c9db8c08633bd.js differ diff --git a/priv/static/static/js/20.96c40f6c9db8c08633bd.js.map b/priv/static/static/js/20.96c40f6c9db8c08633bd.js.map new file mode 100644 index 000000000..d7d40ed07 Binary files /dev/null and b/priv/static/static/js/20.96c40f6c9db8c08633bd.js.map differ diff --git a/priv/static/static/js/20.a64fd29da59076399a27.js.map b/priv/static/static/js/20.a64fd29da59076399a27.js.map deleted file mode 100644 index b2917fa10..000000000 Binary files a/priv/static/static/js/20.a64fd29da59076399a27.js.map and /dev/null differ diff --git a/priv/static/static/js/21.243d9e6ebf469a2dc740.js.map b/priv/static/static/js/21.243d9e6ebf469a2dc740.js.map deleted file mode 100644 index 3f98250fa..000000000 Binary files a/priv/static/static/js/21.243d9e6ebf469a2dc740.js.map and /dev/null differ diff --git a/priv/static/static/js/21.243d9e6ebf469a2dc740.js b/priv/static/static/js/21.5a9f8e39a7833c1aa117.js similarity index 99% rename from priv/static/static/js/21.243d9e6ebf469a2dc740.js rename to priv/static/static/js/21.5a9f8e39a7833c1aa117.js index 61633519b..4114db7db 100644 Binary files a/priv/static/static/js/21.243d9e6ebf469a2dc740.js and b/priv/static/static/js/21.5a9f8e39a7833c1aa117.js differ diff --git a/priv/static/static/js/21.5a9f8e39a7833c1aa117.js.map b/priv/static/static/js/21.5a9f8e39a7833c1aa117.js.map new file mode 100644 index 000000000..898948286 Binary files /dev/null and b/priv/static/static/js/21.5a9f8e39a7833c1aa117.js.map differ diff --git a/priv/static/static/js/22.e20ef7e5fefc0964cdd1.js b/priv/static/static/js/22.d65671b9e5e00a0eb625.js similarity index 99% rename from priv/static/static/js/22.e20ef7e5fefc0964cdd1.js rename to priv/static/static/js/22.d65671b9e5e00a0eb625.js index e8f309f8a..3748a53b2 100644 Binary files a/priv/static/static/js/22.e20ef7e5fefc0964cdd1.js and b/priv/static/static/js/22.d65671b9e5e00a0eb625.js differ diff --git a/priv/static/static/js/22.d65671b9e5e00a0eb625.js.map b/priv/static/static/js/22.d65671b9e5e00a0eb625.js.map new file mode 100644 index 000000000..110cadd41 Binary files /dev/null and b/priv/static/static/js/22.d65671b9e5e00a0eb625.js.map differ diff --git a/priv/static/static/js/22.e20ef7e5fefc0964cdd1.js.map b/priv/static/static/js/22.e20ef7e5fefc0964cdd1.js.map deleted file mode 100644 index 7780cffe6..000000000 Binary files a/priv/static/static/js/22.e20ef7e5fefc0964cdd1.js.map and /dev/null differ diff --git a/priv/static/static/js/23.614a35f9ded445292f4a.js.map b/priv/static/static/js/23.614a35f9ded445292f4a.js.map deleted file mode 100644 index 4158041f4..000000000 Binary files a/priv/static/static/js/23.614a35f9ded445292f4a.js.map and /dev/null differ diff --git a/priv/static/static/js/23.614a35f9ded445292f4a.js b/priv/static/static/js/23.bf697d60801d277815e0.js similarity index 99% rename from priv/static/static/js/23.614a35f9ded445292f4a.js rename to priv/static/static/js/23.bf697d60801d277815e0.js index a35450986..e61cf01d7 100644 Binary files a/priv/static/static/js/23.614a35f9ded445292f4a.js and b/priv/static/static/js/23.bf697d60801d277815e0.js differ diff --git a/priv/static/static/js/23.bf697d60801d277815e0.js.map b/priv/static/static/js/23.bf697d60801d277815e0.js.map new file mode 100644 index 000000000..20c74e93b Binary files /dev/null and b/priv/static/static/js/23.bf697d60801d277815e0.js.map differ diff --git a/priv/static/static/js/24.6ae9ca51e51e023afbe4.js.map b/priv/static/static/js/24.6ae9ca51e51e023afbe4.js.map deleted file mode 100644 index 7e68d5eaa..000000000 Binary files a/priv/static/static/js/24.6ae9ca51e51e023afbe4.js.map and /dev/null differ diff --git a/priv/static/static/js/24.6ae9ca51e51e023afbe4.js b/priv/static/static/js/24.914e51bfcfc620a93c0e.js similarity index 99% rename from priv/static/static/js/24.6ae9ca51e51e023afbe4.js rename to priv/static/static/js/24.914e51bfcfc620a93c0e.js index d075f3b1f..abdad101e 100644 Binary files a/priv/static/static/js/24.6ae9ca51e51e023afbe4.js and b/priv/static/static/js/24.914e51bfcfc620a93c0e.js differ diff --git a/priv/static/static/js/24.914e51bfcfc620a93c0e.js.map b/priv/static/static/js/24.914e51bfcfc620a93c0e.js.map new file mode 100644 index 000000000..1ddfced9a Binary files /dev/null and b/priv/static/static/js/24.914e51bfcfc620a93c0e.js.map differ diff --git a/priv/static/static/js/25.eadae0d48ee5be52a16c.js b/priv/static/static/js/25.eadae0d48ee5be52a16c.js deleted file mode 100644 index a0e44e1aa..000000000 Binary files a/priv/static/static/js/25.eadae0d48ee5be52a16c.js and /dev/null differ diff --git a/priv/static/static/js/25.eadae0d48ee5be52a16c.js.map b/priv/static/static/js/25.eadae0d48ee5be52a16c.js.map deleted file mode 100644 index aaa5e3a57..000000000 Binary files a/priv/static/static/js/25.eadae0d48ee5be52a16c.js.map and /dev/null differ diff --git a/priv/static/static/js/25.fa8acda1a0ba7de2ab58.js b/priv/static/static/js/25.fa8acda1a0ba7de2ab58.js new file mode 100644 index 000000000..719148fcd Binary files /dev/null and b/priv/static/static/js/25.fa8acda1a0ba7de2ab58.js differ diff --git a/priv/static/static/js/25.fa8acda1a0ba7de2ab58.js.map b/priv/static/static/js/25.fa8acda1a0ba7de2ab58.js.map new file mode 100644 index 000000000..ec5910108 Binary files /dev/null and b/priv/static/static/js/25.fa8acda1a0ba7de2ab58.js.map differ diff --git a/priv/static/static/js/26.8fd0027b982c4bcdc88f.js b/priv/static/static/js/26.5233739c17e00ab514f7.js similarity index 99% rename from priv/static/static/js/26.8fd0027b982c4bcdc88f.js rename to priv/static/static/js/26.5233739c17e00ab514f7.js index 3b149915b..9adba8a0c 100644 Binary files a/priv/static/static/js/26.8fd0027b982c4bcdc88f.js and b/priv/static/static/js/26.5233739c17e00ab514f7.js differ diff --git a/priv/static/static/js/26.5233739c17e00ab514f7.js.map b/priv/static/static/js/26.5233739c17e00ab514f7.js.map new file mode 100644 index 000000000..9aad55492 Binary files /dev/null and b/priv/static/static/js/26.5233739c17e00ab514f7.js.map differ diff --git a/priv/static/static/js/26.8fd0027b982c4bcdc88f.js.map b/priv/static/static/js/26.8fd0027b982c4bcdc88f.js.map deleted file mode 100644 index d40f1979a..000000000 Binary files a/priv/static/static/js/26.8fd0027b982c4bcdc88f.js.map and /dev/null differ diff --git a/priv/static/static/js/27.6d90a54efba08d261d69.js.map b/priv/static/static/js/27.6d90a54efba08d261d69.js.map deleted file mode 100644 index 6685474ce..000000000 Binary files a/priv/static/static/js/27.6d90a54efba08d261d69.js.map and /dev/null differ diff --git a/priv/static/static/js/27.6d90a54efba08d261d69.js b/priv/static/static/js/27.79a2337abb067d8a36ce.js similarity index 94% rename from priv/static/static/js/27.6d90a54efba08d261d69.js rename to priv/static/static/js/27.79a2337abb067d8a36ce.js index e8420a54f..07b8fbea4 100644 Binary files a/priv/static/static/js/27.6d90a54efba08d261d69.js and b/priv/static/static/js/27.79a2337abb067d8a36ce.js differ diff --git a/priv/static/static/js/27.79a2337abb067d8a36ce.js.map b/priv/static/static/js/27.79a2337abb067d8a36ce.js.map new file mode 100644 index 000000000..a55aeae77 Binary files /dev/null and b/priv/static/static/js/27.79a2337abb067d8a36ce.js.map differ diff --git a/priv/static/static/js/28.ed355decbad274c26485.js b/priv/static/static/js/28.ed355decbad274c26485.js new file mode 100644 index 000000000..e4cfd3d70 Binary files /dev/null and b/priv/static/static/js/28.ed355decbad274c26485.js differ diff --git a/priv/static/static/js/28.ed355decbad274c26485.js.map b/priv/static/static/js/28.ed355decbad274c26485.js.map new file mode 100644 index 000000000..0349f2c68 Binary files /dev/null and b/priv/static/static/js/28.ed355decbad274c26485.js.map differ diff --git a/priv/static/static/js/28.f1353aa382a104262d1a.js b/priv/static/static/js/28.f1353aa382a104262d1a.js deleted file mode 100644 index a253284f0..000000000 Binary files a/priv/static/static/js/28.f1353aa382a104262d1a.js and /dev/null differ diff --git a/priv/static/static/js/28.f1353aa382a104262d1a.js.map b/priv/static/static/js/28.f1353aa382a104262d1a.js.map deleted file mode 100644 index 3421c9511..000000000 Binary files a/priv/static/static/js/28.f1353aa382a104262d1a.js.map and /dev/null differ diff --git a/priv/static/static/js/29.39c1e87a689c840395b2.js.map b/priv/static/static/js/29.39c1e87a689c840395b2.js.map deleted file mode 100644 index 5901ce9b7..000000000 Binary files a/priv/static/static/js/29.39c1e87a689c840395b2.js.map and /dev/null differ diff --git a/priv/static/static/js/29.39c1e87a689c840395b2.js b/priv/static/static/js/29.d3d8f3c066d579644c9a.js similarity index 99% rename from priv/static/static/js/29.39c1e87a689c840395b2.js rename to priv/static/static/js/29.d3d8f3c066d579644c9a.js index ddb512279..8a8a3b51f 100644 Binary files a/priv/static/static/js/29.39c1e87a689c840395b2.js and b/priv/static/static/js/29.d3d8f3c066d579644c9a.js differ diff --git a/priv/static/static/js/29.d3d8f3c066d579644c9a.js.map b/priv/static/static/js/29.d3d8f3c066d579644c9a.js.map new file mode 100644 index 000000000..0ef69d368 Binary files /dev/null and b/priv/static/static/js/29.d3d8f3c066d579644c9a.js.map differ diff --git a/priv/static/static/js/3.a0df8a5bcd120d1f8581.js b/priv/static/static/js/3.0b1cb0c49b906b834801.js similarity index 99% rename from priv/static/static/js/3.a0df8a5bcd120d1f8581.js rename to priv/static/static/js/3.0b1cb0c49b906b834801.js index 423121114..5b79d06b1 100644 Binary files a/priv/static/static/js/3.a0df8a5bcd120d1f8581.js and b/priv/static/static/js/3.0b1cb0c49b906b834801.js differ diff --git a/priv/static/static/js/3.a0df8a5bcd120d1f8581.js.map b/priv/static/static/js/3.0b1cb0c49b906b834801.js.map similarity index 99% rename from priv/static/static/js/3.a0df8a5bcd120d1f8581.js.map rename to priv/static/static/js/3.0b1cb0c49b906b834801.js.map index 653727d10..08e6ffdfe 100644 Binary files a/priv/static/static/js/3.a0df8a5bcd120d1f8581.js.map and b/priv/static/static/js/3.0b1cb0c49b906b834801.js.map differ diff --git a/priv/static/static/js/30.04694ca04ca2fb3b9695.js b/priv/static/static/js/30.04694ca04ca2fb3b9695.js new file mode 100644 index 000000000..cc60c675d Binary files /dev/null and b/priv/static/static/js/30.04694ca04ca2fb3b9695.js differ diff --git a/priv/static/static/js/30.04694ca04ca2fb3b9695.js.map b/priv/static/static/js/30.04694ca04ca2fb3b9695.js.map new file mode 100644 index 000000000..b347f4f84 Binary files /dev/null and b/priv/static/static/js/30.04694ca04ca2fb3b9695.js.map differ diff --git a/priv/static/static/js/30.64736585965c63c2b5d4.js b/priv/static/static/js/30.64736585965c63c2b5d4.js deleted file mode 100644 index 4fdbe8c3e..000000000 Binary files a/priv/static/static/js/30.64736585965c63c2b5d4.js and /dev/null differ diff --git a/priv/static/static/js/30.64736585965c63c2b5d4.js.map b/priv/static/static/js/30.64736585965c63c2b5d4.js.map deleted file mode 100644 index 376920946..000000000 Binary files a/priv/static/static/js/30.64736585965c63c2b5d4.js.map and /dev/null differ diff --git a/priv/static/static/js/31.ef44f6a2b08f7f78dd8e.js b/priv/static/static/js/31.ef44f6a2b08f7f78dd8e.js new file mode 100644 index 000000000..886c184d1 Binary files /dev/null and b/priv/static/static/js/31.ef44f6a2b08f7f78dd8e.js differ diff --git a/priv/static/static/js/31.ef44f6a2b08f7f78dd8e.js.map b/priv/static/static/js/31.ef44f6a2b08f7f78dd8e.js.map new file mode 100644 index 000000000..1a4bd1a0a Binary files /dev/null and b/priv/static/static/js/31.ef44f6a2b08f7f78dd8e.js.map differ diff --git a/priv/static/static/js/32.044555dd7095261d9faf.js b/priv/static/static/js/32.044555dd7095261d9faf.js new file mode 100644 index 000000000..6ca50349e Binary files /dev/null and b/priv/static/static/js/32.044555dd7095261d9faf.js differ diff --git a/priv/static/static/js/32.044555dd7095261d9faf.js.map b/priv/static/static/js/32.044555dd7095261d9faf.js.map new file mode 100644 index 000000000..f7f4094ee Binary files /dev/null and b/priv/static/static/js/32.044555dd7095261d9faf.js.map differ diff --git a/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js b/priv/static/static/js/4.15e71ac865c2606c30a6.js similarity index 83% rename from priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js rename to priv/static/static/js/4.15e71ac865c2606c30a6.js index 4da4c56fa..3406cc065 100644 Binary files a/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js and b/priv/static/static/js/4.15e71ac865c2606c30a6.js differ diff --git a/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js.map b/priv/static/static/js/4.15e71ac865c2606c30a6.js.map similarity index 99% rename from priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js.map rename to priv/static/static/js/4.15e71ac865c2606c30a6.js.map index bc040ab9b..023d90430 100644 Binary files a/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js.map and b/priv/static/static/js/4.15e71ac865c2606c30a6.js.map differ diff --git a/priv/static/static/js/5.2e165bc072548e533dd4.js b/priv/static/static/js/5.e116ac5b71f5e62029a1.js similarity index 98% rename from priv/static/static/js/5.2e165bc072548e533dd4.js rename to priv/static/static/js/5.e116ac5b71f5e62029a1.js index cfd84226c..acd64094e 100644 Binary files a/priv/static/static/js/5.2e165bc072548e533dd4.js and b/priv/static/static/js/5.e116ac5b71f5e62029a1.js differ diff --git a/priv/static/static/js/5.2e165bc072548e533dd4.js.map b/priv/static/static/js/5.e116ac5b71f5e62029a1.js.map similarity index 57% rename from priv/static/static/js/5.2e165bc072548e533dd4.js.map rename to priv/static/static/js/5.e116ac5b71f5e62029a1.js.map index 49959c78e..0017a3bfd 100644 Binary files a/priv/static/static/js/5.2e165bc072548e533dd4.js.map and b/priv/static/static/js/5.e116ac5b71f5e62029a1.js.map differ diff --git a/priv/static/static/js/6.260ccd84f8cd2af27970.js b/priv/static/static/js/6.4e804674e0bff336a51b.js similarity index 99% rename from priv/static/static/js/6.260ccd84f8cd2af27970.js rename to priv/static/static/js/6.4e804674e0bff336a51b.js index fb4a690f4..b33bbd652 100644 Binary files a/priv/static/static/js/6.260ccd84f8cd2af27970.js and b/priv/static/static/js/6.4e804674e0bff336a51b.js differ diff --git a/priv/static/static/js/6.260ccd84f8cd2af27970.js.map b/priv/static/static/js/6.4e804674e0bff336a51b.js.map similarity index 57% rename from priv/static/static/js/6.260ccd84f8cd2af27970.js.map rename to priv/static/static/js/6.4e804674e0bff336a51b.js.map index 850fe731a..bbb049a88 100644 Binary files a/priv/static/static/js/6.260ccd84f8cd2af27970.js.map and b/priv/static/static/js/6.4e804674e0bff336a51b.js.map differ diff --git a/priv/static/static/js/7.1c41eff6cfc75a00bde4.js b/priv/static/static/js/7.e8595e0b6e063c6d9478.js similarity index 99% rename from priv/static/static/js/7.1c41eff6cfc75a00bde4.js rename to priv/static/static/js/7.e8595e0b6e063c6d9478.js index 317770a53..7622e0d7a 100644 Binary files a/priv/static/static/js/7.1c41eff6cfc75a00bde4.js and b/priv/static/static/js/7.e8595e0b6e063c6d9478.js differ diff --git a/priv/static/static/js/7.1c41eff6cfc75a00bde4.js.map b/priv/static/static/js/7.e8595e0b6e063c6d9478.js.map similarity index 57% rename from priv/static/static/js/7.1c41eff6cfc75a00bde4.js.map rename to priv/static/static/js/7.e8595e0b6e063c6d9478.js.map index 36f327b3f..40327d1fd 100644 Binary files a/priv/static/static/js/7.1c41eff6cfc75a00bde4.js.map and b/priv/static/static/js/7.e8595e0b6e063c6d9478.js.map differ diff --git a/priv/static/static/js/8.9b35c2fee24ab7481e00.js b/priv/static/static/js/8.2d08c6fbb6b6ef23752f.js similarity index 99% rename from priv/static/static/js/8.9b35c2fee24ab7481e00.js rename to priv/static/static/js/8.2d08c6fbb6b6ef23752f.js index cb7844ffc..085a9e004 100644 Binary files a/priv/static/static/js/8.9b35c2fee24ab7481e00.js and b/priv/static/static/js/8.2d08c6fbb6b6ef23752f.js differ diff --git a/priv/static/static/js/8.9b35c2fee24ab7481e00.js.map b/priv/static/static/js/8.2d08c6fbb6b6ef23752f.js.map similarity index 57% rename from priv/static/static/js/8.9b35c2fee24ab7481e00.js.map rename to priv/static/static/js/8.2d08c6fbb6b6ef23752f.js.map index 65f4d5ae9..50222e2be 100644 Binary files a/priv/static/static/js/8.9b35c2fee24ab7481e00.js.map and b/priv/static/static/js/8.2d08c6fbb6b6ef23752f.js.map differ diff --git a/priv/static/static/js/9.3a29094f1886648a0af3.js b/priv/static/static/js/9.3a29094f1886648a0af3.js deleted file mode 100644 index eb3516dcd..000000000 Binary files a/priv/static/static/js/9.3a29094f1886648a0af3.js and /dev/null differ diff --git a/priv/static/static/js/9.3a29094f1886648a0af3.js.map b/priv/static/static/js/9.3a29094f1886648a0af3.js.map deleted file mode 100644 index 1b6224a6a..000000000 Binary files a/priv/static/static/js/9.3a29094f1886648a0af3.js.map and /dev/null differ diff --git a/priv/static/static/js/9.7d9dd95c4a1c9aa47453.js b/priv/static/static/js/9.7d9dd95c4a1c9aa47453.js new file mode 100644 index 000000000..41ab62b92 Binary files /dev/null and b/priv/static/static/js/9.7d9dd95c4a1c9aa47453.js differ diff --git a/priv/static/static/js/9.7d9dd95c4a1c9aa47453.js.map b/priv/static/static/js/9.7d9dd95c4a1c9aa47453.js.map new file mode 100644 index 000000000..c215e9a03 Binary files /dev/null and b/priv/static/static/js/9.7d9dd95c4a1c9aa47453.js.map differ diff --git a/priv/static/static/js/app.45547c05212c403dd77c.js b/priv/static/static/js/app.45547c05212c403dd77c.js deleted file mode 100644 index 219a59493..000000000 Binary files a/priv/static/static/js/app.45547c05212c403dd77c.js and /dev/null differ diff --git a/priv/static/static/js/app.45547c05212c403dd77c.js.map b/priv/static/static/js/app.45547c05212c403dd77c.js.map deleted file mode 100644 index e1dd6c992..000000000 Binary files a/priv/static/static/js/app.45547c05212c403dd77c.js.map and /dev/null differ diff --git a/priv/static/static/js/app.eb8f7164fc75862a251d.js b/priv/static/static/js/app.eb8f7164fc75862a251d.js new file mode 100644 index 000000000..55414d124 Binary files /dev/null and b/priv/static/static/js/app.eb8f7164fc75862a251d.js differ diff --git a/priv/static/static/js/app.eb8f7164fc75862a251d.js.map b/priv/static/static/js/app.eb8f7164fc75862a251d.js.map new file mode 100644 index 000000000..f1dbb68bb Binary files /dev/null and b/priv/static/static/js/app.eb8f7164fc75862a251d.js.map differ diff --git a/priv/static/static/js/vendors~app.952124344a84613dbac0.js b/priv/static/static/js/vendors~app.54838a79dee084ec3dad.js similarity index 71% rename from priv/static/static/js/vendors~app.952124344a84613dbac0.js rename to priv/static/static/js/vendors~app.54838a79dee084ec3dad.js index f7943c122..38dd65643 100644 Binary files a/priv/static/static/js/vendors~app.952124344a84613dbac0.js and b/priv/static/static/js/vendors~app.54838a79dee084ec3dad.js differ diff --git a/priv/static/static/js/vendors~app.54838a79dee084ec3dad.js.map b/priv/static/static/js/vendors~app.54838a79dee084ec3dad.js.map new file mode 100644 index 000000000..35b5fd52f Binary files /dev/null and b/priv/static/static/js/vendors~app.54838a79dee084ec3dad.js.map differ diff --git a/priv/static/static/js/vendors~app.952124344a84613dbac0.js.map b/priv/static/static/js/vendors~app.952124344a84613dbac0.js.map deleted file mode 100644 index 05fc07c18..000000000 Binary files a/priv/static/static/js/vendors~app.952124344a84613dbac0.js.map and /dev/null differ diff --git a/priv/static/static/themes/redmond-xx-se.json b/priv/static/static/themes/redmond-xx-se.json index 24480d2c7..b62769dbc 100644 --- a/priv/static/static/themes/redmond-xx-se.json +++ b/priv/static/static/themes/redmond-xx-se.json @@ -267,6 +267,7 @@ }, "colors": { "bg": "#c0c0c0", + "wallpaper": "#008080", "text": "#000000", "link": "#0000ff", "accent": "#000080", diff --git a/priv/static/static/themes/redmond-xx.json b/priv/static/static/themes/redmond-xx.json index cf9010fe2..83b591091 100644 --- a/priv/static/static/themes/redmond-xx.json +++ b/priv/static/static/themes/redmond-xx.json @@ -258,6 +258,7 @@ }, "colors": { "bg": "#c0c0c0", + "wallpaper": "#008080", "text": "#000000", "link": "#0000ff", "accent": "#000080", diff --git a/priv/static/static/themes/redmond-xxi.json b/priv/static/static/themes/redmond-xxi.json index 7fdc4a6d6..60ceae7c2 100644 --- a/priv/static/static/themes/redmond-xxi.json +++ b/priv/static/static/themes/redmond-xxi.json @@ -240,6 +240,7 @@ }, "colors": { "bg": "#d6d6ce", + "wallpaper": "#396ba5", "text": "#000000", "link": "#0000ff", "accent": "#0a246a", diff --git a/priv/static/sw-pleroma.js b/priv/static/sw-pleroma.js index 385ee2f0c..25879eb45 100644 Binary files a/priv/static/sw-pleroma.js and b/priv/static/sw-pleroma.js differ diff --git a/priv/static/sw-pleroma.js.map b/priv/static/sw-pleroma.js.map index 0b6a76c2f..62cea8c08 100644 Binary files a/priv/static/sw-pleroma.js.map and b/priv/static/sw-pleroma.js.map differ diff --git a/test/mix/tasks/pleroma/email_test.exs b/test/mix/tasks/pleroma/email_test.exs index ef26142c4..ce68b88de 100644 --- a/test/mix/tasks/pleroma/email_test.exs +++ b/test/mix/tasks/pleroma/email_test.exs @@ -63,7 +63,7 @@ test "Sends confirmation emails" do insert(:user, %{ is_confirmed: false, confirmation_token: "mytoken", - deactivated: false, + is_active: true, email: "local1@pleroma.com", local: true }) @@ -72,7 +72,7 @@ test "Sends confirmation emails" do insert(:user, %{ is_confirmed: false, confirmation_token: "mytoken", - deactivated: false, + is_active: true, email: "local2@pleroma.com", local: true }) @@ -90,28 +90,28 @@ test "Does not send confirmation email to inappropriate users" do insert(:user, %{ is_confirmed: true, confirmation_token: "mytoken", - deactivated: false, + is_active: true, email: "confirmed@pleroma.com", local: true }) # remote user insert(:user, %{ - deactivated: false, + is_active: true, email: "remote@not-pleroma.com", local: false }) # deactivated user = insert(:user, %{ - deactivated: true, + is_active: false, email: "deactivated@pleroma.com", local: false }) # invisible user insert(:user, %{ - deactivated: false, + is_active: true, email: "invisible@pleroma.com", local: true, invisible: true diff --git a/test/mix/tasks/pleroma/user_test.exs b/test/mix/tasks/pleroma/user_test.exs index 2b5232283..a2178bbd1 100644 --- a/test/mix/tasks/pleroma/user_test.exs +++ b/test/mix/tasks/pleroma/user_test.exs @@ -102,7 +102,7 @@ test "user is deleted" do assert_received {:mix_shell, :info, [message]} assert message =~ " deleted" - assert %{deactivated: true} = User.get_by_nickname(user.nickname) + assert %{is_active: false} = User.get_by_nickname(user.nickname) assert called(Pleroma.Web.Federator.publish(:_)) end @@ -140,7 +140,7 @@ test "a remote user's create activity is deleted when the object has been pruned assert_received {:mix_shell, :info, [message]} assert message =~ " deleted" - assert %{deactivated: true} = User.get_by_nickname(user.nickname) + assert %{is_active: false} = User.get_by_nickname(user.nickname) assert called(Pleroma.Web.Federator.publish(:_)) refute Pleroma.Repo.get(Pleroma.Activity, like_activity.id) @@ -157,41 +157,8 @@ test "no user to delete" do end end - describe "running toggle_activated" do - test "user is deactivated" do - user = insert(:user) - - Mix.Tasks.Pleroma.User.run(["toggle_activated", user.nickname]) - - assert_received {:mix_shell, :info, [message]} - assert message =~ " deactivated" - - user = User.get_cached_by_nickname(user.nickname) - assert user.deactivated - end - - test "user is activated" do - user = insert(:user, deactivated: true) - - Mix.Tasks.Pleroma.User.run(["toggle_activated", user.nickname]) - - assert_received {:mix_shell, :info, [message]} - assert message =~ " activated" - - user = User.get_cached_by_nickname(user.nickname) - refute user.deactivated - end - - test "no user to toggle" do - Mix.Tasks.Pleroma.User.run(["toggle_activated", "nonexistent"]) - - assert_received {:mix_shell, :error, [message]} - assert message =~ "No user" - end - end - describe "running deactivate" do - test "user is unsubscribed" do + test "active user is deactivated and unsubscribed" do followed = insert(:user) remote_followed = insert(:user, local: false) user = insert(:user) @@ -201,16 +168,26 @@ test "user is unsubscribed" do Mix.Tasks.Pleroma.User.run(["deactivate", user.nickname]) - assert_received {:mix_shell, :info, [message]} - assert message =~ "Deactivating" - # Note that the task has delay :timer.sleep(500) assert_received {:mix_shell, :info, [message]} - assert message =~ "Successfully unsubscribed" + + assert message == + "Successfully deactivated #{user.nickname} and unsubscribed all local followers" user = User.get_cached_by_nickname(user.nickname) assert Enum.empty?(Enum.filter(User.get_friends(user), & &1.local)) - assert user.deactivated + refute user.is_active + end + + test "user is deactivated" do + %{id: id, nickname: nickname} = insert(:user, is_active: false) + + assert :ok = Mix.Tasks.Pleroma.User.run(["deactivate", nickname]) + assert_received {:mix_shell, :info, [message]} + assert message == "User #{nickname} already deactivated" + + user = Repo.get(User, id) + refute user.is_active end test "no user to deactivate" do @@ -489,6 +466,37 @@ test "it prints an error message when user is not exist" do end end + describe "running activate" do + test "user is activated" do + %{id: id, nickname: nickname} = insert(:user, is_active: true) + + assert :ok = Mix.Tasks.Pleroma.User.run(["activate", nickname]) + assert_received {:mix_shell, :info, [message]} + assert message == "User #{nickname} already activated" + + user = Repo.get(User, id) + assert user.is_active + end + + test "user is not activated" do + %{id: id, nickname: nickname} = insert(:user, is_active: false) + + assert :ok = Mix.Tasks.Pleroma.User.run(["activate", nickname]) + assert_received {:mix_shell, :info, [message]} + assert message == "Successfully activated #{nickname}" + + user = Repo.get(User, id) + assert user.is_active + end + + test "no user to activate" do + Mix.Tasks.Pleroma.User.run(["activate", "foo"]) + + assert_received {:mix_shell, :error, [message]} + assert message =~ "No user" + end + end + describe "search" do test "it returns users matching" do user = insert(:user) diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index 7e1e75404..90fef34bd 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -202,11 +202,11 @@ test "doesn't return already accepted or duplicate follow requests" do test "doesn't return follow requests for deactivated accounts" do locked = insert(:user, is_locked: true) - pending_follower = insert(:user, %{deactivated: true}) + pending_follower = insert(:user, %{is_active: false}) CommonAPI.follow(pending_follower, locked) - assert true == pending_follower.deactivated + refute pending_follower.is_active assert [] = User.get_follow_requests(locked) end @@ -275,7 +275,7 @@ test "follow takes a user and another user" do test "can't follow a deactivated users" do user = insert(:user) - followed = insert(:user, %{deactivated: true}) + followed = insert(:user, %{is_active: false}) {:error, _} = User.follow(user, followed) end @@ -1313,14 +1313,14 @@ test "has following" do end end - describe ".deactivate" do + describe ".set_activation" do test "can de-activate then re-activate a user" do user = insert(:user) - assert false == user.deactivated - {:ok, user} = User.deactivate(user) - assert true == user.deactivated - {:ok, user} = User.deactivate(user, false) - assert false == user.deactivated + assert user.is_active + {:ok, user} = User.set_activation(user, false) + refute user.is_active + {:ok, user} = User.set_activation(user, true) + assert user.is_active end test "hide a user from followers" do @@ -1328,7 +1328,7 @@ test "hide a user from followers" do user2 = insert(:user) {:ok, user, user2} = User.follow(user, user2) - {:ok, _user} = User.deactivate(user) + {:ok, _user} = User.set_activation(user, false) user2 = User.get_cached_by_id(user2.id) @@ -1344,7 +1344,7 @@ test "hide a user from friends" do assert user2.following_count == 1 assert User.following_count(user2) == 1 - {:ok, _user} = User.deactivate(user) + {:ok, _user} = User.set_activation(user, false) user2 = User.get_cached_by_id(user2.id) @@ -1374,7 +1374,7 @@ test "hide a user's statuses from timelines and notifications" do user: user2 }) - {:ok, _user} = User.deactivate(user) + {:ok, _user} = User.set_activation(user, false) assert [] == ActivityPub.fetch_public_activities(%{}) assert [] == Pleroma.Notification.for_user(user2) @@ -1544,7 +1544,7 @@ test "it deactivates a user, all follow relationships and all activities", %{use follower = User.get_cached_by_id(follower.id) refute User.following?(follower, user) - assert %{deactivated: true} = User.get_by_id(user.id) + assert %{is_active: false} = User.get_by_id(user.id) assert [] == User.get_follow_requests(locked_user) @@ -1606,7 +1606,7 @@ test "delete/1 purges a user when they wouldn't be fully deleted" do registration_reason: "ahhhhh", confirmation_token: "qqqq", domain_blocks: ["lain.com"], - deactivated: true, + is_active: false, ap_enabled: true, is_moderator: true, is_admin: true, @@ -1648,7 +1648,7 @@ test "delete/1 purges a user when they wouldn't be fully deleted" do registration_reason: nil, confirmation_token: nil, domain_blocks: [], - deactivated: true, + is_active: false, ap_enabled: false, is_moderator: false, is_admin: false, @@ -1734,7 +1734,7 @@ test "returns :password_reset_pending for user with reset password" do end test "returns :deactivated for deactivated user" do - user = insert(:user, local: true, is_confirmed: true, deactivated: true) + user = insert(:user, local: true, is_confirmed: true, is_active: false) assert User.account_status(user) == :deactivated end @@ -1885,7 +1885,7 @@ test "Users are inactive by default" do users = Enum.map(1..total, fn _ -> - insert(:user, last_digest_emailed_at: days_ago(20), deactivated: false) + insert(:user, last_digest_emailed_at: days_ago(20), is_active: true) end) inactive_users_ids = @@ -1903,7 +1903,7 @@ test "Only includes users who has no recent activity" do users = Enum.map(1..total, fn _ -> - insert(:user, last_digest_emailed_at: days_ago(20), deactivated: false) + insert(:user, last_digest_emailed_at: days_ago(20), is_active: true) end) {inactive, active} = Enum.split(users, trunc(total / 2)) @@ -1936,7 +1936,7 @@ test "Only includes users with no read notifications" do users = Enum.map(1..total, fn _ -> - insert(:user, last_digest_emailed_at: days_ago(20), deactivated: false) + insert(:user, last_digest_emailed_at: days_ago(20), is_active: true) end) [sender | recipients] = users @@ -2006,7 +2006,7 @@ test "it returns a list of AP ids for a given set of nicknames" do user1 = insert(:user, local: false, ap_id: "http://localhost:4001/users/masto_closed") user2 = insert(:user, local: false, ap_id: "http://localhost:4001/users/fuser2") insert(:user, local: true) - insert(:user, local: false, deactivated: true) + insert(:user, local: false, is_active: false) {:ok, user1: user1, user2: user2} end diff --git a/test/pleroma/web/activity_pub/side_effects/delete_test.exs b/test/pleroma/web/activity_pub/side_effects/delete_test.exs index 35ced375b..20f0d4b70 100644 --- a/test/pleroma/web/activity_pub/side_effects/delete_test.exs +++ b/test/pleroma/web/activity_pub/side_effects/delete_test.exs @@ -39,7 +39,7 @@ test "it handles user deletions", %{delete_user: delete, user: user} do {:ok, _delete, _} = SideEffects.handle(delete) ObanHelpers.perform_all() - assert User.get_cached_by_ap_id(user.ap_id).deactivated + refute User.get_cached_by_ap_id(user.ap_id).is_active end end diff --git a/test/pleroma/web/activity_pub/transmogrifier/chat_message_test.exs b/test/pleroma/web/activity_pub/transmogrifier/chat_message_test.exs index a2d64620d..958675835 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/chat_message_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/chat_message_test.exs @@ -134,7 +134,7 @@ test "it doesn't work for deactivated users" do ap_id: data["actor"], local: false, last_refreshed_at: DateTime.utc_now(), - deactivated: true + is_active: false ) _recipient = insert(:user, ap_id: List.first(data["to"]), local: true) diff --git a/test/pleroma/web/activity_pub/transmogrifier/delete_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/delete_handling_test.exs index 33132dff6..b7160bf58 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/delete_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/delete_handling_test.exs @@ -97,7 +97,7 @@ test "it works for incoming user deletes" do {:ok, _} = Transmogrifier.handle_incoming(data) ObanHelpers.perform_all() - assert User.get_cached_by_ap_id(ap_id).deactivated + refute User.get_cached_by_ap_id(ap_id).is_active end test "it fails for incoming user deletes with spoofed origin" do diff --git a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs index 108f27ef7..be99ad93d 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs @@ -154,7 +154,7 @@ test "it does not crash if the object in inReplyTo can't be fetched" do test "it does not work for deactivated users" do data = File.read!("test/fixtures/mastodon-post-activity.json") |> Jason.decode!() - insert(:user, ap_id: data["actor"], deactivated: true) + insert(:user, ap_id: data["actor"], is_active: false) assert {:error, _} = Transmogrifier.handle_incoming(data) end diff --git a/test/pleroma/web/admin_api/controllers/status_controller_test.exs b/test/pleroma/web/admin_api/controllers/status_controller_test.exs index 24e288c5f..3fdf23ba2 100644 --- a/test/pleroma/web/admin_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/admin_api/controllers/status_controller_test.exs @@ -47,7 +47,7 @@ test "shows activity", %{conn: conn} do assert account["id"] == actor.id assert account["nickname"] == actor.nickname - assert account["deactivated"] == actor.deactivated + assert account["is_active"] == actor.is_active assert account["is_confirmed"] == actor.is_confirmed end end diff --git a/test/pleroma/web/admin_api/controllers/user_controller_test.exs b/test/pleroma/web/admin_api/controllers/user_controller_test.exs index 7f37247a9..ef16dede3 100644 --- a/test/pleroma/web/admin_api/controllers/user_controller_test.exs +++ b/test/pleroma/web/admin_api/controllers/user_controller_test.exs @@ -169,7 +169,7 @@ test "single user", %{admin: admin, conn: conn} do assert user.note_count == 1 assert user.follower_count == 1 assert user.following_count == 1 - refute user.deactivated + assert user.is_active with_mock Pleroma.Web.Federator, publish: fn _ -> nil end, @@ -181,7 +181,7 @@ test "single user", %{admin: admin, conn: conn} do ObanHelpers.perform_all() - assert User.get_by_nickname(user.nickname).deactivated + refute User.get_by_nickname(user.nickname).is_active log_entry = Repo.one(ModerationLog) @@ -191,7 +191,7 @@ test "single user", %{admin: admin, conn: conn} do assert json_response(conn, 200) == [user.nickname] user = Repo.get(User, user.id) - assert user.deactivated + refute user.is_active assert user.avatar == %{} assert user.banner == %{} @@ -621,7 +621,7 @@ test "only local users with no query", %{conn: conn, admin: old_admin} do "roles" => %{"admin" => true, "moderator" => false} }), user_response(old_admin, %{ - "deactivated" => false, + "is_active" => true, "roles" => %{"admin" => true, "moderator" => false} }) ] @@ -694,11 +694,11 @@ test "load only admins", %{conn: conn, admin: admin} do users = [ user_response(admin, %{ - "deactivated" => false, + "is_active" => true, "roles" => %{"admin" => true, "moderator" => false} }), user_response(second_admin, %{ - "deactivated" => false, + "is_active" => true, "roles" => %{"admin" => true, "moderator" => false} }) ] @@ -723,7 +723,7 @@ test "load only moderators", %{conn: conn} do "page_size" => 50, "users" => [ user_response(moderator, %{ - "deactivated" => false, + "is_active" => true, "roles" => %{"admin" => false, "moderator" => true} }) ] @@ -839,10 +839,10 @@ test "`active` filters out users pending approval", %{token: token} do test "it works with multiple filters" do admin = insert(:user, nickname: "john", is_admin: true) token = insert(:oauth_admin_token, user: admin) - user = insert(:user, nickname: "bob", local: false, deactivated: true) + user = insert(:user, nickname: "bob", local: false, is_active: false) - insert(:user, nickname: "ken", local: true, deactivated: true) - insert(:user, nickname: "bobb", local: false, deactivated: false) + insert(:user, nickname: "ken", local: true, is_active: false) + insert(:user, nickname: "bobb", local: false, is_active: true) conn = build_conn() @@ -873,8 +873,8 @@ test "it omits relay user", %{admin: admin, conn: conn} do end test "PATCH /api/pleroma/admin/users/activate", %{admin: admin, conn: conn} do - user_one = insert(:user, deactivated: true) - user_two = insert(:user, deactivated: true) + user_one = insert(:user, is_active: false) + user_two = insert(:user, is_active: false) conn = patch( @@ -884,7 +884,7 @@ test "PATCH /api/pleroma/admin/users/activate", %{admin: admin, conn: conn} do ) response = json_response(conn, 200) - assert Enum.map(response["users"], & &1["deactivated"]) == [false, false] + assert Enum.map(response["users"], & &1["is_active"]) == [true, true] log_entry = Repo.one(ModerationLog) @@ -893,8 +893,8 @@ test "PATCH /api/pleroma/admin/users/activate", %{admin: admin, conn: conn} do end test "PATCH /api/pleroma/admin/users/deactivate", %{admin: admin, conn: conn} do - user_one = insert(:user, deactivated: false) - user_two = insert(:user, deactivated: false) + user_one = insert(:user, is_active: true) + user_two = insert(:user, is_active: true) conn = patch( @@ -904,7 +904,7 @@ test "PATCH /api/pleroma/admin/users/deactivate", %{admin: admin, conn: conn} do ) response = json_response(conn, 200) - assert Enum.map(response["users"], & &1["deactivated"]) == [true, true] + assert Enum.map(response["users"], & &1["is_active"]) == [false, false] log_entry = Repo.one(ModerationLog) @@ -940,7 +940,7 @@ test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admi assert json_response(conn, 200) == user_response( user, - %{"deactivated" => !user.deactivated} + %{"is_active" => !user.is_active} ) log_entry = Repo.one(ModerationLog) @@ -951,7 +951,7 @@ test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admi defp user_response(user, attrs \\ %{}) do %{ - "deactivated" => user.deactivated, + "is_active" => user.is_active, "id" => user.id, "email" => user.email, "nickname" => user.nickname, diff --git a/test/pleroma/web/admin_api/search_test.exs b/test/pleroma/web/admin_api/search_test.exs index 438ffa779..b8eeec65b 100644 --- a/test/pleroma/web/admin_api/search_test.exs +++ b/test/pleroma/web/admin_api/search_test.exs @@ -47,9 +47,9 @@ test "it returns local/external users" do end test "it returns active/deactivated users" do - insert(:user, deactivated: true) - insert(:user, deactivated: true) - insert(:user, deactivated: false) + insert(:user, is_active: false) + insert(:user, is_active: false) + insert(:user, is_active: true) {:ok, _results, active_count} = Search.user(%{ @@ -70,7 +70,7 @@ test "it returns active/deactivated users" do test "it returns specific user" do insert(:user) insert(:user) - user = insert(:user, nickname: "bob", local: true, deactivated: false) + user = insert(:user, nickname: "bob", local: true, is_active: true) {:ok, _results, total_count} = Search.user(%{query: ""}) diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index 7067f1b59..c996766ea 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -518,7 +518,7 @@ test "it adds an emoji on an external site" do end test "deactivated users can't post" do - user = insert(:user, deactivated: true) + user = insert(:user, is_active: false) assert {:error, _} = CommonAPI.post(user, %{status: "ye"}) end diff --git a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs index 2f5bfda98..1276597a4 100644 --- a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs @@ -126,7 +126,7 @@ test "returns 404 for internal.fetch actor", %{conn: conn} do end test "returns 404 for deactivated user", %{conn: conn} do - user = insert(:user, deactivated: true) + user = insert(:user, is_active: false) assert %{"error" => "Can't find user"} = conn @@ -256,7 +256,7 @@ test "works with announces that are just addressed to public", %{conn: conn} do end test "deactivated user", %{conn: conn} do - user = insert(:user, deactivated: true) + user = insert(:user, is_active: false) assert %{"error" => "Can't find user"} == conn diff --git a/test/pleroma/web/mastodon_api/controllers/auth_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/auth_controller_test.exs index 27c0fceff..1872dfd59 100644 --- a/test/pleroma/web/mastodon_api/controllers/auth_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/auth_controller_test.exs @@ -136,7 +136,7 @@ test "it returns 204 when user is not local", %{conn: conn, user: user} do end test "it returns 204 when user is deactivated", %{conn: conn, user: user} do - {:ok, user} = Repo.update(Ecto.Changeset.change(user, deactivated: true, local: true)) + {:ok, user} = Repo.update(Ecto.Changeset.change(user, is_active: false, local: true)) conn = post(conn, "/auth/password?email=#{user.email}") assert empty_json_response(conn) diff --git a/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs index 1d0f86e87..0d4eebb73 100644 --- a/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs @@ -57,7 +57,7 @@ test "get instance stats", %{conn: conn} do user = insert(:user, %{local: true}) user2 = insert(:user, %{local: true}) - {:ok, _user2} = User.deactivate(user2, !user2.deactivated) + {:ok, _user2} = User.set_activation(user2, false) insert(:user, %{local: false, nickname: "u@peer1.com"}) insert(:user, %{local: false, nickname: "u@peer2.com"}) diff --git a/test/pleroma/web/mastodon_api/mastodon_api_test.exs b/test/pleroma/web/mastodon_api/mastodon_api_test.exs index f14330908..402bfd76f 100644 --- a/test/pleroma/web/mastodon_api/mastodon_api_test.exs +++ b/test/pleroma/web/mastodon_api/mastodon_api_test.exs @@ -16,7 +16,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPITest do describe "follow/3" do test "returns error when followed user is deactivated" do follower = insert(:user) - user = insert(:user, local: true, deactivated: true) + user = insert(:user, local: true, is_active: false) assert {:error, _error} = MastodonAPI.follow(follower, user) end diff --git a/test/pleroma/web/mastodon_api/views/account_view_test.exs b/test/pleroma/web/mastodon_api/views/account_view_test.exs index f4e6c161e..6de5dc859 100644 --- a/test/pleroma/web/mastodon_api/views/account_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/account_view_test.exs @@ -211,7 +211,7 @@ test "Represent a Funkwhale channel" do test "Represent a deactivated user for an admin" do admin = insert(:user, is_admin: true) - deactivated_user = insert(:user, deactivated: true) + deactivated_user = insert(:user, is_active: false) represented = AccountView.render("show.json", %{user: deactivated_user, for: admin}) assert represented[:pleroma][:deactivated] == true end diff --git a/test/pleroma/web/mongoose_im_controller_test.exs b/test/pleroma/web/mongoose_im_controller_test.exs index a7225d45c..43c4dfa33 100644 --- a/test/pleroma/web/mongoose_im_controller_test.exs +++ b/test/pleroma/web/mongoose_im_controller_test.exs @@ -9,7 +9,7 @@ defmodule Pleroma.Web.MongooseIMControllerTest do test "/user_exists", %{conn: conn} do _user = insert(:user, nickname: "lain") _remote_user = insert(:user, nickname: "alice", local: false) - _deactivated_user = insert(:user, nickname: "konata", deactivated: true) + _deactivated_user = insert(:user, nickname: "konata", is_active: false) res = conn @@ -46,7 +46,7 @@ test "/check_password", %{conn: conn} do _deactivated_user = insert(:user, nickname: "konata", - deactivated: true, + is_active: false, password_hash: Pleroma.Password.Pbkdf2.hash_pwd_salt("cool") ) diff --git a/test/pleroma/web/o_auth/o_auth_controller_test.exs b/test/pleroma/web/o_auth/o_auth_controller_test.exs index 64ee11890..9c7c57d48 100644 --- a/test/pleroma/web/o_auth/o_auth_controller_test.exs +++ b/test/pleroma/web/o_auth/o_auth_controller_test.exs @@ -956,7 +956,7 @@ test "rejects token exchange for valid credentials belonging to deactivated user user = insert(:user, password_hash: Pleroma.Password.Pbkdf2.hash_pwd_salt(password), - deactivated: true + is_active: false ) app = insert(:oauth_app) diff --git a/test/pleroma/web/plugs/user_enabled_plug_test.exs b/test/pleroma/web/plugs/user_enabled_plug_test.exs index 6d0f4fb7d..71822305b 100644 --- a/test/pleroma/web/plugs/user_enabled_plug_test.exs +++ b/test/pleroma/web/plugs/user_enabled_plug_test.exs @@ -33,7 +33,7 @@ test "with a user that's not confirmed and a config requiring confirmation, it r end test "with a user that is deactivated, it removes that user", %{conn: conn} do - user = insert(:user, deactivated: true) + user = insert(:user, is_active: false) conn = conn diff --git a/test/pleroma/web/twitter_api/remote_follow_controller_test.exs b/test/pleroma/web/twitter_api/remote_follow_controller_test.exs index 51db2fe5e..f9d9e0525 100644 --- a/test/pleroma/web/twitter_api/remote_follow_controller_test.exs +++ b/test/pleroma/web/twitter_api/remote_follow_controller_test.exs @@ -141,7 +141,7 @@ test "follows user", %{conn: conn} do end test "returns error when user is deactivated", %{conn: conn} do - user = insert(:user, deactivated: true) + user = insert(:user, is_active: false) user2 = insert(:user) response = diff --git a/test/pleroma/web/twitter_api/util_controller_test.exs b/test/pleroma/web/twitter_api/util_controller_test.exs index 6d007ab66..283c61678 100644 --- a/test/pleroma/web/twitter_api/util_controller_test.exs +++ b/test/pleroma/web/twitter_api/util_controller_test.exs @@ -164,7 +164,7 @@ test "with valid permissions and password, it disables the account", %{conn: con user = User.get_cached_by_id(user.id) - assert user.deactivated == true + refute user.is_active end test "with valid permissions and invalid password, it returns an error", %{conn: conn} do @@ -178,7 +178,7 @@ test "with valid permissions and invalid password, it returns an error", %{conn: assert response == %{"error" => "Invalid password."} user = User.get_cached_by_id(user.id) - refute user.deactivated + assert user.is_active end end @@ -428,7 +428,7 @@ test "with proper permissions and valid password", %{conn: conn, user: user} do assert json_response(conn, 200) == %{"status" => "success"} user = User.get_by_id(user.id) - assert user.deactivated == true + refute user.is_active assert user.name == nil assert user.bio == "" assert user.password_hash == nil