diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 8649bdf11b..4344b23a8d 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -7,12 +7,12 @@ */ return array( 'names' => array( - 'conpherence.pkg.css' => '0b64e988', + 'conpherence.pkg.css' => 'e25569a9', 'conpherence.pkg.js' => '6249a1cf', - 'core.pkg.css' => 'e75e4f9d', + 'core.pkg.css' => 'ea0e9c0c', 'core.pkg.js' => '2291d3b2', 'darkconsole.pkg.js' => 'e7393ebb', - 'differential.pkg.css' => '9535a7e6', + 'differential.pkg.css' => '4815647b', 'differential.pkg.js' => 'ddfeb49b', 'diffusion.pkg.css' => '91c5d3a6', 'diffusion.pkg.js' => '84c8f8fd', @@ -47,7 +47,7 @@ return array( 'rsrc/css/application/config/setup-issue.css' => 'f794cfc3', 'rsrc/css/application/config/unhandled-exception.css' => '4c96257a', 'rsrc/css/application/conpherence/durable-column.css' => 'd82e130c', - 'rsrc/css/application/conpherence/header-pane.css' => '1c81cda6', + 'rsrc/css/application/conpherence/header-pane.css' => 'db93ebc6', 'rsrc/css/application/conpherence/menu.css' => '4f51db5a', 'rsrc/css/application/conpherence/message-pane.css' => 'b085d40d', 'rsrc/css/application/conpherence/notification.css' => '965db05b', @@ -59,9 +59,9 @@ return array( 'rsrc/css/application/dashboard/dashboard.css' => 'bc6f2127', 'rsrc/css/application/diff/inline-comment-summary.css' => '51efda3a', 'rsrc/css/application/differential/add-comment.css' => 'c47f8c40', - 'rsrc/css/application/differential/changeset-view.css' => 'e1621fd5', + 'rsrc/css/application/differential/changeset-view.css' => '6a9bdf9c', 'rsrc/css/application/differential/core.css' => '5b7b8ff4', - 'rsrc/css/application/differential/phui-inline-comment.css' => '5953c28e', + 'rsrc/css/application/differential/phui-inline-comment.css' => 'be663c95', 'rsrc/css/application/differential/revision-comment.css' => '14b8565a', 'rsrc/css/application/differential/revision-history.css' => '0e8eb855', 'rsrc/css/application/differential/revision-list.css' => 'f3c47d33', @@ -83,7 +83,7 @@ return array( 'rsrc/css/application/owners/owners-path-editor.css' => '2f00933b', 'rsrc/css/application/paste/paste.css' => '1898e534', 'rsrc/css/application/people/people-profile.css' => '2473d929', - 'rsrc/css/application/phame/phame.css' => 'aeb61182', + 'rsrc/css/application/phame/phame.css' => '53fa6236', 'rsrc/css/application/pholio/pholio-edit.css' => '07676f51', 'rsrc/css/application/pholio/pholio-inline-comments.css' => '8e545e49', 'rsrc/css/application/pholio/pholio.css' => 'ca89d380', @@ -96,8 +96,8 @@ return array( 'rsrc/css/application/policy/policy-transaction-detail.css' => '82100a43', 'rsrc/css/application/policy/policy.css' => '957ea14c', 'rsrc/css/application/ponder/ponder-view.css' => 'fbd45f96', - 'rsrc/css/application/project/project-card-view.css' => 'd27c67ae', - 'rsrc/css/application/project/project-view.css' => '1e6f7072', + 'rsrc/css/application/project/project-card-view.css' => 'f25746f5', + 'rsrc/css/application/project/project-view.css' => '6936dc6e', 'rsrc/css/application/releeph/releeph-core.css' => '9b3c5733', 'rsrc/css/application/releeph/releeph-preview-branch.css' => 'b7a6f4a5', 'rsrc/css/application/releeph/releeph-request-differential-create-dialog.css' => '8d8b92cd', @@ -107,7 +107,7 @@ return array( 'rsrc/css/application/slowvote/slowvote.css' => 'a94b7230', 'rsrc/css/application/tokens/tokens.css' => '3d0f239e', 'rsrc/css/application/uiexample/example.css' => '528b19de', - 'rsrc/css/core/core.css' => 'd0801452', + 'rsrc/css/core/core.css' => '50dd5fa6', 'rsrc/css/core/remarkup.css' => '4a2de2bb', 'rsrc/css/core/syntax.css' => '769d3498', 'rsrc/css/core/z-index.css' => '5e72c4e0', @@ -134,7 +134,7 @@ return array( 'rsrc/css/phui/phui-basic-nav-view.css' => '7093573b', 'rsrc/css/phui/phui-big-info-view.css' => 'bd903741', 'rsrc/css/phui/phui-box.css' => '33b629f8', - 'rsrc/css/phui/phui-button.css' => '9718cb0c', + 'rsrc/css/phui/phui-button.css' => '00ddac15', 'rsrc/css/phui/phui-chart.css' => '6bf6f78e', 'rsrc/css/phui/phui-cms.css' => 'be43c8a8', 'rsrc/css/phui/phui-comment-form.css' => '48fbd65d', @@ -145,11 +145,11 @@ return array( 'rsrc/css/phui/phui-document-summary.css' => '9ca48bdf', 'rsrc/css/phui/phui-document.css' => 'c32e8dec', 'rsrc/css/phui/phui-feed-story.css' => '44a9c8e9', - 'rsrc/css/phui/phui-fontkit.css' => '9cda225e', + 'rsrc/css/phui/phui-fontkit.css' => '0b2da2d5', 'rsrc/css/phui/phui-form-view.css' => 'adca31ce', - 'rsrc/css/phui/phui-form.css' => '2342b0e5', + 'rsrc/css/phui/phui-form.css' => '5815af7b', 'rsrc/css/phui/phui-head-thing.css' => 'fd311e5f', - 'rsrc/css/phui/phui-header-view.css' => '6ec8f155', + 'rsrc/css/phui/phui-header-view.css' => '92935c02', 'rsrc/css/phui/phui-hovercard.css' => 'e904f5dc', 'rsrc/css/phui/phui-icon-set-selector.css' => '1ab67aad', 'rsrc/css/phui/phui-icon.css' => '09f46dd9', @@ -159,7 +159,7 @@ return array( 'rsrc/css/phui/phui-invisible-character-view.css' => '6993d9f0', 'rsrc/css/phui/phui-lightbox.css' => '0a035e40', 'rsrc/css/phui/phui-list.css' => '9da2aa00', - 'rsrc/css/phui/phui-object-box.css' => '6b487c57', + 'rsrc/css/phui/phui-object-box.css' => '8b289e3d', 'rsrc/css/phui/phui-pager.css' => 'bea33d23', 'rsrc/css/phui/phui-pinboard-view.css' => '2495140e', 'rsrc/css/phui/phui-profile-menu.css' => 'c71ecdcd', @@ -170,7 +170,7 @@ return array( 'rsrc/css/phui/phui-status.css' => 'd5263e49', 'rsrc/css/phui/phui-tag-view.css' => '84d65f26', 'rsrc/css/phui/phui-timeline-view.css' => 'bc523970', - 'rsrc/css/phui/phui-two-column-view.css' => 'a0d3858a', + 'rsrc/css/phui/phui-two-column-view.css' => 'f63cad3c', 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'b60ef38a', 'rsrc/css/phui/workboards/phui-workboard.css' => 'c88912ee', 'rsrc/css/phui/workboards/phui-workcard.css' => 'cca5fa92', @@ -439,7 +439,7 @@ return array( 'rsrc/js/application/phortune/phortune-credit-card-form.js' => '2290aeef', 'rsrc/js/application/policy/behavior-policy-control.js' => 'd0c516d5', 'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '5e9f347c', - 'rsrc/js/application/projects/WorkboardBoard.js' => 'fe7cb52a', + 'rsrc/js/application/projects/WorkboardBoard.js' => '8935deef', 'rsrc/js/application/projects/WorkboardCard.js' => 'c587b80f', 'rsrc/js/application/projects/WorkboardColumn.js' => '21df4ff5', 'rsrc/js/application/projects/WorkboardController.js' => '55baf5ed', @@ -540,7 +540,7 @@ return array( 'rsrc/js/phui/behavior-phui-tab-group.js' => '0a0b10e9', 'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8', 'rsrc/js/phuix/PHUIXActionView.js' => 'b3465b9b', - 'rsrc/js/phuix/PHUIXAutocomplete.js' => '6d86ce8b', + 'rsrc/js/phuix/PHUIXAutocomplete.js' => '7c492cd2', 'rsrc/js/phuix/PHUIXDropdownMenu.js' => '8018ee50', 'rsrc/js/phuix/PHUIXFormControl.js' => 'bbece68d', 'rsrc/js/phuix/PHUIXIconView.js' => 'bff6884b', @@ -565,7 +565,7 @@ return array( 'config-options-css' => '0ede4c9b', 'config-page-css' => 'c1d5121b', 'conpherence-durable-column-view' => 'd82e130c', - 'conpherence-header-pane-css' => '1c81cda6', + 'conpherence-header-pane-css' => 'db93ebc6', 'conpherence-menu-css' => '4f51db5a', 'conpherence-message-pane-css' => 'b085d40d', 'conpherence-notification-css' => '965db05b', @@ -573,7 +573,7 @@ return array( 'conpherence-thread-manager' => 'c8b5ee6f', 'conpherence-transaction-css' => '85129c68', 'd3' => 'a11a5ff2', - 'differential-changeset-view-css' => 'e1621fd5', + 'differential-changeset-view-css' => '6a9bdf9c', 'differential-core-view-css' => '5b7b8ff4', 'differential-inline-comment-editor' => '2e3f9738', 'differential-revision-add-comment-css' => 'c47f8c40', @@ -765,7 +765,7 @@ return array( 'javelin-view-renderer' => '6c2b09a2', 'javelin-view-visitor' => 'efe49472', 'javelin-websocket' => 'e292eaf4', - 'javelin-workboard-board' => 'fe7cb52a', + 'javelin-workboard-board' => '8935deef', 'javelin-workboard-card' => 'c587b80f', 'javelin-workboard-column' => '21df4ff5', 'javelin-workboard-controller' => '55baf5ed', @@ -785,7 +785,7 @@ return array( 'phabricator-busy' => '59a7976a', 'phabricator-chatlog-css' => 'd295b020', 'phabricator-content-source-view-css' => '4b8b05d4', - 'phabricator-core-css' => 'd0801452', + 'phabricator-core-css' => '50dd5fa6', 'phabricator-countdown-css' => '16c52f5c', 'phabricator-dashboard-css' => 'bc6f2127', 'phabricator-drag-and-drop-file-upload' => '58dea2fa', @@ -827,7 +827,7 @@ return array( 'phabricator-uiexample-reactor-sendclass' => '1def2711', 'phabricator-uiexample-reactor-sendproperties' => 'b1f0ccee', 'phabricator-zindex-css' => '5e72c4e0', - 'phame-css' => 'aeb61182', + 'phame-css' => '53fa6236', 'pholio-css' => 'ca89d380', 'pholio-edit-css' => '07676f51', 'pholio-inline-comments-css' => '8e545e49', @@ -842,7 +842,7 @@ return array( 'phui-basic-nav-view-css' => '7093573b', 'phui-big-info-view-css' => 'bd903741', 'phui-box-css' => '33b629f8', - 'phui-button-css' => '9718cb0c', + 'phui-button-css' => '00ddac15', 'phui-calendar-css' => '477acfaa', 'phui-calendar-day-css' => '572b1893', 'phui-calendar-list-css' => 'fcc9fb41', @@ -858,11 +858,11 @@ return array( 'phui-document-view-pro-css' => 'f56738ed', 'phui-feed-story-css' => '44a9c8e9', 'phui-font-icon-base-css' => '870a7360', - 'phui-fontkit-css' => '9cda225e', - 'phui-form-css' => '2342b0e5', + 'phui-fontkit-css' => '0b2da2d5', + 'phui-form-css' => '5815af7b', 'phui-form-view-css' => 'adca31ce', 'phui-head-thing-view-css' => 'fd311e5f', - 'phui-header-view-css' => '6ec8f155', + 'phui-header-view-css' => '92935c02', 'phui-hovercard' => '1bd28176', 'phui-hovercard-view-css' => 'e904f5dc', 'phui-icon-set-selector-css' => '1ab67aad', @@ -870,11 +870,11 @@ return array( 'phui-image-mask-css' => 'a8498f9c', 'phui-info-panel-css' => '27ea50a1', 'phui-info-view-css' => 'ec92802a', - 'phui-inline-comment-view-css' => '5953c28e', + 'phui-inline-comment-view-css' => 'be663c95', 'phui-invisible-character-view-css' => '6993d9f0', 'phui-lightbox-css' => '0a035e40', 'phui-list-view-css' => '9da2aa00', - 'phui-object-box-css' => '6b487c57', + 'phui-object-box-css' => '8b289e3d', 'phui-oi-big-ui-css' => '19f9369b', 'phui-oi-color-css' => 'cd2b9b77', 'phui-oi-drag-ui-css' => 'f12cbc9f', @@ -892,14 +892,14 @@ return array( 'phui-tag-view-css' => '84d65f26', 'phui-theme-css' => '798c69b8', 'phui-timeline-view-css' => 'bc523970', - 'phui-two-column-view-css' => 'a0d3858a', + 'phui-two-column-view-css' => 'f63cad3c', 'phui-workboard-color-css' => 'b60ef38a', 'phui-workboard-view-css' => 'c88912ee', 'phui-workcard-view-css' => 'cca5fa92', 'phui-workpanel-view-css' => 'a3a63478', 'phuix-action-list-view' => 'b5c256b8', 'phuix-action-view' => 'b3465b9b', - 'phuix-autocomplete' => '6d86ce8b', + 'phuix-autocomplete' => '7c492cd2', 'phuix-dropdown-menu' => '8018ee50', 'phuix-form-control-view' => 'bbece68d', 'phuix-icon-view' => 'bff6884b', @@ -907,8 +907,8 @@ return array( 'policy-edit-css' => '815c66f7', 'policy-transaction-detail-css' => '82100a43', 'ponder-view-css' => 'fbd45f96', - 'project-card-view-css' => 'd27c67ae', - 'project-view-css' => '1e6f7072', + 'project-card-view-css' => 'f25746f5', + 'project-view-css' => '6936dc6e', 'releeph-core' => '9b3c5733', 'releeph-preview-branch' => 'b7a6f4a5', 'releeph-request-differential-create-dialog' => '8d8b92cd', @@ -1396,6 +1396,9 @@ return array( '69adf288' => array( 'javelin-install', ), + '6a9bdf9c' => array( + 'phui-inline-comment-view-css', + ), '6ad39b6f' => array( 'javelin-install', 'javelin-event', @@ -1420,12 +1423,6 @@ return array( 'javelin-typeahead', 'javelin-uri', ), - '6d86ce8b' => array( - 'javelin-install', - 'javelin-dom', - 'phuix-icon-view', - 'phabricator-prefab', - ), '70baed2f' => array( 'javelin-install', 'javelin-dom', @@ -1493,6 +1490,12 @@ return array( 'owners-path-editor', 'javelin-behavior', ), + '7c492cd2' => array( + 'javelin-install', + 'javelin-dom', + 'phuix-icon-view', + 'phabricator-prefab', + ), '7cbe244b' => array( 'javelin-install', 'javelin-util', @@ -1570,6 +1573,15 @@ return array( 'javelin-stratcom', 'javelin-dom', ), + '8935deef' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-workflow', + 'phabricator-draggable-list', + 'javelin-workboard-column', + ), '8a41885b' => array( 'javelin-install', 'javelin-dom', @@ -2085,9 +2097,6 @@ return array( 'javelin-request', 'javelin-util', ), - 'e1621fd5' => array( - 'phui-inline-comment-view-css', - ), 'e1d25dfb' => array( 'javelin-behavior', 'javelin-stratcom', @@ -2249,15 +2258,6 @@ return array( 'javelin-view-visitor', 'javelin-util', ), - 'fe7cb52a' => array( - 'javelin-install', - 'javelin-dom', - 'javelin-util', - 'javelin-stratcom', - 'javelin-workflow', - 'phabricator-draggable-list', - 'javelin-workboard-column', - ), 'fea0eb47' => array( 'javelin-install', ), diff --git a/resources/emoji/manifest.json b/resources/emoji/manifest.json new file mode 100644 index 0000000000..2d8388d277 --- /dev/null +++ b/resources/emoji/manifest.json @@ -0,0 +1,1626 @@ +{ + "8ball": "\ud83c\udfb1", + "a": "\ud83c\udd70", + "ab": "\ud83c\udd8e", + "abc": "\ud83d\udd24", + "abcd": "\ud83d\udd21", + "accept": "\ud83c\ude51", + "aerial_tramway": "\ud83d\udea1", + "airplane": "\u2708", + "airplane_arriving": "\ud83d\udeec", + "airplane_departure": "\ud83d\udeeb", + "airplane_small": "\ud83d\udee9", + "alarm_clock": "\u23f0", + "alembic": "\u2697", + "alien": "\ud83d\udc7d", + "ambulance": "\ud83d\ude91", + "amphora": "\ud83c\udffa", + "anchor": "\u2693", + "angel": "\ud83d\udc7c", + "angel_tone1": "\ud83d\udc7c\ud83c\udffb", + "angel_tone2": "\ud83d\udc7c\ud83c\udffc", + "angel_tone3": "\ud83d\udc7c\ud83c\udffd", + "angel_tone4": "\ud83d\udc7c\ud83c\udffe", + "angel_tone5": "\ud83d\udc7c\ud83c\udfff", + "anger": "\ud83d\udca2", + "anger_right": "\ud83d\uddef", + "angry": "\ud83d\ude20", + "anguished": "\ud83d\ude27", + "ant": "\ud83d\udc1c", + "apple": "\ud83c\udf4e", + "aquarius": "\u2652", + "aries": "\u2648", + "arrow_backward": "\u25c0", + "arrow_double_down": "\u23ec", + "arrow_double_up": "\u23eb", + "arrow_down": "\u2b07", + "arrow_down_small": "\ud83d\udd3d", + "arrow_forward": "\u25b6", + "arrow_heading_down": "\u2935", + "arrow_heading_up": "\u2934", + "arrow_left": "\u2b05", + "arrow_lower_left": "\u2199", + "arrow_lower_right": "\u2198", + "arrow_right": "\u27a1", + "arrow_right_hook": "\u21aa", + "arrow_up": "\u2b06", + "arrow_up_down": "\u2195", + "arrow_up_small": "\ud83d\udd3c", + "arrow_upper_left": "\u2196", + "arrow_upper_right": "\u2197", + "arrows_clockwise": "\ud83d\udd03", + "arrows_counterclockwise": "\ud83d\udd04", + "art": "\ud83c\udfa8", + "articulated_lorry": "\ud83d\ude9b", + "asterisk": "*\u20e3", + "astonished": "\ud83d\ude32", + "athletic_shoe": "\ud83d\udc5f", + "atm": "\ud83c\udfe7", + "atom": "\u269b", + "b": "\ud83c\udd71", + "baby": "\ud83d\udc76", + "baby_bottle": "\ud83c\udf7c", + "baby_chick": "\ud83d\udc24", + "baby_symbol": "\ud83d\udebc", + "baby_tone1": "\ud83d\udc76\ud83c\udffb", + "baby_tone2": "\ud83d\udc76\ud83c\udffc", + "baby_tone3": "\ud83d\udc76\ud83c\udffd", + "baby_tone4": "\ud83d\udc76\ud83c\udffe", + "baby_tone5": "\ud83d\udc76\ud83c\udfff", + "back": "\ud83d\udd19", + "badminton": "\ud83c\udff8", + "baggage_claim": "\ud83d\udec4", + "balloon": "\ud83c\udf88", + "ballot_box": "\ud83d\uddf3", + "ballot_box_with_check": "\u2611", + "bamboo": "\ud83c\udf8d", + "banana": "\ud83c\udf4c", + "bangbang": "\u203c", + "bank": "\ud83c\udfe6", + "bar_chart": "\ud83d\udcca", + "barber": "\ud83d\udc88", + "baseball": "\u26be", + "basketball": "\ud83c\udfc0", + "basketball_player": "\u26f9", + "basketball_player_tone1": "\u26f9\ud83c\udffb", + "basketball_player_tone2": "\u26f9\ud83c\udffc", + "basketball_player_tone3": "\u26f9\ud83c\udffd", + "basketball_player_tone4": "\u26f9\ud83c\udffe", + "basketball_player_tone5": "\u26f9\ud83c\udfff", + "bath": "\ud83d\udec0", + "bath_tone1": "\ud83d\udec0\ud83c\udffb", + "bath_tone2": "\ud83d\udec0\ud83c\udffc", + "bath_tone3": "\ud83d\udec0\ud83c\udffd", + "bath_tone4": "\ud83d\udec0\ud83c\udffe", + "bath_tone5": "\ud83d\udec0\ud83c\udfff", + "bathtub": "\ud83d\udec1", + "battery": "\ud83d\udd0b", + "beach": "\ud83c\udfd6", + "beach_umbrella": "\u26f1", + "bear": "\ud83d\udc3b", + "bed": "\ud83d\udecf", + "bee": "\ud83d\udc1d", + "beer": "\ud83c\udf7a", + "beers": "\ud83c\udf7b", + "beetle": "\ud83d\udc1e", + "beginner": "\ud83d\udd30", + "bell": "\ud83d\udd14", + "bellhop": "\ud83d\udece", + "bento": "\ud83c\udf71", + "bicyclist": "\ud83d\udeb4", + "bicyclist_tone1": "\ud83d\udeb4\ud83c\udffb", + "bicyclist_tone2": "\ud83d\udeb4\ud83c\udffc", + "bicyclist_tone3": "\ud83d\udeb4\ud83c\udffd", + "bicyclist_tone4": "\ud83d\udeb4\ud83c\udffe", + "bicyclist_tone5": "\ud83d\udeb4\ud83c\udfff", + "bike": "\ud83d\udeb2", + "bikini": "\ud83d\udc59", + "biohazard": "\u2623", + "bird": "\ud83d\udc26", + "birthday": "\ud83c\udf82", + "black_circle": "\u26ab", + "black_joker": "\ud83c\udccf", + "black_large_square": "\u2b1b", + "black_medium_small_square": "\u25fe", + "black_medium_square": "\u25fc", + "black_nib": "\u2712", + "black_small_square": "\u25aa", + "black_square_button": "\ud83d\udd32", + "blossom": "\ud83c\udf3c", + "blowfish": "\ud83d\udc21", + "blue_book": "\ud83d\udcd8", + "blue_car": "\ud83d\ude99", + "blue_heart": "\ud83d\udc99", + "blush": "\ud83d\ude0a", + "boar": "\ud83d\udc17", + "bomb": "\ud83d\udca3", + "book": "\ud83d\udcd6", + "bookmark": "\ud83d\udd16", + "bookmark_tabs": "\ud83d\udcd1", + "books": "\ud83d\udcda", + "boom": "\ud83d\udca5", + "boot": "\ud83d\udc62", + "bouquet": "\ud83d\udc90", + "bow": "\ud83d\ude47", + "bow_and_arrow": "\ud83c\udff9", + "bow_tone1": "\ud83d\ude47\ud83c\udffb", + "bow_tone2": "\ud83d\ude47\ud83c\udffc", + "bow_tone3": "\ud83d\ude47\ud83c\udffd", + "bow_tone4": "\ud83d\ude47\ud83c\udffe", + "bow_tone5": "\ud83d\ude47\ud83c\udfff", + "bowling": "\ud83c\udfb3", + "boy": "\ud83d\udc66", + "boy_tone1": "\ud83d\udc66\ud83c\udffb", + "boy_tone2": "\ud83d\udc66\ud83c\udffc", + "boy_tone3": "\ud83d\udc66\ud83c\udffd", + "boy_tone4": "\ud83d\udc66\ud83c\udffe", + "boy_tone5": "\ud83d\udc66\ud83c\udfff", + "bread": "\ud83c\udf5e", + "bride_with_veil": "\ud83d\udc70", + "bride_with_veil_tone1": "\ud83d\udc70\ud83c\udffb", + "bride_with_veil_tone2": "\ud83d\udc70\ud83c\udffc", + "bride_with_veil_tone3": "\ud83d\udc70\ud83c\udffd", + "bride_with_veil_tone4": "\ud83d\udc70\ud83c\udffe", + "bride_with_veil_tone5": "\ud83d\udc70\ud83c\udfff", + "bridge_at_night": "\ud83c\udf09", + "briefcase": "\ud83d\udcbc", + "broken_heart": "\ud83d\udc94", + "bug": "\ud83d\udc1b", + "bulb": "\ud83d\udca1", + "bullettrain_front": "\ud83d\ude85", + "bullettrain_side": "\ud83d\ude84", + "burrito": "\ud83c\udf2f", + "bus": "\ud83d\ude8c", + "busstop": "\ud83d\ude8f", + "bust_in_silhouette": "\ud83d\udc64", + "busts_in_silhouette": "\ud83d\udc65", + "cactus": "\ud83c\udf35", + "cake": "\ud83c\udf70", + "calendar": "\ud83d\udcc6", + "calendar_spiral": "\ud83d\uddd3", + "calling": "\ud83d\udcf2", + "camel": "\ud83d\udc2b", + "camera": "\ud83d\udcf7", + "camera_with_flash": "\ud83d\udcf8", + "camping": "\ud83c\udfd5", + "cancer": "\u264b", + "candle": "\ud83d\udd6f", + "candy": "\ud83c\udf6c", + "capital_abcd": "\ud83d\udd20", + "capricorn": "\u2651", + "card_box": "\ud83d\uddc3", + "card_index": "\ud83d\udcc7", + "carousel_horse": "\ud83c\udfa0", + "cat": "\ud83d\udc31", + "cat2": "\ud83d\udc08", + "cd": "\ud83d\udcbf", + "chains": "\u26d3", + "champagne": "\ud83c\udf7e", + "chart": "\ud83d\udcb9", + "chart_with_downwards_trend": "\ud83d\udcc9", + "chart_with_upwards_trend": "\ud83d\udcc8", + "checkered_flag": "\ud83c\udfc1", + "cheese": "\ud83e\uddc0", + "cherries": "\ud83c\udf52", + "cherry_blossom": "\ud83c\udf38", + "chestnut": "\ud83c\udf30", + "chicken": "\ud83d\udc14", + "children_crossing": "\ud83d\udeb8", + "chipmunk": "\ud83d\udc3f", + "chocolate_bar": "\ud83c\udf6b", + "christmas_tree": "\ud83c\udf84", + "church": "\u26ea", + "cinema": "\ud83c\udfa6", + "circus_tent": "\ud83c\udfaa", + "city_dusk": "\ud83c\udf06", + "city_sunset": "\ud83c\udf07", + "cityscape": "\ud83c\udfd9", + "cl": "\ud83c\udd91", + "clap": "\ud83d\udc4f", + "clap_tone1": "\ud83d\udc4f\ud83c\udffb", + "clap_tone2": "\ud83d\udc4f\ud83c\udffc", + "clap_tone3": "\ud83d\udc4f\ud83c\udffd", + "clap_tone4": "\ud83d\udc4f\ud83c\udffe", + "clap_tone5": "\ud83d\udc4f\ud83c\udfff", + "clapper": "\ud83c\udfac", + "classical_building": "\ud83c\udfdb", + "clipboard": "\ud83d\udccb", + "clock": "\ud83d\udd70", + "clock1": "\ud83d\udd50", + "clock10": "\ud83d\udd59", + "clock1030": "\ud83d\udd65", + "clock11": "\ud83d\udd5a", + "clock1130": "\ud83d\udd66", + "clock12": "\ud83d\udd5b", + "clock1230": "\ud83d\udd67", + "clock130": "\ud83d\udd5c", + "clock2": "\ud83d\udd51", + "clock230": "\ud83d\udd5d", + "clock3": "\ud83d\udd52", + "clock330": "\ud83d\udd5e", + "clock4": "\ud83d\udd53", + "clock430": "\ud83d\udd5f", + "clock5": "\ud83d\udd54", + "clock530": "\ud83d\udd60", + "clock6": "\ud83d\udd55", + "clock630": "\ud83d\udd61", + "clock7": "\ud83d\udd56", + "clock730": "\ud83d\udd62", + "clock8": "\ud83d\udd57", + "clock830": "\ud83d\udd63", + "clock9": "\ud83d\udd58", + "clock930": "\ud83d\udd64", + "closed_book": "\ud83d\udcd5", + "closed_lock_with_key": "\ud83d\udd10", + "closed_umbrella": "\ud83c\udf02", + "cloud": "\u2601", + "cloud_lightning": "\ud83c\udf29", + "cloud_rain": "\ud83c\udf27", + "cloud_snow": "\ud83c\udf28", + "cloud_tornado": "\ud83c\udf2a", + "clubs": "\u2663", + "cocktail": "\ud83c\udf78", + "coffee": "\u2615", + "coffin": "\u26b0", + "cold_sweat": "\ud83d\ude30", + "comet": "\u2604", + "compression": "\ud83d\udddc", + "computer": "\ud83d\udcbb", + "confetti_ball": "\ud83c\udf8a", + "confounded": "\ud83d\ude16", + "confused": "\ud83d\ude15", + "congratulations": "\u3297", + "construction": "\ud83d\udea7", + "construction_site": "\ud83c\udfd7", + "construction_worker": "\ud83d\udc77", + "construction_worker_tone1": "\ud83d\udc77\ud83c\udffb", + "construction_worker_tone2": "\ud83d\udc77\ud83c\udffc", + "construction_worker_tone3": "\ud83d\udc77\ud83c\udffd", + "construction_worker_tone4": "\ud83d\udc77\ud83c\udffe", + "construction_worker_tone5": "\ud83d\udc77\ud83c\udfff", + "control_knobs": "\ud83c\udf9b", + "convenience_store": "\ud83c\udfea", + "cookie": "\ud83c\udf6a", + "cool": "\ud83c\udd92", + "cop": "\ud83d\udc6e", + "cop_tone1": "\ud83d\udc6e\ud83c\udffb", + "cop_tone2": "\ud83d\udc6e\ud83c\udffc", + "cop_tone3": "\ud83d\udc6e\ud83c\udffd", + "cop_tone4": "\ud83d\udc6e\ud83c\udffe", + "cop_tone5": "\ud83d\udc6e\ud83c\udfff", + "copyright": "\u00a9", + "corn": "\ud83c\udf3d", + "couch": "\ud83d\udecb", + "couple": "\ud83d\udc6b", + "couple_mm": "\ud83d\udc68\u2764\ud83d\udc68", + "couple_with_heart": "\ud83d\udc91", + "couple_ww": "\ud83d\udc69\u2764\ud83d\udc69", + "couplekiss": "\ud83d\udc8f", + "cow": "\ud83d\udc2e", + "cow2": "\ud83d\udc04", + "crab": "\ud83e\udd80", + "crayon": "\ud83d\udd8d", + "credit_card": "\ud83d\udcb3", + "crescent_moon": "\ud83c\udf19", + "cricket": "\ud83c\udfcf", + "crocodile": "\ud83d\udc0a", + "cross": "\u271d", + "crossed_flags": "\ud83c\udf8c", + "crossed_swords": "\u2694", + "crown": "\ud83d\udc51", + "cruise_ship": "\ud83d\udef3", + "cry": "\ud83d\ude22", + "crying_cat_face": "\ud83d\ude3f", + "crystal_ball": "\ud83d\udd2e", + "cupid": "\ud83d\udc98", + "curly_loop": "\u27b0", + "currency_exchange": "\ud83d\udcb1", + "curry": "\ud83c\udf5b", + "custard": "\ud83c\udf6e", + "customs": "\ud83d\udec3", + "cyclone": "\ud83c\udf00", + "dagger": "\ud83d\udde1", + "dancer": "\ud83d\udc83", + "dancer_tone1": "\ud83d\udc83\ud83c\udffb", + "dancer_tone2": "\ud83d\udc83\ud83c\udffc", + "dancer_tone3": "\ud83d\udc83\ud83c\udffd", + "dancer_tone4": "\ud83d\udc83\ud83c\udffe", + "dancer_tone5": "\ud83d\udc83\ud83c\udfff", + "dancers": "\ud83d\udc6f", + "dango": "\ud83c\udf61", + "dark_sunglasses": "\ud83d\udd76", + "dart": "\ud83c\udfaf", + "dash": "\ud83d\udca8", + "date": "\ud83d\udcc5", + "deciduous_tree": "\ud83c\udf33", + "department_store": "\ud83c\udfec", + "desert": "\ud83c\udfdc", + "desktop": "\ud83d\udda5", + "diamond_shape_with_a_dot_inside": "\ud83d\udca0", + "diamonds": "\u2666", + "disappointed": "\ud83d\ude1e", + "disappointed_relieved": "\ud83d\ude25", + "dividers": "\ud83d\uddc2", + "dizzy": "\ud83d\udcab", + "dizzy_face": "\ud83d\ude35", + "do_not_litter": "\ud83d\udeaf", + "dog": "\ud83d\udc36", + "dog2": "\ud83d\udc15", + "dollar": "\ud83d\udcb5", + "dolls": "\ud83c\udf8e", + "dolphin": "\ud83d\udc2c", + "door": "\ud83d\udeaa", + "doughnut": "\ud83c\udf69", + "dove": "\ud83d\udd4a", + "dragon": "\ud83d\udc09", + "dragon_face": "\ud83d\udc32", + "dress": "\ud83d\udc57", + "dromedary_camel": "\ud83d\udc2a", + "droplet": "\ud83d\udca7", + "dvd": "\ud83d\udcc0", + "e-mail": "\ud83d\udce7", + "ear": "\ud83d\udc42", + "ear_of_rice": "\ud83c\udf3e", + "ear_tone1": "\ud83d\udc42\ud83c\udffb", + "ear_tone2": "\ud83d\udc42\ud83c\udffc", + "ear_tone3": "\ud83d\udc42\ud83c\udffd", + "ear_tone4": "\ud83d\udc42\ud83c\udffe", + "ear_tone5": "\ud83d\udc42\ud83c\udfff", + "earth_africa": "\ud83c\udf0d", + "earth_americas": "\ud83c\udf0e", + "earth_asia": "\ud83c\udf0f", + "egg": "\ud83c\udf73", + "eggplant": "\ud83c\udf46", + "eight": "8\u20e3", + "eight_pointed_black_star": "\u2734", + "eight_spoked_asterisk": "\u2733", + "electric_plug": "\ud83d\udd0c", + "elephant": "\ud83d\udc18", + "end": "\ud83d\udd1a", + "envelope": "\u2709", + "envelope_with_arrow": "\ud83d\udce9", + "euro": "\ud83d\udcb6", + "european_castle": "\ud83c\udff0", + "european_post_office": "\ud83c\udfe4", + "evergreen_tree": "\ud83c\udf32", + "exclamation": "\u2757", + "expressionless": "\ud83d\ude11", + "eye": "\ud83d\udc41", + "eye_in_speech_bubble": "\ud83d\udc41\ud83d\udde8", + "eyeglasses": "\ud83d\udc53", + "eyes": "\ud83d\udc40", + "factory": "\ud83c\udfed", + "fallen_leaf": "\ud83c\udf42", + "family": "\ud83d\udc6a", + "family_mmb": "\ud83d\udc68\ud83d\udc68\ud83d\udc66", + "family_mmbb": "\ud83d\udc68\ud83d\udc68\ud83d\udc66\ud83d\udc66", + "family_mmg": "\ud83d\udc68\ud83d\udc68\ud83d\udc67", + "family_mmgb": "\ud83d\udc68\ud83d\udc68\ud83d\udc67\ud83d\udc66", + "family_mmgg": "\ud83d\udc68\ud83d\udc68\ud83d\udc67\ud83d\udc67", + "family_mwbb": "\ud83d\udc68\ud83d\udc69\ud83d\udc66\ud83d\udc66", + "family_mwg": "\ud83d\udc68\ud83d\udc69\ud83d\udc67", + "family_mwgb": "\ud83d\udc68\ud83d\udc69\ud83d\udc67\ud83d\udc66", + "family_mwgg": "\ud83d\udc68\ud83d\udc69\ud83d\udc67\ud83d\udc67", + "family_wwb": "\ud83d\udc69\ud83d\udc69\ud83d\udc66", + "family_wwbb": "\ud83d\udc69\ud83d\udc69\ud83d\udc66\ud83d\udc66", + "family_wwg": "\ud83d\udc69\ud83d\udc69\ud83d\udc67", + "family_wwgb": "\ud83d\udc69\ud83d\udc69\ud83d\udc67\ud83d\udc66", + "family_wwgg": "\ud83d\udc69\ud83d\udc69\ud83d\udc67\ud83d\udc67", + "fast_forward": "\u23e9", + "fax": "\ud83d\udce0", + "fearful": "\ud83d\ude28", + "feet": "\ud83d\udc3e", + "ferris_wheel": "\ud83c\udfa1", + "ferry": "\u26f4", + "field_hockey": "\ud83c\udfd1", + "file_cabinet": "\ud83d\uddc4", + "file_folder": "\ud83d\udcc1", + "film_frames": "\ud83c\udf9e", + "fire": "\ud83d\udd25", + "fire_engine": "\ud83d\ude92", + "fireworks": "\ud83c\udf86", + "first_quarter_moon": "\ud83c\udf13", + "first_quarter_moon_with_face": "\ud83c\udf1b", + "fish": "\ud83d\udc1f", + "fish_cake": "\ud83c\udf65", + "fishing_pole_and_fish": "\ud83c\udfa3", + "fist": "\u270a", + "fist_tone1": "\u270a\ud83c\udffb", + "fist_tone2": "\u270a\ud83c\udffc", + "fist_tone3": "\u270a\ud83c\udffd", + "fist_tone4": "\u270a\ud83c\udffe", + "fist_tone5": "\u270a\ud83c\udfff", + "five": "5\u20e3", + "flag_ac": "\ud83c\udde6\ud83c\udde8", + "flag_ad": "\ud83c\udde6\ud83c\udde9", + "flag_ae": "\ud83c\udde6\ud83c\uddea", + "flag_af": "\ud83c\udde6\ud83c\uddeb", + "flag_ag": "\ud83c\udde6\ud83c\uddec", + "flag_ai": "\ud83c\udde6\ud83c\uddee", + "flag_al": "\ud83c\udde6\ud83c\uddf1", + "flag_am": "\ud83c\udde6\ud83c\uddf2", + "flag_ao": "\ud83c\udde6\ud83c\uddf4", + "flag_aq": "\ud83c\udde6\ud83c\uddf6", + "flag_ar": "\ud83c\udde6\ud83c\uddf7", + "flag_as": "\ud83c\udde6\ud83c\uddf8", + "flag_at": "\ud83c\udde6\ud83c\uddf9", + "flag_au": "\ud83c\udde6\ud83c\uddfa", + "flag_aw": "\ud83c\udde6\ud83c\uddfc", + "flag_ax": "\ud83c\udde6\ud83c\uddfd", + "flag_az": "\ud83c\udde6\ud83c\uddff", + "flag_ba": "\ud83c\udde7\ud83c\udde6", + "flag_bb": "\ud83c\udde7\ud83c\udde7", + "flag_bd": "\ud83c\udde7\ud83c\udde9", + "flag_be": "\ud83c\udde7\ud83c\uddea", + "flag_bf": "\ud83c\udde7\ud83c\uddeb", + "flag_bg": "\ud83c\udde7\ud83c\uddec", + "flag_bh": "\ud83c\udde7\ud83c\udded", + "flag_bi": "\ud83c\udde7\ud83c\uddee", + "flag_bj": "\ud83c\udde7\ud83c\uddef", + "flag_bl": "\ud83c\udde7\ud83c\uddf1", + "flag_black": "\ud83c\udff4", + "flag_bm": "\ud83c\udde7\ud83c\uddf2", + "flag_bn": "\ud83c\udde7\ud83c\uddf3", + "flag_bo": "\ud83c\udde7\ud83c\uddf4", + "flag_bq": "\ud83c\udde7\ud83c\uddf6", + "flag_br": "\ud83c\udde7\ud83c\uddf7", + "flag_bs": "\ud83c\udde7\ud83c\uddf8", + "flag_bt": "\ud83c\udde7\ud83c\uddf9", + "flag_bv": "\ud83c\udde7\ud83c\uddfb", + "flag_bw": "\ud83c\udde7\ud83c\uddfc", + "flag_by": "\ud83c\udde7\ud83c\uddfe", + "flag_bz": "\ud83c\udde7\ud83c\uddff", + "flag_ca": "\ud83c\udde8\ud83c\udde6", + "flag_cc": "\ud83c\udde8\ud83c\udde8", + "flag_cd": "\ud83c\udde8\ud83c\udde9", + "flag_cf": "\ud83c\udde8\ud83c\uddeb", + "flag_cg": "\ud83c\udde8\ud83c\uddec", + "flag_ch": "\ud83c\udde8\ud83c\udded", + "flag_ci": "\ud83c\udde8\ud83c\uddee", + "flag_ck": "\ud83c\udde8\ud83c\uddf0", + "flag_cl": "\ud83c\udde8\ud83c\uddf1", + "flag_cm": "\ud83c\udde8\ud83c\uddf2", + "flag_cn": "\ud83c\udde8\ud83c\uddf3", + "flag_co": "\ud83c\udde8\ud83c\uddf4", + "flag_cp": "\ud83c\udde8\ud83c\uddf5", + "flag_cr": "\ud83c\udde8\ud83c\uddf7", + "flag_cu": "\ud83c\udde8\ud83c\uddfa", + "flag_cv": "\ud83c\udde8\ud83c\uddfb", + "flag_cw": "\ud83c\udde8\ud83c\uddfc", + "flag_cx": "\ud83c\udde8\ud83c\uddfd", + "flag_cy": "\ud83c\udde8\ud83c\uddfe", + "flag_cz": "\ud83c\udde8\ud83c\uddff", + "flag_de": "\ud83c\udde9\ud83c\uddea", + "flag_dg": "\ud83c\udde9\ud83c\uddec", + "flag_dj": "\ud83c\udde9\ud83c\uddef", + "flag_dk": "\ud83c\udde9\ud83c\uddf0", + "flag_dm": "\ud83c\udde9\ud83c\uddf2", + "flag_do": "\ud83c\udde9\ud83c\uddf4", + "flag_dz": "\ud83c\udde9\ud83c\uddff", + "flag_ea": "\ud83c\uddea\ud83c\udde6", + "flag_ec": "\ud83c\uddea\ud83c\udde8", + "flag_ee": "\ud83c\uddea\ud83c\uddea", + "flag_eg": "\ud83c\uddea\ud83c\uddec", + "flag_eh": "\ud83c\uddea\ud83c\udded", + "flag_er": "\ud83c\uddea\ud83c\uddf7", + "flag_es": "\ud83c\uddea\ud83c\uddf8", + "flag_et": "\ud83c\uddea\ud83c\uddf9", + "flag_eu": "\ud83c\uddea\ud83c\uddfa", + "flag_fi": "\ud83c\uddeb\ud83c\uddee", + "flag_fj": "\ud83c\uddeb\ud83c\uddef", + "flag_fk": "\ud83c\uddeb\ud83c\uddf0", + "flag_fm": "\ud83c\uddeb\ud83c\uddf2", + "flag_fo": "\ud83c\uddeb\ud83c\uddf4", + "flag_fr": "\ud83c\uddeb\ud83c\uddf7", + "flag_ga": "\ud83c\uddec\ud83c\udde6", + "flag_gb": "\ud83c\uddec\ud83c\udde7", + "flag_gd": "\ud83c\uddec\ud83c\udde9", + "flag_ge": "\ud83c\uddec\ud83c\uddea", + "flag_gf": "\ud83c\uddec\ud83c\uddeb", + "flag_gg": "\ud83c\uddec\ud83c\uddec", + "flag_gh": "\ud83c\uddec\ud83c\udded", + "flag_gi": "\ud83c\uddec\ud83c\uddee", + "flag_gl": "\ud83c\uddec\ud83c\uddf1", + "flag_gm": "\ud83c\uddec\ud83c\uddf2", + "flag_gn": "\ud83c\uddec\ud83c\uddf3", + "flag_gp": "\ud83c\uddec\ud83c\uddf5", + "flag_gq": "\ud83c\uddec\ud83c\uddf6", + "flag_gr": "\ud83c\uddec\ud83c\uddf7", + "flag_gs": "\ud83c\uddec\ud83c\uddf8", + "flag_gt": "\ud83c\uddec\ud83c\uddf9", + "flag_gu": "\ud83c\uddec\ud83c\uddfa", + "flag_gw": "\ud83c\uddec\ud83c\uddfc", + "flag_gy": "\ud83c\uddec\ud83c\uddfe", + "flag_hk": "\ud83c\udded\ud83c\uddf0", + "flag_hm": "\ud83c\udded\ud83c\uddf2", + "flag_hn": "\ud83c\udded\ud83c\uddf3", + "flag_hr": "\ud83c\udded\ud83c\uddf7", + "flag_ht": "\ud83c\udded\ud83c\uddf9", + "flag_hu": "\ud83c\udded\ud83c\uddfa", + "flag_ic": "\ud83c\uddee\ud83c\udde8", + "flag_id": "\ud83c\uddee\ud83c\udde9", + "flag_ie": "\ud83c\uddee\ud83c\uddea", + "flag_il": "\ud83c\uddee\ud83c\uddf1", + "flag_im": "\ud83c\uddee\ud83c\uddf2", + "flag_in": "\ud83c\uddee\ud83c\uddf3", + "flag_io": "\ud83c\uddee\ud83c\uddf4", + "flag_iq": "\ud83c\uddee\ud83c\uddf6", + "flag_ir": "\ud83c\uddee\ud83c\uddf7", + "flag_is": "\ud83c\uddee\ud83c\uddf8", + "flag_it": "\ud83c\uddee\ud83c\uddf9", + "flag_je": "\ud83c\uddef\ud83c\uddea", + "flag_jm": "\ud83c\uddef\ud83c\uddf2", + "flag_jo": "\ud83c\uddef\ud83c\uddf4", + "flag_jp": "\ud83c\uddef\ud83c\uddf5", + "flag_ke": "\ud83c\uddf0\ud83c\uddea", + "flag_kg": "\ud83c\uddf0\ud83c\uddec", + "flag_kh": "\ud83c\uddf0\ud83c\udded", + "flag_ki": "\ud83c\uddf0\ud83c\uddee", + "flag_km": "\ud83c\uddf0\ud83c\uddf2", + "flag_kn": "\ud83c\uddf0\ud83c\uddf3", + "flag_kp": "\ud83c\uddf0\ud83c\uddf5", + "flag_kr": "\ud83c\uddf0\ud83c\uddf7", + "flag_kw": "\ud83c\uddf0\ud83c\uddfc", + "flag_ky": "\ud83c\uddf0\ud83c\uddfe", + "flag_kz": "\ud83c\uddf0\ud83c\uddff", + "flag_la": "\ud83c\uddf1\ud83c\udde6", + "flag_lb": "\ud83c\uddf1\ud83c\udde7", + "flag_lc": "\ud83c\uddf1\ud83c\udde8", + "flag_li": "\ud83c\uddf1\ud83c\uddee", + "flag_lk": "\ud83c\uddf1\ud83c\uddf0", + "flag_lr": "\ud83c\uddf1\ud83c\uddf7", + "flag_ls": "\ud83c\uddf1\ud83c\uddf8", + "flag_lt": "\ud83c\uddf1\ud83c\uddf9", + "flag_lu": "\ud83c\uddf1\ud83c\uddfa", + "flag_lv": "\ud83c\uddf1\ud83c\uddfb", + "flag_ly": "\ud83c\uddf1\ud83c\uddfe", + "flag_ma": "\ud83c\uddf2\ud83c\udde6", + "flag_mc": "\ud83c\uddf2\ud83c\udde8", + "flag_md": "\ud83c\uddf2\ud83c\udde9", + "flag_me": "\ud83c\uddf2\ud83c\uddea", + "flag_mf": "\ud83c\uddf2\ud83c\uddeb", + "flag_mg": "\ud83c\uddf2\ud83c\uddec", + "flag_mh": "\ud83c\uddf2\ud83c\udded", + "flag_mk": "\ud83c\uddf2\ud83c\uddf0", + "flag_ml": "\ud83c\uddf2\ud83c\uddf1", + "flag_mm": "\ud83c\uddf2\ud83c\uddf2", + "flag_mn": "\ud83c\uddf2\ud83c\uddf3", + "flag_mo": "\ud83c\uddf2\ud83c\uddf4", + "flag_mp": "\ud83c\uddf2\ud83c\uddf5", + "flag_mq": "\ud83c\uddf2\ud83c\uddf6", + "flag_mr": "\ud83c\uddf2\ud83c\uddf7", + "flag_ms": "\ud83c\uddf2\ud83c\uddf8", + "flag_mt": "\ud83c\uddf2\ud83c\uddf9", + "flag_mu": "\ud83c\uddf2\ud83c\uddfa", + "flag_mv": "\ud83c\uddf2\ud83c\uddfb", + "flag_mw": "\ud83c\uddf2\ud83c\uddfc", + "flag_mx": "\ud83c\uddf2\ud83c\uddfd", + "flag_my": "\ud83c\uddf2\ud83c\uddfe", + "flag_mz": "\ud83c\uddf2\ud83c\uddff", + "flag_na": "\ud83c\uddf3\ud83c\udde6", + "flag_nc": "\ud83c\uddf3\ud83c\udde8", + "flag_ne": "\ud83c\uddf3\ud83c\uddea", + "flag_nf": "\ud83c\uddf3\ud83c\uddeb", + "flag_ng": "\ud83c\uddf3\ud83c\uddec", + "flag_ni": "\ud83c\uddf3\ud83c\uddee", + "flag_nl": "\ud83c\uddf3\ud83c\uddf1", + "flag_no": "\ud83c\uddf3\ud83c\uddf4", + "flag_np": "\ud83c\uddf3\ud83c\uddf5", + "flag_nr": "\ud83c\uddf3\ud83c\uddf7", + "flag_nu": "\ud83c\uddf3\ud83c\uddfa", + "flag_nz": "\ud83c\uddf3\ud83c\uddff", + "flag_om": "\ud83c\uddf4\ud83c\uddf2", + "flag_pa": "\ud83c\uddf5\ud83c\udde6", + "flag_pe": "\ud83c\uddf5\ud83c\uddea", + "flag_pf": "\ud83c\uddf5\ud83c\uddeb", + "flag_pg": "\ud83c\uddf5\ud83c\uddec", + "flag_ph": "\ud83c\uddf5\ud83c\udded", + "flag_pk": "\ud83c\uddf5\ud83c\uddf0", + "flag_pl": "\ud83c\uddf5\ud83c\uddf1", + "flag_pm": "\ud83c\uddf5\ud83c\uddf2", + "flag_pn": "\ud83c\uddf5\ud83c\uddf3", + "flag_pr": "\ud83c\uddf5\ud83c\uddf7", + "flag_ps": "\ud83c\uddf5\ud83c\uddf8", + "flag_pt": "\ud83c\uddf5\ud83c\uddf9", + "flag_pw": "\ud83c\uddf5\ud83c\uddfc", + "flag_py": "\ud83c\uddf5\ud83c\uddfe", + "flag_qa": "\ud83c\uddf6\ud83c\udde6", + "flag_re": "\ud83c\uddf7\ud83c\uddea", + "flag_ro": "\ud83c\uddf7\ud83c\uddf4", + "flag_rs": "\ud83c\uddf7\ud83c\uddf8", + "flag_ru": "\ud83c\uddf7\ud83c\uddfa", + "flag_rw": "\ud83c\uddf7\ud83c\uddfc", + "flag_sa": "\ud83c\uddf8\ud83c\udde6", + "flag_sb": "\ud83c\uddf8\ud83c\udde7", + "flag_sc": "\ud83c\uddf8\ud83c\udde8", + "flag_sd": "\ud83c\uddf8\ud83c\udde9", + "flag_se": "\ud83c\uddf8\ud83c\uddea", + "flag_sg": "\ud83c\uddf8\ud83c\uddec", + "flag_sh": "\ud83c\uddf8\ud83c\udded", + "flag_si": "\ud83c\uddf8\ud83c\uddee", + "flag_sj": "\ud83c\uddf8\ud83c\uddef", + "flag_sk": "\ud83c\uddf8\ud83c\uddf0", + "flag_sl": "\ud83c\uddf8\ud83c\uddf1", + "flag_sm": "\ud83c\uddf8\ud83c\uddf2", + "flag_sn": "\ud83c\uddf8\ud83c\uddf3", + "flag_so": "\ud83c\uddf8\ud83c\uddf4", + "flag_sr": "\ud83c\uddf8\ud83c\uddf7", + "flag_ss": "\ud83c\uddf8\ud83c\uddf8", + "flag_st": "\ud83c\uddf8\ud83c\uddf9", + "flag_sv": "\ud83c\uddf8\ud83c\uddfb", + "flag_sx": "\ud83c\uddf8\ud83c\uddfd", + "flag_sy": "\ud83c\uddf8\ud83c\uddfe", + "flag_sz": "\ud83c\uddf8\ud83c\uddff", + "flag_ta": "\ud83c\uddf9\ud83c\udde6", + "flag_tc": "\ud83c\uddf9\ud83c\udde8", + "flag_td": "\ud83c\uddf9\ud83c\udde9", + "flag_tf": "\ud83c\uddf9\ud83c\uddeb", + "flag_tg": "\ud83c\uddf9\ud83c\uddec", + "flag_th": "\ud83c\uddf9\ud83c\udded", + "flag_tj": "\ud83c\uddf9\ud83c\uddef", + "flag_tk": "\ud83c\uddf9\ud83c\uddf0", + "flag_tl": "\ud83c\uddf9\ud83c\uddf1", + "flag_tm": "\ud83c\uddf9\ud83c\uddf2", + "flag_tn": "\ud83c\uddf9\ud83c\uddf3", + "flag_to": "\ud83c\uddf9\ud83c\uddf4", + "flag_tr": "\ud83c\uddf9\ud83c\uddf7", + "flag_tt": "\ud83c\uddf9\ud83c\uddf9", + "flag_tv": "\ud83c\uddf9\ud83c\uddfb", + "flag_tw": "\ud83c\uddf9\ud83c\uddfc", + "flag_tz": "\ud83c\uddf9\ud83c\uddff", + "flag_ua": "\ud83c\uddfa\ud83c\udde6", + "flag_ug": "\ud83c\uddfa\ud83c\uddec", + "flag_um": "\ud83c\uddfa\ud83c\uddf2", + "flag_us": "\ud83c\uddfa\ud83c\uddf8", + "flag_uy": "\ud83c\uddfa\ud83c\uddfe", + "flag_uz": "\ud83c\uddfa\ud83c\uddff", + "flag_va": "\ud83c\uddfb\ud83c\udde6", + "flag_vc": "\ud83c\uddfb\ud83c\udde8", + "flag_ve": "\ud83c\uddfb\ud83c\uddea", + "flag_vg": "\ud83c\uddfb\ud83c\uddec", + "flag_vi": "\ud83c\uddfb\ud83c\uddee", + "flag_vn": "\ud83c\uddfb\ud83c\uddf3", + "flag_vu": "\ud83c\uddfb\ud83c\uddfa", + "flag_wf": "\ud83c\uddfc\ud83c\uddeb", + "flag_white": "\ud83c\udff3", + "flag_ws": "\ud83c\uddfc\ud83c\uddf8", + "flag_xk": "\ud83c\uddfd\ud83c\uddf0", + "flag_ye": "\ud83c\uddfe\ud83c\uddea", + "flag_yt": "\ud83c\uddfe\ud83c\uddf9", + "flag_za": "\ud83c\uddff\ud83c\udde6", + "flag_zm": "\ud83c\uddff\ud83c\uddf2", + "flag_zw": "\ud83c\uddff\ud83c\uddfc", + "flags": "\ud83c\udf8f", + "flashlight": "\ud83d\udd26", + "fleur-de-lis": "\u269c", + "floppy_disk": "\ud83d\udcbe", + "flower_playing_cards": "\ud83c\udfb4", + "flushed": "\ud83d\ude33", + "fog": "\ud83c\udf2b", + "foggy": "\ud83c\udf01", + "football": "\ud83c\udfc8", + "footprints": "\ud83d\udc63", + "fork_and_knife": "\ud83c\udf74", + "fork_knife_plate": "\ud83c\udf7d", + "fountain": "\u26f2", + "four": "4\u20e3", + "four_leaf_clover": "\ud83c\udf40", + "frame_photo": "\ud83d\uddbc", + "free": "\ud83c\udd93", + "fried_shrimp": "\ud83c\udf64", + "fries": "\ud83c\udf5f", + "frog": "\ud83d\udc38", + "frowning": "\ud83d\ude26", + "frowning2": "\u2639", + "fuelpump": "\u26fd", + "full_moon": "\ud83c\udf15", + "full_moon_with_face": "\ud83c\udf1d", + "game_die": "\ud83c\udfb2", + "gear": "\u2699", + "gem": "\ud83d\udc8e", + "gemini": "\u264a", + "ghost": "\ud83d\udc7b", + "gift": "\ud83c\udf81", + "gift_heart": "\ud83d\udc9d", + "girl": "\ud83d\udc67", + "girl_tone1": "\ud83d\udc67\ud83c\udffb", + "girl_tone2": "\ud83d\udc67\ud83c\udffc", + "girl_tone3": "\ud83d\udc67\ud83c\udffd", + "girl_tone4": "\ud83d\udc67\ud83c\udffe", + "girl_tone5": "\ud83d\udc67\ud83c\udfff", + "globe_with_meridians": "\ud83c\udf10", + "goat": "\ud83d\udc10", + "golf": "\u26f3", + "golfer": "\ud83c\udfcc", + "grapes": "\ud83c\udf47", + "green_apple": "\ud83c\udf4f", + "green_book": "\ud83d\udcd7", + "green_heart": "\ud83d\udc9a", + "grey_exclamation": "\u2755", + "grey_question": "\u2754", + "grimacing": "\ud83d\ude2c", + "grin": "\ud83d\ude01", + "grinning": "\ud83d\ude00", + "guardsman": "\ud83d\udc82", + "guardsman_tone1": "\ud83d\udc82\ud83c\udffb", + "guardsman_tone2": "\ud83d\udc82\ud83c\udffc", + "guardsman_tone3": "\ud83d\udc82\ud83c\udffd", + "guardsman_tone4": "\ud83d\udc82\ud83c\udffe", + "guardsman_tone5": "\ud83d\udc82\ud83c\udfff", + "guitar": "\ud83c\udfb8", + "gun": "\ud83d\udd2b", + "haircut": "\ud83d\udc87", + "haircut_tone1": "\ud83d\udc87\ud83c\udffb", + "haircut_tone2": "\ud83d\udc87\ud83c\udffc", + "haircut_tone3": "\ud83d\udc87\ud83c\udffd", + "haircut_tone4": "\ud83d\udc87\ud83c\udffe", + "haircut_tone5": "\ud83d\udc87\ud83c\udfff", + "hamburger": "\ud83c\udf54", + "hammer": "\ud83d\udd28", + "hammer_pick": "\u2692", + "hamster": "\ud83d\udc39", + "hand_splayed": "\ud83d\udd90", + "hand_splayed_tone1": "\ud83d\udd90\ud83c\udffb", + "hand_splayed_tone2": "\ud83d\udd90\ud83c\udffc", + "hand_splayed_tone3": "\ud83d\udd90\ud83c\udffd", + "hand_splayed_tone4": "\ud83d\udd90\ud83c\udffe", + "hand_splayed_tone5": "\ud83d\udd90\ud83c\udfff", + "handbag": "\ud83d\udc5c", + "hash": "#\u20e3", + "hatched_chick": "\ud83d\udc25", + "hatching_chick": "\ud83d\udc23", + "head_bandage": "\ud83e\udd15", + "headphones": "\ud83c\udfa7", + "hear_no_evil": "\ud83d\ude49", + "heart": "\u2764", + "heart_decoration": "\ud83d\udc9f", + "heart_exclamation": "\u2763", + "heart_eyes": "\ud83d\ude0d", + "heart_eyes_cat": "\ud83d\ude3b", + "heartbeat": "\ud83d\udc93", + "heartpulse": "\ud83d\udc97", + "hearts": "\u2665", + "heavy_check_mark": "\u2714", + "heavy_division_sign": "\u2797", + "heavy_dollar_sign": "\ud83d\udcb2", + "heavy_minus_sign": "\u2796", + "heavy_multiplication_x": "\u2716", + "heavy_plus_sign": "\u2795", + "helicopter": "\ud83d\ude81", + "helmet_with_cross": "\u26d1", + "herb": "\ud83c\udf3f", + "hibiscus": "\ud83c\udf3a", + "high_brightness": "\ud83d\udd06", + "high_heel": "\ud83d\udc60", + "hockey": "\ud83c\udfd2", + "hole": "\ud83d\udd73", + "homes": "\ud83c\udfd8", + "honey_pot": "\ud83c\udf6f", + "horse": "\ud83d\udc34", + "horse_racing": "\ud83c\udfc7", + "horse_racing_tone1": "\ud83c\udfc7\ud83c\udffb", + "horse_racing_tone2": "\ud83c\udfc7\ud83c\udffc", + "horse_racing_tone3": "\ud83c\udfc7\ud83c\udffd", + "horse_racing_tone4": "\ud83c\udfc7\ud83c\udffe", + "horse_racing_tone5": "\ud83c\udfc7\ud83c\udfff", + "hospital": "\ud83c\udfe5", + "hot_pepper": "\ud83c\udf36", + "hotdog": "\ud83c\udf2d", + "hotel": "\ud83c\udfe8", + "hotsprings": "\u2668", + "hourglass": "\u231b", + "hourglass_flowing_sand": "\u23f3", + "house": "\ud83c\udfe0", + "house_abandoned": "\ud83c\udfda", + "house_with_garden": "\ud83c\udfe1", + "hugging": "\ud83e\udd17", + "hushed": "\ud83d\ude2f", + "ice_cream": "\ud83c\udf68", + "ice_skate": "\u26f8", + "icecream": "\ud83c\udf66", + "id": "\ud83c\udd94", + "ideograph_advantage": "\ud83c\ude50", + "imp": "\ud83d\udc7f", + "inbox_tray": "\ud83d\udce5", + "incoming_envelope": "\ud83d\udce8", + "information_desk_person": "\ud83d\udc81", + "information_desk_person_tone1": "\ud83d\udc81\ud83c\udffb", + "information_desk_person_tone2": "\ud83d\udc81\ud83c\udffc", + "information_desk_person_tone3": "\ud83d\udc81\ud83c\udffd", + "information_desk_person_tone4": "\ud83d\udc81\ud83c\udffe", + "information_desk_person_tone5": "\ud83d\udc81\ud83c\udfff", + "information_source": "\u2139", + "innocent": "\ud83d\ude07", + "interrobang": "\u2049", + "iphone": "\ud83d\udcf1", + "island": "\ud83c\udfdd", + "izakaya_lantern": "\ud83c\udfee", + "jack_o_lantern": "\ud83c\udf83", + "japan": "\ud83d\uddfe", + "japanese_castle": "\ud83c\udfef", + "japanese_goblin": "\ud83d\udc7a", + "japanese_ogre": "\ud83d\udc79", + "jeans": "\ud83d\udc56", + "joy": "\ud83d\ude02", + "joy_cat": "\ud83d\ude39", + "joystick": "\ud83d\udd79", + "kaaba": "\ud83d\udd4b", + "key": "\ud83d\udd11", + "key2": "\ud83d\udddd", + "keyboard": "\u2328", + "kimono": "\ud83d\udc58", + "kiss": "\ud83d\udc8b", + "kiss_mm": "\ud83d\udc68\u2764\ud83d\udc8b\ud83d\udc68", + "kiss_ww": "\ud83d\udc69\u2764\ud83d\udc8b\ud83d\udc69", + "kissing": "\ud83d\ude17", + "kissing_cat": "\ud83d\ude3d", + "kissing_closed_eyes": "\ud83d\ude1a", + "kissing_heart": "\ud83d\ude18", + "kissing_smiling_eyes": "\ud83d\ude19", + "knife": "\ud83d\udd2a", + "koala": "\ud83d\udc28", + "koko": "\ud83c\ude01", + "label": "\ud83c\udff7", + "large_blue_circle": "\ud83d\udd35", + "large_blue_diamond": "\ud83d\udd37", + "large_orange_diamond": "\ud83d\udd36", + "last_quarter_moon": "\ud83c\udf17", + "last_quarter_moon_with_face": "\ud83c\udf1c", + "laughing": "\ud83d\ude06", + "leaves": "\ud83c\udf43", + "ledger": "\ud83d\udcd2", + "left_luggage": "\ud83d\udec5", + "left_right_arrow": "\u2194", + "leftwards_arrow_with_hook": "\u21a9", + "lemon": "\ud83c\udf4b", + "leo": "\u264c", + "leopard": "\ud83d\udc06", + "level_slider": "\ud83c\udf9a", + "levitate": "\ud83d\udd74", + "libra": "\u264e", + "lifter": "\ud83c\udfcb", + "lifter_tone1": "\ud83c\udfcb\ud83c\udffb", + "lifter_tone2": "\ud83c\udfcb\ud83c\udffc", + "lifter_tone3": "\ud83c\udfcb\ud83c\udffd", + "lifter_tone4": "\ud83c\udfcb\ud83c\udffe", + "lifter_tone5": "\ud83c\udfcb\ud83c\udfff", + "light_rail": "\ud83d\ude88", + "link": "\ud83d\udd17", + "lion_face": "\ud83e\udd81", + "lips": "\ud83d\udc44", + "lipstick": "\ud83d\udc84", + "lock": "\ud83d\udd12", + "lock_with_ink_pen": "\ud83d\udd0f", + "lollipop": "\ud83c\udf6d", + "loop": "\u27bf", + "loud_sound": "\ud83d\udd0a", + "loudspeaker": "\ud83d\udce2", + "love_hotel": "\ud83c\udfe9", + "love_letter": "\ud83d\udc8c", + "low_brightness": "\ud83d\udd05", + "m": "\u24c2", + "mag": "\ud83d\udd0d", + "mag_right": "\ud83d\udd0e", + "mahjong": "\ud83c\udc04", + "mailbox": "\ud83d\udceb", + "mailbox_closed": "\ud83d\udcea", + "mailbox_with_mail": "\ud83d\udcec", + "mailbox_with_no_mail": "\ud83d\udced", + "man": "\ud83d\udc68", + "man_tone1": "\ud83d\udc68\ud83c\udffb", + "man_tone2": "\ud83d\udc68\ud83c\udffc", + "man_tone3": "\ud83d\udc68\ud83c\udffd", + "man_tone4": "\ud83d\udc68\ud83c\udffe", + "man_tone5": "\ud83d\udc68\ud83c\udfff", + "man_with_gua_pi_mao": "\ud83d\udc72", + "man_with_gua_pi_mao_tone1": "\ud83d\udc72\ud83c\udffb", + "man_with_gua_pi_mao_tone2": "\ud83d\udc72\ud83c\udffc", + "man_with_gua_pi_mao_tone3": "\ud83d\udc72\ud83c\udffd", + "man_with_gua_pi_mao_tone4": "\ud83d\udc72\ud83c\udffe", + "man_with_gua_pi_mao_tone5": "\ud83d\udc72\ud83c\udfff", + "man_with_turban": "\ud83d\udc73", + "man_with_turban_tone1": "\ud83d\udc73\ud83c\udffb", + "man_with_turban_tone2": "\ud83d\udc73\ud83c\udffc", + "man_with_turban_tone3": "\ud83d\udc73\ud83c\udffd", + "man_with_turban_tone4": "\ud83d\udc73\ud83c\udffe", + "man_with_turban_tone5": "\ud83d\udc73\ud83c\udfff", + "mans_shoe": "\ud83d\udc5e", + "map": "\ud83d\uddfa", + "maple_leaf": "\ud83c\udf41", + "mask": "\ud83d\ude37", + "massage": "\ud83d\udc86", + "massage_tone1": "\ud83d\udc86\ud83c\udffb", + "massage_tone2": "\ud83d\udc86\ud83c\udffc", + "massage_tone3": "\ud83d\udc86\ud83c\udffd", + "massage_tone4": "\ud83d\udc86\ud83c\udffe", + "massage_tone5": "\ud83d\udc86\ud83c\udfff", + "meat_on_bone": "\ud83c\udf56", + "medal": "\ud83c\udfc5", + "mega": "\ud83d\udce3", + "melon": "\ud83c\udf48", + "menorah": "\ud83d\udd4e", + "mens": "\ud83d\udeb9", + "metal": "\ud83e\udd18", + "metal_tone1": "\ud83e\udd18\ud83c\udffb", + "metal_tone2": "\ud83e\udd18\ud83c\udffc", + "metal_tone3": "\ud83e\udd18\ud83c\udffd", + "metal_tone4": "\ud83e\udd18\ud83c\udffe", + "metal_tone5": "\ud83e\udd18\ud83c\udfff", + "metro": "\ud83d\ude87", + "microphone": "\ud83c\udfa4", + "microphone2": "\ud83c\udf99", + "microscope": "\ud83d\udd2c", + "middle_finger": "\ud83d\udd95", + "middle_finger_tone1": "\ud83d\udd95\ud83c\udffb", + "middle_finger_tone2": "\ud83d\udd95\ud83c\udffc", + "middle_finger_tone3": "\ud83d\udd95\ud83c\udffd", + "middle_finger_tone4": "\ud83d\udd95\ud83c\udffe", + "middle_finger_tone5": "\ud83d\udd95\ud83c\udfff", + "military_medal": "\ud83c\udf96", + "milky_way": "\ud83c\udf0c", + "minibus": "\ud83d\ude90", + "minidisc": "\ud83d\udcbd", + "mobile_phone_off": "\ud83d\udcf4", + "money_mouth": "\ud83e\udd11", + "money_with_wings": "\ud83d\udcb8", + "moneybag": "\ud83d\udcb0", + "monkey": "\ud83d\udc12", + "monkey_face": "\ud83d\udc35", + "monorail": "\ud83d\ude9d", + "mortar_board": "\ud83c\udf93", + "mosque": "\ud83d\udd4c", + "motorboat": "\ud83d\udee5", + "motorcycle": "\ud83c\udfcd", + "motorway": "\ud83d\udee3", + "mount_fuji": "\ud83d\uddfb", + "mountain": "\u26f0", + "mountain_bicyclist": "\ud83d\udeb5", + "mountain_bicyclist_tone1": "\ud83d\udeb5\ud83c\udffb", + "mountain_bicyclist_tone2": "\ud83d\udeb5\ud83c\udffc", + "mountain_bicyclist_tone3": "\ud83d\udeb5\ud83c\udffd", + "mountain_bicyclist_tone4": "\ud83d\udeb5\ud83c\udffe", + "mountain_bicyclist_tone5": "\ud83d\udeb5\ud83c\udfff", + "mountain_cableway": "\ud83d\udea0", + "mountain_railway": "\ud83d\ude9e", + "mountain_snow": "\ud83c\udfd4", + "mouse": "\ud83d\udc2d", + "mouse2": "\ud83d\udc01", + "mouse_three_button": "\ud83d\uddb1", + "movie_camera": "\ud83c\udfa5", + "moyai": "\ud83d\uddff", + "muscle": "\ud83d\udcaa", + "muscle_tone1": "\ud83d\udcaa\ud83c\udffb", + "muscle_tone2": "\ud83d\udcaa\ud83c\udffc", + "muscle_tone3": "\ud83d\udcaa\ud83c\udffd", + "muscle_tone4": "\ud83d\udcaa\ud83c\udffe", + "muscle_tone5": "\ud83d\udcaa\ud83c\udfff", + "mushroom": "\ud83c\udf44", + "musical_keyboard": "\ud83c\udfb9", + "musical_note": "\ud83c\udfb5", + "musical_score": "\ud83c\udfbc", + "mute": "\ud83d\udd07", + "nail_care": "\ud83d\udc85", + "nail_care_tone1": "\ud83d\udc85\ud83c\udffb", + "nail_care_tone2": "\ud83d\udc85\ud83c\udffc", + "nail_care_tone3": "\ud83d\udc85\ud83c\udffd", + "nail_care_tone4": "\ud83d\udc85\ud83c\udffe", + "nail_care_tone5": "\ud83d\udc85\ud83c\udfff", + "name_badge": "\ud83d\udcdb", + "necktie": "\ud83d\udc54", + "negative_squared_cross_mark": "\u274e", + "nerd": "\ud83e\udd13", + "neutral_face": "\ud83d\ude10", + "new": "\ud83c\udd95", + "new_moon": "\ud83c\udf11", + "new_moon_with_face": "\ud83c\udf1a", + "newspaper": "\ud83d\udcf0", + "newspaper2": "\ud83d\uddde", + "ng": "\ud83c\udd96", + "night_with_stars": "\ud83c\udf03", + "nine": "9\u20e3", + "no_bell": "\ud83d\udd15", + "no_bicycles": "\ud83d\udeb3", + "no_entry": "\u26d4", + "no_entry_sign": "\ud83d\udeab", + "no_good": "\ud83d\ude45", + "no_good_tone1": "\ud83d\ude45\ud83c\udffb", + "no_good_tone2": "\ud83d\ude45\ud83c\udffc", + "no_good_tone3": "\ud83d\ude45\ud83c\udffd", + "no_good_tone4": "\ud83d\ude45\ud83c\udffe", + "no_good_tone5": "\ud83d\ude45\ud83c\udfff", + "no_mobile_phones": "\ud83d\udcf5", + "no_mouth": "\ud83d\ude36", + "no_pedestrians": "\ud83d\udeb7", + "no_smoking": "\ud83d\udead", + "non-potable_water": "\ud83d\udeb1", + "nose": "\ud83d\udc43", + "nose_tone1": "\ud83d\udc43\ud83c\udffb", + "nose_tone2": "\ud83d\udc43\ud83c\udffc", + "nose_tone3": "\ud83d\udc43\ud83c\udffd", + "nose_tone4": "\ud83d\udc43\ud83c\udffe", + "nose_tone5": "\ud83d\udc43\ud83c\udfff", + "notebook": "\ud83d\udcd3", + "notebook_with_decorative_cover": "\ud83d\udcd4", + "notepad_spiral": "\ud83d\uddd2", + "notes": "\ud83c\udfb6", + "nut_and_bolt": "\ud83d\udd29", + "o": "\u2b55", + "o2": "\ud83c\udd7e", + "ocean": "\ud83c\udf0a", + "octopus": "\ud83d\udc19", + "oden": "\ud83c\udf62", + "office": "\ud83c\udfe2", + "oil": "\ud83d\udee2", + "ok": "\ud83c\udd97", + "ok_hand": "\ud83d\udc4c", + "ok_hand_tone1": "\ud83d\udc4c\ud83c\udffb", + "ok_hand_tone2": "\ud83d\udc4c\ud83c\udffc", + "ok_hand_tone3": "\ud83d\udc4c\ud83c\udffd", + "ok_hand_tone4": "\ud83d\udc4c\ud83c\udffe", + "ok_hand_tone5": "\ud83d\udc4c\ud83c\udfff", + "ok_woman": "\ud83d\ude46", + "ok_woman_tone1": "\ud83d\ude46\ud83c\udffb", + "ok_woman_tone2": "\ud83d\ude46\ud83c\udffc", + "ok_woman_tone3": "\ud83d\ude46\ud83c\udffd", + "ok_woman_tone4": "\ud83d\ude46\ud83c\udffe", + "ok_woman_tone5": "\ud83d\ude46\ud83c\udfff", + "older_man": "\ud83d\udc74", + "older_man_tone1": "\ud83d\udc74\ud83c\udffb", + "older_man_tone2": "\ud83d\udc74\ud83c\udffc", + "older_man_tone3": "\ud83d\udc74\ud83c\udffd", + "older_man_tone4": "\ud83d\udc74\ud83c\udffe", + "older_man_tone5": "\ud83d\udc74\ud83c\udfff", + "older_woman": "\ud83d\udc75", + "older_woman_tone1": "\ud83d\udc75\ud83c\udffb", + "older_woman_tone2": "\ud83d\udc75\ud83c\udffc", + "older_woman_tone3": "\ud83d\udc75\ud83c\udffd", + "older_woman_tone4": "\ud83d\udc75\ud83c\udffe", + "older_woman_tone5": "\ud83d\udc75\ud83c\udfff", + "om_symbol": "\ud83d\udd49", + "on": "\ud83d\udd1b", + "oncoming_automobile": "\ud83d\ude98", + "oncoming_bus": "\ud83d\ude8d", + "oncoming_police_car": "\ud83d\ude94", + "oncoming_taxi": "\ud83d\ude96", + "one": "1\u20e3", + "open_file_folder": "\ud83d\udcc2", + "open_hands": "\ud83d\udc50", + "open_hands_tone1": "\ud83d\udc50\ud83c\udffb", + "open_hands_tone2": "\ud83d\udc50\ud83c\udffc", + "open_hands_tone3": "\ud83d\udc50\ud83c\udffd", + "open_hands_tone4": "\ud83d\udc50\ud83c\udffe", + "open_hands_tone5": "\ud83d\udc50\ud83c\udfff", + "open_mouth": "\ud83d\ude2e", + "ophiuchus": "\u26ce", + "orange_book": "\ud83d\udcd9", + "orthodox_cross": "\u2626", + "outbox_tray": "\ud83d\udce4", + "ox": "\ud83d\udc02", + "package": "\ud83d\udce6", + "page_facing_up": "\ud83d\udcc4", + "page_with_curl": "\ud83d\udcc3", + "pager": "\ud83d\udcdf", + "paintbrush": "\ud83d\udd8c", + "palm_tree": "\ud83c\udf34", + "panda_face": "\ud83d\udc3c", + "paperclip": "\ud83d\udcce", + "paperclips": "\ud83d\udd87", + "park": "\ud83c\udfde", + "parking": "\ud83c\udd7f", + "part_alternation_mark": "\u303d", + "partly_sunny": "\u26c5", + "passport_control": "\ud83d\udec2", + "pause_button": "\u23f8", + "peace": "\u262e", + "peach": "\ud83c\udf51", + "pear": "\ud83c\udf50", + "pen_ballpoint": "\ud83d\udd8a", + "pen_fountain": "\ud83d\udd8b", + "pencil": "\ud83d\udcdd", + "pencil2": "\u270f", + "penguin": "\ud83d\udc27", + "pensive": "\ud83d\ude14", + "performing_arts": "\ud83c\udfad", + "persevere": "\ud83d\ude23", + "person_frowning": "\ud83d\ude4d", + "person_frowning_tone1": "\ud83d\ude4d\ud83c\udffb", + "person_frowning_tone2": "\ud83d\ude4d\ud83c\udffc", + "person_frowning_tone3": "\ud83d\ude4d\ud83c\udffd", + "person_frowning_tone4": "\ud83d\ude4d\ud83c\udffe", + "person_frowning_tone5": "\ud83d\ude4d\ud83c\udfff", + "person_with_blond_hair": "\ud83d\udc71", + "person_with_blond_hair_tone1": "\ud83d\udc71\ud83c\udffb", + "person_with_blond_hair_tone2": "\ud83d\udc71\ud83c\udffc", + "person_with_blond_hair_tone3": "\ud83d\udc71\ud83c\udffd", + "person_with_blond_hair_tone4": "\ud83d\udc71\ud83c\udffe", + "person_with_blond_hair_tone5": "\ud83d\udc71\ud83c\udfff", + "person_with_pouting_face": "\ud83d\ude4e", + "person_with_pouting_face_tone1": "\ud83d\ude4e\ud83c\udffb", + "person_with_pouting_face_tone2": "\ud83d\ude4e\ud83c\udffc", + "person_with_pouting_face_tone3": "\ud83d\ude4e\ud83c\udffd", + "person_with_pouting_face_tone4": "\ud83d\ude4e\ud83c\udffe", + "person_with_pouting_face_tone5": "\ud83d\ude4e\ud83c\udfff", + "pick": "\u26cf", + "pig": "\ud83d\udc37", + "pig2": "\ud83d\udc16", + "pig_nose": "\ud83d\udc3d", + "pill": "\ud83d\udc8a", + "pineapple": "\ud83c\udf4d", + "ping_pong": "\ud83c\udfd3", + "pisces": "\u2653", + "pizza": "\ud83c\udf55", + "place_of_worship": "\ud83d\uded0", + "play_pause": "\u23ef", + "point_down": "\ud83d\udc47", + "point_down_tone1": "\ud83d\udc47\ud83c\udffb", + "point_down_tone2": "\ud83d\udc47\ud83c\udffc", + "point_down_tone3": "\ud83d\udc47\ud83c\udffd", + "point_down_tone4": "\ud83d\udc47\ud83c\udffe", + "point_down_tone5": "\ud83d\udc47\ud83c\udfff", + "point_left": "\ud83d\udc48", + "point_left_tone1": "\ud83d\udc48\ud83c\udffb", + "point_left_tone2": "\ud83d\udc48\ud83c\udffc", + "point_left_tone3": "\ud83d\udc48\ud83c\udffd", + "point_left_tone4": "\ud83d\udc48\ud83c\udffe", + "point_left_tone5": "\ud83d\udc48\ud83c\udfff", + "point_right": "\ud83d\udc49", + "point_right_tone1": "\ud83d\udc49\ud83c\udffb", + "point_right_tone2": "\ud83d\udc49\ud83c\udffc", + "point_right_tone3": "\ud83d\udc49\ud83c\udffd", + "point_right_tone4": "\ud83d\udc49\ud83c\udffe", + "point_right_tone5": "\ud83d\udc49\ud83c\udfff", + "point_up": "\u261d", + "point_up_2": "\ud83d\udc46", + "point_up_2_tone1": "\ud83d\udc46\ud83c\udffb", + "point_up_2_tone2": "\ud83d\udc46\ud83c\udffc", + "point_up_2_tone3": "\ud83d\udc46\ud83c\udffd", + "point_up_2_tone4": "\ud83d\udc46\ud83c\udffe", + "point_up_2_tone5": "\ud83d\udc46\ud83c\udfff", + "point_up_tone1": "\u261d\ud83c\udffb", + "point_up_tone2": "\u261d\ud83c\udffc", + "point_up_tone3": "\u261d\ud83c\udffd", + "point_up_tone4": "\u261d\ud83c\udffe", + "point_up_tone5": "\u261d\ud83c\udfff", + "police_car": "\ud83d\ude93", + "poodle": "\ud83d\udc29", + "poop": "\ud83d\udca9", + "popcorn": "\ud83c\udf7f", + "post_office": "\ud83c\udfe3", + "postal_horn": "\ud83d\udcef", + "postbox": "\ud83d\udcee", + "potable_water": "\ud83d\udeb0", + "pouch": "\ud83d\udc5d", + "poultry_leg": "\ud83c\udf57", + "pound": "\ud83d\udcb7", + "pouting_cat": "\ud83d\ude3e", + "pray": "\ud83d\ude4f", + "pray_tone1": "\ud83d\ude4f\ud83c\udffb", + "pray_tone2": "\ud83d\ude4f\ud83c\udffc", + "pray_tone3": "\ud83d\ude4f\ud83c\udffd", + "pray_tone4": "\ud83d\ude4f\ud83c\udffe", + "pray_tone5": "\ud83d\ude4f\ud83c\udfff", + "prayer_beads": "\ud83d\udcff", + "princess": "\ud83d\udc78", + "princess_tone1": "\ud83d\udc78\ud83c\udffb", + "princess_tone2": "\ud83d\udc78\ud83c\udffc", + "princess_tone3": "\ud83d\udc78\ud83c\udffd", + "princess_tone4": "\ud83d\udc78\ud83c\udffe", + "princess_tone5": "\ud83d\udc78\ud83c\udfff", + "printer": "\ud83d\udda8", + "projector": "\ud83d\udcfd", + "punch": "\ud83d\udc4a", + "punch_tone1": "\ud83d\udc4a\ud83c\udffb", + "punch_tone2": "\ud83d\udc4a\ud83c\udffc", + "punch_tone3": "\ud83d\udc4a\ud83c\udffd", + "punch_tone4": "\ud83d\udc4a\ud83c\udffe", + "punch_tone5": "\ud83d\udc4a\ud83c\udfff", + "purple_heart": "\ud83d\udc9c", + "purse": "\ud83d\udc5b", + "pushpin": "\ud83d\udccc", + "put_litter_in_its_place": "\ud83d\udeae", + "question": "\u2753", + "rabbit": "\ud83d\udc30", + "rabbit2": "\ud83d\udc07", + "race_car": "\ud83c\udfce", + "racehorse": "\ud83d\udc0e", + "radio": "\ud83d\udcfb", + "radio_button": "\ud83d\udd18", + "radioactive": "\u2622", + "rage": "\ud83d\ude21", + "railway_car": "\ud83d\ude83", + "railway_track": "\ud83d\udee4", + "rainbow": "\ud83c\udf08", + "raised_hand": "\u270b", + "raised_hand_tone1": "\u270b\ud83c\udffb", + "raised_hand_tone2": "\u270b\ud83c\udffc", + "raised_hand_tone3": "\u270b\ud83c\udffd", + "raised_hand_tone4": "\u270b\ud83c\udffe", + "raised_hand_tone5": "\u270b\ud83c\udfff", + "raised_hands": "\ud83d\ude4c", + "raised_hands_tone1": "\ud83d\ude4c\ud83c\udffb", + "raised_hands_tone2": "\ud83d\ude4c\ud83c\udffc", + "raised_hands_tone3": "\ud83d\ude4c\ud83c\udffd", + "raised_hands_tone4": "\ud83d\ude4c\ud83c\udffe", + "raised_hands_tone5": "\ud83d\ude4c\ud83c\udfff", + "raising_hand": "\ud83d\ude4b", + "raising_hand_tone1": "\ud83d\ude4b\ud83c\udffb", + "raising_hand_tone2": "\ud83d\ude4b\ud83c\udffc", + "raising_hand_tone3": "\ud83d\ude4b\ud83c\udffd", + "raising_hand_tone4": "\ud83d\ude4b\ud83c\udffe", + "raising_hand_tone5": "\ud83d\ude4b\ud83c\udfff", + "ram": "\ud83d\udc0f", + "ramen": "\ud83c\udf5c", + "rat": "\ud83d\udc00", + "record_button": "\u23fa", + "recycle": "\u267b", + "red_car": "\ud83d\ude97", + "red_circle": "\ud83d\udd34", + "registered": "\u00ae", + "relaxed": "\u263a", + "relieved": "\ud83d\ude0c", + "reminder_ribbon": "\ud83c\udf97", + "repeat": "\ud83d\udd01", + "repeat_one": "\ud83d\udd02", + "restroom": "\ud83d\udebb", + "revolving_hearts": "\ud83d\udc9e", + "rewind": "\u23ea", + "ribbon": "\ud83c\udf80", + "rice": "\ud83c\udf5a", + "rice_ball": "\ud83c\udf59", + "rice_cracker": "\ud83c\udf58", + "rice_scene": "\ud83c\udf91", + "ring": "\ud83d\udc8d", + "robot": "\ud83e\udd16", + "rocket": "\ud83d\ude80", + "roller_coaster": "\ud83c\udfa2", + "rolling_eyes": "\ud83d\ude44", + "rooster": "\ud83d\udc13", + "rose": "\ud83c\udf39", + "rosette": "\ud83c\udff5", + "rotating_light": "\ud83d\udea8", + "round_pushpin": "\ud83d\udccd", + "rowboat": "\ud83d\udea3", + "rowboat_tone1": "\ud83d\udea3\ud83c\udffb", + "rowboat_tone2": "\ud83d\udea3\ud83c\udffc", + "rowboat_tone3": "\ud83d\udea3\ud83c\udffd", + "rowboat_tone4": "\ud83d\udea3\ud83c\udffe", + "rowboat_tone5": "\ud83d\udea3\ud83c\udfff", + "rugby_football": "\ud83c\udfc9", + "runner": "\ud83c\udfc3", + "runner_tone1": "\ud83c\udfc3\ud83c\udffb", + "runner_tone2": "\ud83c\udfc3\ud83c\udffc", + "runner_tone3": "\ud83c\udfc3\ud83c\udffd", + "runner_tone4": "\ud83c\udfc3\ud83c\udffe", + "runner_tone5": "\ud83c\udfc3\ud83c\udfff", + "running_shirt_with_sash": "\ud83c\udfbd", + "sa": "\ud83c\ude02", + "sagittarius": "\u2650", + "sailboat": "\u26f5", + "sake": "\ud83c\udf76", + "sandal": "\ud83d\udc61", + "santa": "\ud83c\udf85", + "santa_tone1": "\ud83c\udf85\ud83c\udffb", + "santa_tone2": "\ud83c\udf85\ud83c\udffc", + "santa_tone3": "\ud83c\udf85\ud83c\udffd", + "santa_tone4": "\ud83c\udf85\ud83c\udffe", + "santa_tone5": "\ud83c\udf85\ud83c\udfff", + "satellite": "\ud83d\udce1", + "satellite_orbital": "\ud83d\udef0", + "saxophone": "\ud83c\udfb7", + "scales": "\u2696", + "school": "\ud83c\udfeb", + "school_satchel": "\ud83c\udf92", + "scissors": "\u2702", + "scorpion": "\ud83e\udd82", + "scorpius": "\u264f", + "scream": "\ud83d\ude31", + "scream_cat": "\ud83d\ude40", + "scroll": "\ud83d\udcdc", + "seat": "\ud83d\udcba", + "secret": "\u3299", + "see_no_evil": "\ud83d\ude48", + "seedling": "\ud83c\udf31", + "seven": "7\u20e3", + "shamrock": "\u2618", + "shaved_ice": "\ud83c\udf67", + "sheep": "\ud83d\udc11", + "shell": "\ud83d\udc1a", + "shield": "\ud83d\udee1", + "shinto_shrine": "\u26e9", + "ship": "\ud83d\udea2", + "shirt": "\ud83d\udc55", + "shopping_bags": "\ud83d\udecd", + "shower": "\ud83d\udebf", + "signal_strength": "\ud83d\udcf6", + "six": "6\u20e3", + "six_pointed_star": "\ud83d\udd2f", + "ski": "\ud83c\udfbf", + "skier": "\u26f7", + "skull": "\ud83d\udc80", + "skull_crossbones": "\u2620", + "sleeping": "\ud83d\ude34", + "sleeping_accommodation": "\ud83d\udecc", + "sleepy": "\ud83d\ude2a", + "slight_frown": "\ud83d\ude41", + "slight_smile": "\ud83d\ude42", + "slot_machine": "\ud83c\udfb0", + "small_blue_diamond": "\ud83d\udd39", + "small_orange_diamond": "\ud83d\udd38", + "small_red_triangle": "\ud83d\udd3a", + "small_red_triangle_down": "\ud83d\udd3b", + "smile": "\ud83d\ude04", + "smile_cat": "\ud83d\ude38", + "smiley": "\ud83d\ude03", + "smiley_cat": "\ud83d\ude3a", + "smiling_imp": "\ud83d\ude08", + "smirk": "\ud83d\ude0f", + "smirk_cat": "\ud83d\ude3c", + "smoking": "\ud83d\udeac", + "snail": "\ud83d\udc0c", + "snake": "\ud83d\udc0d", + "snowboarder": "\ud83c\udfc2", + "snowflake": "\u2744", + "snowman": "\u26c4", + "snowman2": "\u2603", + "sob": "\ud83d\ude2d", + "soccer": "\u26bd", + "soon": "\ud83d\udd1c", + "sos": "\ud83c\udd98", + "sound": "\ud83d\udd09", + "space_invader": "\ud83d\udc7e", + "spades": "\u2660", + "spaghetti": "\ud83c\udf5d", + "sparkle": "\u2747", + "sparkler": "\ud83c\udf87", + "sparkles": "\u2728", + "sparkling_heart": "\ud83d\udc96", + "speak_no_evil": "\ud83d\ude4a", + "speaker": "\ud83d\udd08", + "speaking_head": "\ud83d\udde3", + "speech_balloon": "\ud83d\udcac", + "speedboat": "\ud83d\udea4", + "spider": "\ud83d\udd77", + "spider_web": "\ud83d\udd78", + "spy": "\ud83d\udd75", + "spy_tone1": "\ud83d\udd75\ud83c\udffb", + "spy_tone2": "\ud83d\udd75\ud83c\udffc", + "spy_tone3": "\ud83d\udd75\ud83c\udffd", + "spy_tone4": "\ud83d\udd75\ud83c\udffe", + "spy_tone5": "\ud83d\udd75\ud83c\udfff", + "stadium": "\ud83c\udfdf", + "star": "\u2b50", + "star2": "\ud83c\udf1f", + "star_and_crescent": "\u262a", + "star_of_david": "\u2721", + "stars": "\ud83c\udf20", + "station": "\ud83d\ude89", + "statue_of_liberty": "\ud83d\uddfd", + "steam_locomotive": "\ud83d\ude82", + "stew": "\ud83c\udf72", + "stop_button": "\u23f9", + "stopwatch": "\u23f1", + "straight_ruler": "\ud83d\udccf", + "strawberry": "\ud83c\udf53", + "stuck_out_tongue": "\ud83d\ude1b", + "stuck_out_tongue_closed_eyes": "\ud83d\ude1d", + "stuck_out_tongue_winking_eye": "\ud83d\ude1c", + "sun_with_face": "\ud83c\udf1e", + "sunflower": "\ud83c\udf3b", + "sunglasses": "\ud83d\ude0e", + "sunny": "\u2600", + "sunrise": "\ud83c\udf05", + "sunrise_over_mountains": "\ud83c\udf04", + "surfer": "\ud83c\udfc4", + "surfer_tone1": "\ud83c\udfc4\ud83c\udffb", + "surfer_tone2": "\ud83c\udfc4\ud83c\udffc", + "surfer_tone3": "\ud83c\udfc4\ud83c\udffd", + "surfer_tone4": "\ud83c\udfc4\ud83c\udffe", + "surfer_tone5": "\ud83c\udfc4\ud83c\udfff", + "sushi": "\ud83c\udf63", + "suspension_railway": "\ud83d\ude9f", + "sweat": "\ud83d\ude13", + "sweat_drops": "\ud83d\udca6", + "sweat_smile": "\ud83d\ude05", + "sweet_potato": "\ud83c\udf60", + "swimmer": "\ud83c\udfca", + "swimmer_tone1": "\ud83c\udfca\ud83c\udffb", + "swimmer_tone2": "\ud83c\udfca\ud83c\udffc", + "swimmer_tone3": "\ud83c\udfca\ud83c\udffd", + "swimmer_tone4": "\ud83c\udfca\ud83c\udffe", + "swimmer_tone5": "\ud83c\udfca\ud83c\udfff", + "symbols": "\ud83d\udd23", + "synagogue": "\ud83d\udd4d", + "syringe": "\ud83d\udc89", + "taco": "\ud83c\udf2e", + "tada": "\ud83c\udf89", + "tanabata_tree": "\ud83c\udf8b", + "tangerine": "\ud83c\udf4a", + "taurus": "\u2649", + "taxi": "\ud83d\ude95", + "tea": "\ud83c\udf75", + "telephone": "\u260e", + "telephone_receiver": "\ud83d\udcde", + "telescope": "\ud83d\udd2d", + "ten": "\ud83d\udd1f", + "tennis": "\ud83c\udfbe", + "tent": "\u26fa", + "thermometer": "\ud83c\udf21", + "thermometer_face": "\ud83e\udd12", + "thinking": "\ud83e\udd14", + "thought_balloon": "\ud83d\udcad", + "three": "3\u20e3", + "thumbsdown": "\ud83d\udc4e", + "thumbsdown_tone1": "\ud83d\udc4e\ud83c\udffb", + "thumbsdown_tone2": "\ud83d\udc4e\ud83c\udffc", + "thumbsdown_tone3": "\ud83d\udc4e\ud83c\udffd", + "thumbsdown_tone4": "\ud83d\udc4e\ud83c\udffe", + "thumbsdown_tone5": "\ud83d\udc4e\ud83c\udfff", + "thumbsup": "\ud83d\udc4d", + "thumbsup_tone1": "\ud83d\udc4d\ud83c\udffb", + "thumbsup_tone2": "\ud83d\udc4d\ud83c\udffc", + "thumbsup_tone3": "\ud83d\udc4d\ud83c\udffd", + "thumbsup_tone4": "\ud83d\udc4d\ud83c\udffe", + "thumbsup_tone5": "\ud83d\udc4d\ud83c\udfff", + "thunder_cloud_rain": "\u26c8", + "ticket": "\ud83c\udfab", + "tickets": "\ud83c\udf9f", + "tiger": "\ud83d\udc2f", + "tiger2": "\ud83d\udc05", + "timer": "\u23f2", + "tired_face": "\ud83d\ude2b", + "tm": "\u2122", + "toilet": "\ud83d\udebd", + "tokyo_tower": "\ud83d\uddfc", + "tomato": "\ud83c\udf45", + "tone1": "\ud83c\udffb", + "tone2": "\ud83c\udffc", + "tone3": "\ud83c\udffd", + "tone4": "\ud83c\udffe", + "tone5": "\ud83c\udfff", + "tongue": "\ud83d\udc45", + "tools": "\ud83d\udee0", + "top": "\ud83d\udd1d", + "tophat": "\ud83c\udfa9", + "track_next": "\u23ed", + "track_previous": "\u23ee", + "trackball": "\ud83d\uddb2", + "tractor": "\ud83d\ude9c", + "traffic_light": "\ud83d\udea5", + "train": "\ud83d\ude8b", + "train2": "\ud83d\ude86", + "tram": "\ud83d\ude8a", + "triangular_flag_on_post": "\ud83d\udea9", + "triangular_ruler": "\ud83d\udcd0", + "trident": "\ud83d\udd31", + "triumph": "\ud83d\ude24", + "trolleybus": "\ud83d\ude8e", + "trophy": "\ud83c\udfc6", + "tropical_drink": "\ud83c\udf79", + "tropical_fish": "\ud83d\udc20", + "truck": "\ud83d\ude9a", + "trumpet": "\ud83c\udfba", + "tulip": "\ud83c\udf37", + "turkey": "\ud83e\udd83", + "turtle": "\ud83d\udc22", + "tv": "\ud83d\udcfa", + "twisted_rightwards_arrows": "\ud83d\udd00", + "two": "2\u20e3", + "two_hearts": "\ud83d\udc95", + "two_men_holding_hands": "\ud83d\udc6c", + "two_women_holding_hands": "\ud83d\udc6d", + "u5272": "\ud83c\ude39", + "u5408": "\ud83c\ude34", + "u55b6": "\ud83c\ude3a", + "u6307": "\ud83c\ude2f", + "u6708": "\ud83c\ude37", + "u6709": "\ud83c\ude36", + "u6e80": "\ud83c\ude35", + "u7121": "\ud83c\ude1a", + "u7533": "\ud83c\ude38", + "u7981": "\ud83c\ude32", + "u7a7a": "\ud83c\ude33", + "umbrella": "\u2614", + "umbrella2": "\u2602", + "unamused": "\ud83d\ude12", + "underage": "\ud83d\udd1e", + "unicorn": "\ud83e\udd84", + "unlock": "\ud83d\udd13", + "up": "\ud83c\udd99", + "upside_down": "\ud83d\ude43", + "urn": "\u26b1", + "v": "\u270c", + "v_tone1": "\u270c\ud83c\udffb", + "v_tone2": "\u270c\ud83c\udffc", + "v_tone3": "\u270c\ud83c\udffd", + "v_tone4": "\u270c\ud83c\udffe", + "v_tone5": "\u270c\ud83c\udfff", + "vertical_traffic_light": "\ud83d\udea6", + "vhs": "\ud83d\udcfc", + "vibration_mode": "\ud83d\udcf3", + "video_camera": "\ud83d\udcf9", + "video_game": "\ud83c\udfae", + "violin": "\ud83c\udfbb", + "virgo": "\u264d", + "volcano": "\ud83c\udf0b", + "volleyball": "\ud83c\udfd0", + "vs": "\ud83c\udd9a", + "vulcan": "\ud83d\udd96", + "vulcan_tone1": "\ud83d\udd96\ud83c\udffb", + "vulcan_tone2": "\ud83d\udd96\ud83c\udffc", + "vulcan_tone3": "\ud83d\udd96\ud83c\udffd", + "vulcan_tone4": "\ud83d\udd96\ud83c\udffe", + "vulcan_tone5": "\ud83d\udd96\ud83c\udfff", + "walking": "\ud83d\udeb6", + "walking_tone1": "\ud83d\udeb6\ud83c\udffb", + "walking_tone2": "\ud83d\udeb6\ud83c\udffc", + "walking_tone3": "\ud83d\udeb6\ud83c\udffd", + "walking_tone4": "\ud83d\udeb6\ud83c\udffe", + "walking_tone5": "\ud83d\udeb6\ud83c\udfff", + "waning_crescent_moon": "\ud83c\udf18", + "waning_gibbous_moon": "\ud83c\udf16", + "warning": "\u26a0", + "wastebasket": "\ud83d\uddd1", + "watch": "\u231a", + "water_buffalo": "\ud83d\udc03", + "watermelon": "\ud83c\udf49", + "wave": "\ud83d\udc4b", + "wave_tone1": "\ud83d\udc4b\ud83c\udffb", + "wave_tone2": "\ud83d\udc4b\ud83c\udffc", + "wave_tone3": "\ud83d\udc4b\ud83c\udffd", + "wave_tone4": "\ud83d\udc4b\ud83c\udffe", + "wave_tone5": "\ud83d\udc4b\ud83c\udfff", + "wavy_dash": "\u3030", + "waxing_crescent_moon": "\ud83c\udf12", + "waxing_gibbous_moon": "\ud83c\udf14", + "wc": "\ud83d\udebe", + "weary": "\ud83d\ude29", + "wedding": "\ud83d\udc92", + "whale": "\ud83d\udc33", + "whale2": "\ud83d\udc0b", + "wheel_of_dharma": "\u2638", + "wheelchair": "\u267f", + "white_check_mark": "\u2705", + "white_circle": "\u26aa", + "white_flower": "\ud83d\udcae", + "white_large_square": "\u2b1c", + "white_medium_small_square": "\u25fd", + "white_medium_square": "\u25fb", + "white_small_square": "\u25ab", + "white_square_button": "\ud83d\udd33", + "white_sun_cloud": "\ud83c\udf25", + "white_sun_rain_cloud": "\ud83c\udf26", + "white_sun_small_cloud": "\ud83c\udf24", + "wind_blowing_face": "\ud83c\udf2c", + "wind_chime": "\ud83c\udf90", + "wine_glass": "\ud83c\udf77", + "wink": "\ud83d\ude09", + "wolf": "\ud83d\udc3a", + "woman": "\ud83d\udc69", + "woman_tone1": "\ud83d\udc69\ud83c\udffb", + "woman_tone2": "\ud83d\udc69\ud83c\udffc", + "woman_tone3": "\ud83d\udc69\ud83c\udffd", + "woman_tone4": "\ud83d\udc69\ud83c\udffe", + "woman_tone5": "\ud83d\udc69\ud83c\udfff", + "womans_clothes": "\ud83d\udc5a", + "womans_hat": "\ud83d\udc52", + "womens": "\ud83d\udeba", + "worried": "\ud83d\ude1f", + "wrench": "\ud83d\udd27", + "writing_hand": "\u270d", + "writing_hand_tone1": "\u270d\ud83c\udffb", + "writing_hand_tone2": "\u270d\ud83c\udffc", + "writing_hand_tone3": "\u270d\ud83c\udffd", + "writing_hand_tone4": "\u270d\ud83c\udffe", + "writing_hand_tone5": "\u270d\ud83c\udfff", + "x": "\u274c", + "yellow_heart": "\ud83d\udc9b", + "yen": "\ud83d\udcb4", + "yin_yang": "\u262f", + "yum": "\ud83d\ude0b", + "zap": "\u26a1", + "zero": "0\u20e3", + "zipper_mouth": "\ud83e\udd10", + "zzz": "\ud83d\udca4", + "100": "\ud83d\udcaf", + "1234": "\ud83d\udd22" +} diff --git a/scripts/celerity/generate_emoji.php b/scripts/celerity/generate_emoji.php new file mode 100755 index 0000000000..d533752932 --- /dev/null +++ b/scripts/celerity/generate_emoji.php @@ -0,0 +1,50 @@ +#!/usr/bin/env php +setTagline(pht('regenerate Emoji data sheets')); +$args->setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'force', + 'help' => pht('Force regeneration even if sources have not changed.'), + ), + )); + +$root = dirname(phutil_get_library_root('phabricator')); +// move this to an argument? +$path = $root.'/emoji_strategy.json'; +$export_path = $root.'/resources/emoji/manifest.json'; + +if (Filesystem::pathExists($path)) { + $json = Filesystem::readFile($path); + + $emojis = phutil_json_decode($json); + $data = array(); + foreach ($emojis as $shortname => $emoji) { + $unicode = $emoji['unicode']; + $codes = explode('-', $unicode); + $hex = ''; + foreach ($codes as $code) { + $hex .= phutil_utf8_encode_codepoint(hexdec($code)); + } + $data[$shortname] = $hex; + } + + ksort($data); + $json = new PhutilJSON(); + $data = $json->encodeFormatted($data); + Filesystem::writeFile($export_path, $data); + echo pht('Done.')."\n"; +} else { + echo pht('Path %s not exist.', $path)."\n"; +} diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 7ce9b1c72d..f145dd88ec 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -671,12 +671,13 @@ phutil_register_library_map(array( 'DiffusionCommitRevisionReviewersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionReviewersHeraldField.php', 'DiffusionCommitRevisionSubscribersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionSubscribersHeraldField.php', 'DiffusionCommitSearchConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCommitSearchConduitAPIMethod.php', + 'DiffusionCommitStateTransaction' => 'applications/diffusion/xaction/DiffusionCommitStateTransaction.php', 'DiffusionCommitTagsController' => 'applications/diffusion/controller/DiffusionCommitTagsController.php', 'DiffusionCommitTransactionType' => 'applications/diffusion/xaction/DiffusionCommitTransactionType.php', + 'DiffusionCommitVerifyTransaction' => 'applications/diffusion/xaction/DiffusionCommitVerifyTransaction.php', 'DiffusionCompareController' => 'applications/diffusion/controller/DiffusionCompareController.php', 'DiffusionConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionConduitAPIMethod.php', 'DiffusionController' => 'applications/diffusion/controller/DiffusionController.php', - 'DiffusionCreateCommentConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCreateCommentConduitAPIMethod.php', 'DiffusionCreateRepositoriesCapability' => 'applications/diffusion/capability/DiffusionCreateRepositoriesCapability.php', 'DiffusionDaemonLockException' => 'applications/diffusion/exception/DiffusionDaemonLockException.php', 'DiffusionDefaultEditCapability' => 'applications/diffusion/capability/DiffusionDefaultEditCapability.php', @@ -1412,6 +1413,7 @@ phutil_register_library_map(array( 'LiskRawMigrationIterator' => 'infrastructure/storage/lisk/LiskRawMigrationIterator.php', 'MacroConduitAPIMethod' => 'applications/macro/conduit/MacroConduitAPIMethod.php', 'MacroCreateMemeConduitAPIMethod' => 'applications/macro/conduit/MacroCreateMemeConduitAPIMethod.php', + 'MacroEmojiExample' => 'applications/uiexample/examples/MacroEmojiExample.php', 'MacroQueryConduitAPIMethod' => 'applications/macro/conduit/MacroQueryConduitAPIMethod.php', 'ManiphestAssignEmailCommand' => 'applications/maniphest/command/ManiphestAssignEmailCommand.php', 'ManiphestAssigneeDatasource' => 'applications/maniphest/typeahead/ManiphestAssigneeDatasource.php', @@ -1830,7 +1832,6 @@ phutil_register_library_map(array( 'PhabricatorApplicationSearchEngine' => 'applications/search/engine/PhabricatorApplicationSearchEngine.php', 'PhabricatorApplicationSearchEngineTestCase' => 'applications/search/engine/__tests__/PhabricatorApplicationSearchEngineTestCase.php', 'PhabricatorApplicationSearchResultView' => 'applications/search/view/PhabricatorApplicationSearchResultView.php', - 'PhabricatorApplicationStatusView' => 'applications/meta/view/PhabricatorApplicationStatusView.php', 'PhabricatorApplicationTestCase' => 'applications/base/__tests__/PhabricatorApplicationTestCase.php', 'PhabricatorApplicationTransaction' => 'applications/transactions/storage/PhabricatorApplicationTransaction.php', 'PhabricatorApplicationTransactionComment' => 'applications/transactions/storage/PhabricatorApplicationTransactionComment.php', @@ -2627,6 +2628,7 @@ phutil_register_library_map(array( 'PhabricatorEmailVarySubjectsSetting' => 'applications/settings/setting/PhabricatorEmailVarySubjectsSetting.php', 'PhabricatorEmailVerificationController' => 'applications/auth/controller/PhabricatorEmailVerificationController.php', 'PhabricatorEmbedFileRemarkupRule' => 'applications/files/markup/PhabricatorEmbedFileRemarkupRule.php', + 'PhabricatorEmojiDatasource' => 'applications/macro/typeahead/PhabricatorEmojiDatasource.php', 'PhabricatorEmojiRemarkupRule' => 'applications/macro/markup/PhabricatorEmojiRemarkupRule.php', 'PhabricatorEmojiTranslation' => 'infrastructure/internationalization/translation/PhabricatorEmojiTranslation.php', 'PhabricatorEmptyQueryException' => 'infrastructure/query/PhabricatorEmptyQueryException.php', @@ -5377,12 +5379,13 @@ phutil_register_library_map(array( 'DiffusionCommitRevisionReviewersHeraldField' => 'DiffusionCommitHeraldField', 'DiffusionCommitRevisionSubscribersHeraldField' => 'DiffusionCommitHeraldField', 'DiffusionCommitSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DiffusionCommitStateTransaction' => 'DiffusionCommitTransactionType', 'DiffusionCommitTagsController' => 'DiffusionController', 'DiffusionCommitTransactionType' => 'PhabricatorModularTransactionType', + 'DiffusionCommitVerifyTransaction' => 'DiffusionCommitAuditTransaction', 'DiffusionCompareController' => 'DiffusionController', 'DiffusionConduitAPIMethod' => 'ConduitAPIMethod', 'DiffusionController' => 'PhabricatorController', - 'DiffusionCreateCommentConduitAPIMethod' => 'DiffusionConduitAPIMethod', 'DiffusionCreateRepositoriesCapability' => 'PhabricatorPolicyCapability', 'DiffusionDaemonLockException' => 'Exception', 'DiffusionDefaultEditCapability' => 'PhabricatorPolicyCapability', @@ -6243,6 +6246,7 @@ phutil_register_library_map(array( 'LiskRawMigrationIterator' => 'PhutilBufferedIterator', 'MacroConduitAPIMethod' => 'ConduitAPIMethod', 'MacroCreateMemeConduitAPIMethod' => 'MacroConduitAPIMethod', + 'MacroEmojiExample' => 'PhabricatorUIExample', 'MacroQueryConduitAPIMethod' => 'MacroConduitAPIMethod', 'ManiphestAssignEmailCommand' => 'ManiphestEmailCommand', 'ManiphestAssigneeDatasource' => 'PhabricatorTypeaheadCompositeDatasource', @@ -6712,7 +6716,6 @@ phutil_register_library_map(array( 'PhabricatorApplicationSearchEngine' => 'Phobject', 'PhabricatorApplicationSearchEngineTestCase' => 'PhabricatorTestCase', 'PhabricatorApplicationSearchResultView' => 'Phobject', - 'PhabricatorApplicationStatusView' => 'AphrontView', 'PhabricatorApplicationTestCase' => 'PhabricatorTestCase', 'PhabricatorApplicationTransaction' => array( 'PhabricatorLiskDAO', @@ -7641,6 +7644,7 @@ phutil_register_library_map(array( 'PhabricatorEmailVarySubjectsSetting' => 'PhabricatorSelectSetting', 'PhabricatorEmailVerificationController' => 'PhabricatorAuthController', 'PhabricatorEmbedFileRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhabricatorEmojiDatasource' => 'PhabricatorTypeaheadDatasource', 'PhabricatorEmojiRemarkupRule' => 'PhutilRemarkupRule', 'PhabricatorEmojiTranslation' => 'PhutilTranslation', 'PhabricatorEmptyQueryException' => 'Exception', diff --git a/src/applications/audit/constants/PhabricatorAuditCommitStatusConstants.php b/src/applications/audit/constants/PhabricatorAuditCommitStatusConstants.php index bced1b2dc6..31bb2c22f7 100644 --- a/src/applications/audit/constants/PhabricatorAuditCommitStatusConstants.php +++ b/src/applications/audit/constants/PhabricatorAuditCommitStatusConstants.php @@ -7,12 +7,14 @@ final class PhabricatorAuditCommitStatusConstants extends Phobject { const CONCERN_RAISED = 2; const PARTIALLY_AUDITED = 3; const FULLY_AUDITED = 4; + const NEEDS_VERIFICATION = 5; public static function getStatusNameMap() { $map = array( self::NONE => pht('No Audits'), self::NEEDS_AUDIT => pht('Audit Required'), self::CONCERN_RAISED => pht('Concern Raised'), + self::NEEDS_VERIFICATION => pht('Needs Verification'), self::PARTIALLY_AUDITED => pht('Partially Audited'), self::FULLY_AUDITED => pht('Audited'), ); @@ -28,6 +30,7 @@ final class PhabricatorAuditCommitStatusConstants extends Phobject { return array( self::CONCERN_RAISED, self::NEEDS_AUDIT, + self::NEEDS_VERIFICATION, self::PARTIALLY_AUDITED, ); } @@ -49,6 +52,9 @@ final class PhabricatorAuditCommitStatusConstants extends Phobject { case self::NONE: $color = 'bluegrey'; break; + case self::NEEDS_VERIFICATION: + $color = 'indigo'; + break; default: $color = null; break; @@ -56,7 +62,7 @@ final class PhabricatorAuditCommitStatusConstants extends Phobject { return $color; } - public static function getStatusIcon($code) { + public static function getStatusIcon($code) { switch ($code) { case self::CONCERN_RAISED: $icon = 'fa-times-circle'; @@ -73,6 +79,9 @@ final class PhabricatorAuditCommitStatusConstants extends Phobject { case self::NONE: $icon = 'fa-check'; break; + case self::NEEDS_VERIFICATION: + $icon = 'fa-refresh'; + break; default: $icon = null; break; diff --git a/src/applications/audit/editor/PhabricatorAuditCommentEditor.php b/src/applications/audit/editor/PhabricatorAuditCommentEditor.php index 8a17999ee0..988311d74c 100644 --- a/src/applications/audit/editor/PhabricatorAuditCommentEditor.php +++ b/src/applications/audit/editor/PhabricatorAuditCommentEditor.php @@ -2,42 +2,6 @@ final class PhabricatorAuditCommentEditor extends PhabricatorEditor { - /** - * Load the PHIDs for all objects the user has the authority to act as an - * audit for. This includes themselves, and any packages they are an owner - * of. - */ - public static function loadAuditPHIDsForUser(PhabricatorUser $user) { - $phids = array(); - - // TODO: This method doesn't really use the right viewer, but in practice we - // never issue this query of this type on behalf of another user and are - // unlikely to do so in the future. This entire method should be refactored - // into a Query class, however, and then we should use a proper viewer. - - // The user can audit on their own behalf. - $phids[$user->getPHID()] = true; - - $owned_packages = id(new PhabricatorOwnersPackageQuery()) - ->setViewer($user) - ->withAuthorityPHIDs(array($user->getPHID())) - ->execute(); - foreach ($owned_packages as $package) { - $phids[$package->getPHID()] = true; - } - - // The user can audit on behalf of all projects they are a member of. - $projects = id(new PhabricatorProjectQuery()) - ->setViewer($user) - ->withMemberPHIDs(array($user->getPHID())) - ->execute(); - foreach ($projects as $project) { - $phids[$project->getPHID()] = true; - } - - return array_keys($phids); - } - public static function getMailThreading( PhabricatorRepository $repository, PhabricatorRepositoryCommit $commit) { diff --git a/src/applications/audit/editor/PhabricatorAuditEditor.php b/src/applications/audit/editor/PhabricatorAuditEditor.php index 4b2d9bec29..952cf50a77 100644 --- a/src/applications/audit/editor/PhabricatorAuditEditor.php +++ b/src/applications/audit/editor/PhabricatorAuditEditor.php @@ -11,6 +11,7 @@ final class PhabricatorAuditEditor private $auditorPHIDs = array(); private $didExpandInlineState = false; + private $oldAuditStatus = null; public function addAuditReason($phid, $reason) { if (!isset($this->auditReasonMap[$phid])) { @@ -60,7 +61,6 @@ final class PhabricatorAuditEditor // TODO: These will get modernized eventually, but that can happen one // at a time later on. - $types[] = PhabricatorAuditActionConstants::ACTION; $types[] = PhabricatorAuditActionConstants::INLINE; $types[] = PhabricatorAuditActionConstants::ADD_AUDITORS; @@ -79,6 +79,12 @@ final class PhabricatorAuditEditor } } + $this->oldAuditStatus = $object->getAuditStatus(); + + $object->loadAndAttachAuditAuthority( + $this->getActor(), + $this->getActingAsPHID()); + return parent::expandTransactions($object, $xactions); } @@ -98,7 +104,6 @@ final class PhabricatorAuditEditor PhabricatorLiskDAO $object, PhabricatorApplicationTransaction $xaction) { switch ($xaction->getTransactionType()) { - case PhabricatorAuditActionConstants::ACTION: case PhabricatorAuditActionConstants::INLINE: case PhabricatorAuditTransaction::TYPE_COMMIT: return null; @@ -116,7 +121,6 @@ final class PhabricatorAuditEditor PhabricatorApplicationTransaction $xaction) { switch ($xaction->getTransactionType()) { - case PhabricatorAuditActionConstants::ACTION: case PhabricatorAuditActionConstants::INLINE: case PhabricatorAuditActionConstants::ADD_AUDITORS: case PhabricatorAuditTransaction::TYPE_COMMIT: @@ -131,7 +135,6 @@ final class PhabricatorAuditEditor PhabricatorApplicationTransaction $xaction) { switch ($xaction->getTransactionType()) { - case PhabricatorAuditActionConstants::ACTION: case PhabricatorAuditActionConstants::INLINE: case PhabricatorAuditActionConstants::ADD_AUDITORS: case PhabricatorAuditTransaction::TYPE_COMMIT: @@ -146,7 +149,6 @@ final class PhabricatorAuditEditor PhabricatorApplicationTransaction $xaction) { switch ($xaction->getTransactionType()) { - case PhabricatorAuditActionConstants::ACTION: case PhabricatorAuditTransaction::TYPE_COMMIT: return; case PhabricatorAuditActionConstants::INLINE: @@ -267,108 +269,44 @@ final class PhabricatorAuditEditor case PhabricatorAuditTransaction::TYPE_COMMIT: $import_status_flag = PhabricatorRepositoryCommit::IMPORTED_HERALD; break; - case PhabricatorAuditActionConstants::ACTION: - $new = $xaction->getNewValue(); - switch ($new) { - case PhabricatorAuditActionConstants::CLOSE: - // "Close" means wipe out all the concerns. - $requests = $object->getAudits(); - foreach ($requests as $request) { - if ($request->getAuditStatus() == $status_concerned) { - $request - ->setAuditStatus($status_closed) - ->save(); - } - } - break; - case PhabricatorAuditActionConstants::RESIGN: - $requests = $object->getAudits(); - $requests = mpull($requests, null, 'getAuditorPHID'); - $actor_request = idx($requests, $actor_phid); - - // If the actor doesn't currently have a relationship to the - // commit, add one explicitly. For example, this allows members - // of a project to resign from a commit and have it drop out of - // their queue. - - if (!$actor_request) { - $actor_request = id(new PhabricatorRepositoryAuditRequest()) - ->setCommitPHID($object->getPHID()) - ->setAuditorPHID($actor_phid); - - $requests[] = $actor_request; - $object->attachAudits($requests); - } - - $actor_request - ->setAuditStatus($status_resigned) - ->save(); - break; - case PhabricatorAuditActionConstants::ACCEPT: - case PhabricatorAuditActionConstants::CONCERN: - if ($new == PhabricatorAuditActionConstants::ACCEPT) { - $new_status = $status_accepted; - } else { - $new_status = $status_concerned; - } - - $requests = $object->getAudits(); - $requests = mpull($requests, null, 'getAuditorPHID'); - - // Figure out which requests the actor has authority over: these - // are user requests where they are the auditor, and packages - // and projects they are a member of. - - if ($actor_is_author) { - // When modifying your own commits, you act only on behalf of - // yourself, not your packages/projects -- the idea being that - // you can't accept your own commits. - $authority_phids = array($actor_phid); - } else { - $authority_phids = - PhabricatorAuditCommentEditor::loadAuditPHIDsForUser( - $this->requireActor()); - } - - $authority = array_select_keys( - $requests, - $authority_phids); - - if (!$authority) { - // If the actor has no authority over any existing requests, - // create a new request for them. - - $actor_request = id(new PhabricatorRepositoryAuditRequest()) - ->setCommitPHID($object->getPHID()) - ->setAuditorPHID($actor_phid) - ->setAuditStatus($new_status) - ->save(); - - $requests[$actor_phid] = $actor_request; - $object->attachAudits($requests); - } else { - // Otherwise, update the audit status of the existing requests. - foreach ($authority as $request) { - $request - ->setAuditStatus($new_status) - ->save(); - } - } - break; - - } - break; } } + $old_status = $this->oldAuditStatus; + $requests = $object->getAudits(); $object->updateAuditStatus($requests); + + $new_status = $object->getAuditStatus(); + $object->save(); if ($import_status_flag) { $object->writeImportStatusFlag($import_status_flag); } + $partial_status = PhabricatorAuditCommitStatusConstants::PARTIALLY_AUDITED; + + // If the commit has changed state after this edit, add an informational + // transaction about the state change. + if ($old_status != $new_status) { + if ($new_status == $partial_status) { + // This state isn't interesting enough to get a transaction. The + // best way we could lead the user forward is something like "This + // commit still requires additional audits." but that's redundant and + // probably not very useful. + } else { + $xaction = $object->getApplicationTransactionTemplate() + ->setTransactionType(DiffusionCommitStateTransaction::TRANSACTIONTYPE) + ->setOldValue($old_status) + ->setNewValue($new_status); + + $xaction = $this->populateTransaction($object, $xaction); + + $xaction->save(); + } + } + // Collect auditor PHIDs for building mail. $this->auditorPHIDs = mpull($object->getAudits(), 'getAuditorPHID'); @@ -396,7 +334,6 @@ final class PhabricatorAuditEditor if (!$this->didExpandInlineState) { switch ($xaction->getTransactionType()) { case PhabricatorTransactions::TYPE_COMMENT: - case PhabricatorAuditActionConstants::ACTION: $this->didExpandInlineState = true; $actor_phid = $this->getActingAsPHID(); @@ -487,69 +424,6 @@ final class PhabricatorAuditEditor return array_values(array_merge($head, $tail)); } - protected function validateTransaction( - PhabricatorLiskDAO $object, - $type, - array $xactions) { - - $errors = parent::validateTransaction($object, $type, $xactions); - - foreach ($xactions as $xaction) { - switch ($type) { - case PhabricatorAuditActionConstants::ACTION: - $error = $this->validateAuditAction( - $object, - $type, - $xaction, - $xaction->getNewValue()); - if ($error) { - $errors[] = new PhabricatorApplicationTransactionValidationError( - $type, - pht('Invalid'), - $error, - $xaction); - } - break; - } - } - - return $errors; - } - - private function validateAuditAction( - PhabricatorLiskDAO $object, - $type, - PhabricatorAuditTransaction $xaction, - $action) { - - $can_author_close_key = 'audit.can-author-close-audit'; - $can_author_close = PhabricatorEnv::getEnvConfig($can_author_close_key); - - $actor_is_author = ($object->getAuthorPHID()) && - ($object->getAuthorPHID() == $this->getActingAsPHID()); - - switch ($action) { - case PhabricatorAuditActionConstants::CLOSE: - if (!$actor_is_author) { - return pht( - 'You can not close this audit because you are not the author '. - 'of the commit.'); - } - - if (!$can_author_close) { - return pht( - 'You can not close this audit because "%s" is disabled in '. - 'the Phabricator configuration.', - $can_author_close_key); - } - - break; - } - - return null; - } - - protected function supportsSearch() { return true; } diff --git a/src/applications/audit/storage/PhabricatorAuditTransaction.php b/src/applications/audit/storage/PhabricatorAuditTransaction.php index ff3751b912..d09bdb76ce 100644 --- a/src/applications/audit/storage/PhabricatorAuditTransaction.php +++ b/src/applications/audit/storage/PhabricatorAuditTransaction.php @@ -498,4 +498,22 @@ final class PhabricatorAuditTransaction } return $tags; } + + public function shouldDisplayGroupWith(array $group) { + // Make the "This commit now requires audit." state message stand alone. + $type_state = DiffusionCommitStateTransaction::TRANSACTIONTYPE; + + if ($this->getTransactionType() == $type_state) { + return false; + } + + foreach ($group as $xaction) { + if ($xaction->getTransactionType() == $type_state) { + return false; + } + } + + return parent::shouldDisplayGroupWith($group); + } + } diff --git a/src/applications/base/PhabricatorApplication.php b/src/applications/base/PhabricatorApplication.php index 63ab9d2315..caf2dd4612 100644 --- a/src/applications/base/PhabricatorApplication.php +++ b/src/applications/base/PhabricatorApplication.php @@ -12,8 +12,6 @@ abstract class PhabricatorApplication extends Phobject implements PhabricatorPolicyInterface { - const MAX_STATUS_ITEMS = 100; - const GROUP_CORE = 'core'; const GROUP_UTILITIES = 'util'; const GROUP_ADMIN = 'admin'; @@ -272,20 +270,6 @@ abstract class PhabricatorApplication /* -( UI Integration )----------------------------------------------------- */ - /** - * Render status elements (like "3 Waiting Reviews") for application list - * views. These provide a way to alert users to new or pending action items - * in applications. - * - * @param PhabricatorUser Viewing user. - * @return list Application status elements. - * @task ui - */ - public function loadStatus(PhabricatorUser $user) { - return array(); - } - - /** * You can provide an optional piece of flavor text for the application. This * is currently rendered in application launch views if the application has no diff --git a/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php b/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php index b68c23d69b..2395ad9365 100644 --- a/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php +++ b/src/applications/celerity/postprocessor/CelerityDefaultPostprocessor.php @@ -20,13 +20,13 @@ final class CelerityDefaultPostprocessor public function buildVariables() { return array( // Fonts - 'basefont' => "13px 'Segoe UI', 'Segoe UI Web Regular', ". - "'Segoe UI Symbol', 'Lato', 'Helvetica Neue', Helvetica, ". - "Arial, sans-serif", + 'basefont' => "13px 'Segoe UI', 'Segoe UI Emoji', ". + "'Segoe UI Symbol', 'Lato', 'Helvetica Neue', ". + "Helvetica, Arial, sans-serif", - 'fontfamily' => "'Segoe UI', 'Segoe UI Web Regular', ". - "'Segoe UI Symbol', 'Lato', 'Helvetica Neue', Helvetica, ". - "Arial, sans-serif", + 'fontfamily' => "'Segoe UI', 'Segoe UI Emoji', ". + "'Segoe UI Symbol', 'Lato', 'Helvetica Neue', ". + "Helvetica, Arial, sans-serif", // Drop Shadow 'dropshadow' => '0 2px 12px rgba(0, 0, 0, .20)', diff --git a/src/applications/differential/application/PhabricatorDifferentialApplication.php b/src/applications/differential/application/PhabricatorDifferentialApplication.php index b5a3ea95dc..1b6443a9e0 100644 --- a/src/applications/differential/application/PhabricatorDifferentialApplication.php +++ b/src/applications/differential/application/PhabricatorDifferentialApplication.php @@ -103,82 +103,6 @@ final class PhabricatorDifferentialApplication extends PhabricatorApplication { ); } - public static function loadNeedAttentionRevisions(PhabricatorUser $viewer) { - if (!$viewer->isLoggedIn()) { - return array(); - } - - $viewer_phid = $viewer->getPHID(); - - $responsible_phids = id(new DifferentialResponsibleDatasource()) - ->setViewer($viewer) - ->evaluateTokens(array($viewer_phid)); - - $revision_query = id(new DifferentialRevisionQuery()) - ->setViewer($viewer) - ->withStatus(DifferentialRevisionQuery::STATUS_OPEN) - ->withResponsibleUsers($responsible_phids) - ->needReviewerStatus(true) - ->needRelationships(true) - ->needFlags(true) - ->needDrafts(true) - ->setLimit(self::MAX_STATUS_ITEMS); - - $revisions = $revision_query->execute(); - - $query = id(new PhabricatorSavedQuery()) - ->attachParameterMap( - array( - 'responsiblePHIDs' => $responsible_phids, - )); - - $groups = id(new DifferentialRevisionRequiredActionResultBucket()) - ->setViewer($viewer) - ->newResultGroups($query, $revisions); - - $include = array(); - foreach ($groups as $group) { - switch ($group->getKey()) { - case DifferentialRevisionRequiredActionResultBucket::KEY_MUSTREVIEW: - case DifferentialRevisionRequiredActionResultBucket::KEY_SHOULDREVIEW: - foreach ($group->getObjects() as $object) { - $include[] = $object; - } - break; - default: - break; - } - } - - return $include; - } - - public function loadStatus(PhabricatorUser $user) { - $revisions = self::loadNeedAttentionRevisions($user); - $limit = self::MAX_STATUS_ITEMS; - - if (count($revisions) >= $limit) { - $display_count = ($limit - 1); - $display_label = pht( - '%s+ Active Review(s)', - new PhutilNumber($display_count)); - } else { - $display_count = count($revisions); - $display_label = pht( - '%s Review(s) Need Attention', - new PhutilNumber($display_count)); - } - - $status = array(); - - $status[] = id(new PhabricatorApplicationStatusView()) - ->setType(PhabricatorApplicationStatusView::TYPE_WARNING) - ->setText($display_label) - ->setCount($display_count); - - return $status; - } - public function supportsEmailIntegration() { return true; } diff --git a/src/applications/differential/customfield/DifferentialCoreCustomField.php b/src/applications/differential/customfield/DifferentialCoreCustomField.php index 6d956ac367..f88ac8836c 100644 --- a/src/applications/differential/customfield/DifferentialCoreCustomField.php +++ b/src/applications/differential/customfield/DifferentialCoreCustomField.php @@ -64,52 +64,11 @@ abstract class DifferentialCoreCustomField continue; } } - - if (is_string($value)) { - $parser = $this->getFieldParser(); - $result = $parser->parseCorpus($value); - - unset($result['__title__']); - unset($result['__summary__']); - - if ($result) { - $error = new PhabricatorApplicationTransactionValidationError( - $type, - pht('Invalid'), - pht( - 'The value you have entered in "%s" can not be parsed '. - 'unambiguously when rendered in a commit message. Edit the '. - 'message so that keywords like "Summary:" and "Test Plan:" do '. - 'not appear at the beginning of lines. Parsed keys: %s.', - $this->getFieldName(), - implode(', ', array_keys($result))), - $xaction); - $errors[] = $error; - $this->setFieldError(pht('Invalid')); - continue; - } - } } return $errors; } - private function getFieldParser() { - if (!$this->fieldParser) { - $viewer = $this->getViewer(); - $parser = DifferentialCommitMessageParser::newStandardParser($viewer); - - // Set custom title and summary keys so we can detect the presence of - // "Summary:" in, e.g., a test plan. - $parser->setTitleKey('__title__'); - $parser->setSummaryKey('__summary__'); - - $this->fieldParser = $parser; - } - - return $this->fieldParser; - } - public function canDisableField() { return false; } diff --git a/src/applications/differential/field/DifferentialTestPlanCommitMessageField.php b/src/applications/differential/field/DifferentialTestPlanCommitMessageField.php index a477a9036e..178e51d985 100644 --- a/src/applications/differential/field/DifferentialTestPlanCommitMessageField.php +++ b/src/applications/differential/field/DifferentialTestPlanCommitMessageField.php @@ -50,4 +50,11 @@ final class DifferentialTestPlanCommitMessageField ); } + public function validateTransactions($object, array $xactions) { + return $this->validateCommitMessageCorpusTransactions( + $object, + $xactions, + pht('Test Plan')); + } + } diff --git a/src/applications/differential/xaction/DifferentialRevisionSummaryTransaction.php b/src/applications/differential/xaction/DifferentialRevisionSummaryTransaction.php index a4f1dcafa5..238eb53903 100644 --- a/src/applications/differential/xaction/DifferentialRevisionSummaryTransaction.php +++ b/src/applications/differential/xaction/DifferentialRevisionSummaryTransaction.php @@ -54,4 +54,11 @@ final class DifferentialRevisionSummaryTransaction return $changes; } + public function validateTransactions($object, array $xactions) { + return $this->validateCommitMessageCorpusTransactions( + $object, + $xactions, + pht('Summary')); + } + } diff --git a/src/applications/differential/xaction/DifferentialRevisionTransactionType.php b/src/applications/differential/xaction/DifferentialRevisionTransactionType.php index f740d97c74..59b0c7510d 100644 --- a/src/applications/differential/xaction/DifferentialRevisionTransactionType.php +++ b/src/applications/differential/xaction/DifferentialRevisionTransactionType.php @@ -1,4 +1,60 @@ validateMessageCorpus($xaction, $field_name); + if ($error) { + $errors[] = $error; + } + } + + return $errors; + } + + private function validateMessageCorpus($xaction, $field_name) { + $value = $xaction->getNewValue(); + if (!strlen($value)) { + return null; + } + + // Put a placeholder title on the message, because the first line of a + // message is now always parsed as a title. + $value = "\n".$value; + + $viewer = $this->getActor(); + $parser = DifferentialCommitMessageParser::newStandardParser($viewer); + + // Set custom title and summary keys so we can detect the presence of + // "Summary:" in, e.g., a test plan. + $parser->setTitleKey('__title__'); + $parser->setSummaryKey('__summary__'); + + $result = $parser->parseCorpus($value); + + unset($result['__title__']); + unset($result['__summary__']); + + if (!$result) { + return null; + } + + return $this->newInvalidError( + pht( + 'The value you have entered in "%s" can not be parsed '. + 'unambiguously when rendered in a commit message. Edit the '. + 'message so that keywords like "Summary:" and "Test Plan:" do '. + 'not appear at the beginning of lines. Parsed keys: %s.', + $field_name, + implode(', ', array_keys($result))), + $xaction); + } + +} diff --git a/src/applications/diffusion/conduit/DiffusionCreateCommentConduitAPIMethod.php b/src/applications/diffusion/conduit/DiffusionCreateCommentConduitAPIMethod.php deleted file mode 100644 index 51a494425f..0000000000 --- a/src/applications/diffusion/conduit/DiffusionCreateCommentConduitAPIMethod.php +++ /dev/null @@ -1,106 +0,0 @@ - 'required string', - 'action' => 'optional string', - 'message' => 'required string', - 'silent' => 'optional bool', - ); - } - - protected function defineReturnType() { - return 'bool'; - } - - protected function defineErrorTypes() { - return array( - 'ERR_BAD_COMMIT' => pht('No commit found with that PHID.'), - 'ERR_BAD_ACTION' => pht('Invalid action type.'), - 'ERR_MISSING_MESSAGE' => pht('Message is required.'), - ); - } - - protected function execute(ConduitAPIRequest $request) { - $commit_phid = $request->getValue('phid'); - $commit = id(new DiffusionCommitQuery()) - ->setViewer($request->getUser()) - ->withPHIDs(array($commit_phid)) - ->needAuditRequests(true) - ->executeOne(); - if (!$commit) { - throw new ConduitException('ERR_BAD_COMMIT'); - } - - $message = trim($request->getValue('message')); - if (!$message) { - throw new ConduitException('ERR_MISSING_MESSAGE'); - } - - $action = $request->getValue('action'); - if (!$action) { - $action = PhabricatorAuditActionConstants::COMMENT; - } - - // Disallow ADD_CCS, ADD_AUDITORS forever. - if (!in_array($action, array( - PhabricatorAuditActionConstants::CONCERN, - PhabricatorAuditActionConstants::ACCEPT, - PhabricatorAuditActionConstants::COMMENT, - PhabricatorAuditActionConstants::RESIGN, - PhabricatorAuditActionConstants::CLOSE, - ))) { - throw new ConduitException('ERR_BAD_ACTION'); - } - - $xactions = array(); - - if ($action != PhabricatorAuditActionConstants::COMMENT) { - $xactions[] = id(new PhabricatorAuditTransaction()) - ->setTransactionType(PhabricatorAuditActionConstants::ACTION) - ->setNewValue($action); - } - - if (strlen($message)) { - $xactions[] = id(new PhabricatorAuditTransaction()) - ->setTransactionType(PhabricatorTransactions::TYPE_COMMENT) - ->attachComment( - id(new PhabricatorAuditTransactionComment()) - ->setCommitPHID($commit->getPHID()) - ->setContent($message)); - } - - id(new PhabricatorAuditEditor()) - ->setActor($request->getUser()) - ->setContentSource($request->newContentSource()) - ->setDisableEmail($request->getValue('silent')) - ->setContinueOnMissingFields(true) - ->applyTransactions($commit, $xactions); - - return true; - } - -} diff --git a/src/applications/diffusion/controller/DiffusionCommitController.php b/src/applications/diffusion/controller/DiffusionCommitController.php index 97cb219b51..f88c463633 100644 --- a/src/applications/diffusion/controller/DiffusionCommitController.php +++ b/src/applications/diffusion/controller/DiffusionCommitController.php @@ -4,9 +4,6 @@ final class DiffusionCommitController extends DiffusionController { const CHANGES_LIMIT = 100; - private $auditAuthorityPHIDs; - private $highlightedAudits; - private $commitParents; private $commitRefs; private $commitMerges; @@ -67,8 +64,7 @@ final class DiffusionCommitController extends DiffusionController { } $audit_requests = $commit->getAudits(); - $this->auditAuthorityPHIDs = - PhabricatorAuditCommentEditor::loadAuditPHIDsForUser($viewer); + $commit->loadAndAttachAuditAuthority($viewer); $commit_data = $commit->getCommitData(); $is_foreign = $commit_data->getCommitDetail('foreign-svn-stub'); @@ -209,10 +205,6 @@ final class DiffusionCommitController extends DiffusionController { $timeline = $this->buildComments($commit); $merge_table = $this->buildMergesTable($commit); - $highlighted_audits = $commit->getAuthorityAudits( - $viewer, - $this->auditAuthorityPHIDs); - $show_changesets = false; $info_panel = null; $change_list = null; @@ -520,13 +512,13 @@ final class DiffusionCommitController extends DiffusionController { if ($user_requests) { $view->addProperty( pht('Auditors'), - $this->renderAuditStatusView($user_requests)); + $this->renderAuditStatusView($commit, $user_requests)); } if ($other_requests) { $view->addProperty( pht('Group Auditors'), - $this->renderAuditStatusView($other_requests)); + $this->renderAuditStatusView($commit, $other_requests)); } } @@ -739,85 +731,6 @@ final class DiffusionCommitController extends DiffusionController { return $comment_view; } - /** - * Return a map of available audit actions for rendering into a