/*
 * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT.
 *
 * This file was generated by the dom/make_names.pl script.
 *
 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "config.h"

#ifdef SKIP_STATIC_CONSTRUCTORS_ON_GCC
#define DOM_MathML_NAMES_HIDE_GLOBALS 1
#else
#define QNAME_DEFAULT_CONSTRUCTOR 1
#endif

#include "MathMLNames.h"

#include <wtf/StaticConstructors.h>
namespace WebCore {

namespace MathMLNames {

using namespace WebCore;

WEBCORE_EXPORT DEFINE_GLOBAL(AtomicString, mathmlNamespaceURI)

static const LChar accentString8[] = "accent";
static const LChar accentunderString8[] = "accentunder";
static const LChar actiontypeString8[] = "actiontype";
static const LChar alttextString8[] = "alttext";
static const LChar annotationString8[] = "annotation";
static const LChar annotation_xmlString8[] = "annotation-xml";
static const LChar backgroundString8[] = "background";
static const LChar closeString8[] = "close";
static const LChar colorString8[] = "color";
static const LChar columnspanString8[] = "columnspan";
static const LChar definitionURLString8[] = "definitionURL";
static const LChar denomalignString8[] = "denomalign";
static const LChar depthString8[] = "depth";
static const LChar dirString8[] = "dir";
static const LChar displayString8[] = "display";
static const LChar displaystyleString8[] = "displaystyle";
static const LChar encodingString8[] = "encoding";
static const LChar fenceString8[] = "fence";
static const LChar fontfamilyString8[] = "fontfamily";
static const LChar fontsizeString8[] = "fontsize";
static const LChar fontstyleString8[] = "fontstyle";
static const LChar fontweightString8[] = "fontweight";
static const LChar formString8[] = "form";
static const LChar heightString8[] = "height";
static const LChar hrefString8[] = "href";
static const LChar largeopString8[] = "largeop";
static const LChar linethicknessString8[] = "linethickness";
static const LChar lspaceString8[] = "lspace";
static const LChar mactionString8[] = "maction";
static const LChar maligngroupString8[] = "maligngroup";
static const LChar malignmarkString8[] = "malignmark";
static const LChar mathString8[] = "math";
static const LChar mathbackgroundString8[] = "mathbackground";
static const LChar mathcolorString8[] = "mathcolor";
static const LChar mathsizeString8[] = "mathsize";
static const LChar mathvariantString8[] = "mathvariant";
static const LChar maxsizeString8[] = "maxsize";
static const LChar mencloseString8[] = "menclose";
static const LChar merrorString8[] = "merror";
static const LChar mfencedString8[] = "mfenced";
static const LChar mfracString8[] = "mfrac";
static const LChar mglyphString8[] = "mglyph";
static const LChar miString8[] = "mi";
static const LChar minsizeString8[] = "minsize";
static const LChar mlabeledtrString8[] = "mlabeledtr";
static const LChar mlongdivString8[] = "mlongdiv";
static const LChar mmultiscriptsString8[] = "mmultiscripts";
static const LChar mnString8[] = "mn";
static const LChar moString8[] = "mo";
static const LChar movablelimitsString8[] = "movablelimits";
static const LChar moverString8[] = "mover";
static const LChar mpaddedString8[] = "mpadded";
static const LChar mphantomString8[] = "mphantom";
static const LChar mprescriptsString8[] = "mprescripts";
static const LChar mrootString8[] = "mroot";
static const LChar mrowString8[] = "mrow";
static const LChar msString8[] = "ms";
static const LChar mscarriesString8[] = "mscarries";
static const LChar mscarryString8[] = "mscarry";
static const LChar msgroupString8[] = "msgroup";
static const LChar mslineString8[] = "msline";
static const LChar mspaceString8[] = "mspace";
static const LChar msqrtString8[] = "msqrt";
static const LChar msrowString8[] = "msrow";
static const LChar mstackString8[] = "mstack";
static const LChar mstyleString8[] = "mstyle";
static const LChar msubString8[] = "msub";
static const LChar msubsupString8[] = "msubsup";
static const LChar msupString8[] = "msup";
static const LChar mtableString8[] = "mtable";
static const LChar mtdString8[] = "mtd";
static const LChar mtextString8[] = "mtext";
static const LChar mtrString8[] = "mtr";
static const LChar munderString8[] = "munder";
static const LChar munderoverString8[] = "munderover";
static const LChar noneString8[] = "none";
static const LChar notationString8[] = "notation";
static const LChar numalignString8[] = "numalign";
static const LChar openString8[] = "open";
static const LChar rowspanString8[] = "rowspan";
static const LChar rspaceString8[] = "rspace";
static const LChar selectionString8[] = "selection";
static const LChar semanticsString8[] = "semantics";
static const LChar separatorString8[] = "separator";
static const LChar separatorsString8[] = "separators";
static const LChar srcString8[] = "src";
static const LChar stretchyString8[] = "stretchy";
static const LChar subscriptshiftString8[] = "subscriptshift";
static const LChar superscriptshiftString8[] = "superscriptshift";
static const LChar symmetricString8[] = "symmetric";
static const LChar voffsetString8[] = "voffset";
static const LChar widthString8[] = "width";

static StringImpl::StaticASCIILiteral accentData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    accentString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (12982903 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral accentunderData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    11,
    accentunderString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6827709 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral actiontypeData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    actiontypeString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6004737 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral alttextData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    alttextString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (14960494 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral annotationData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    annotationString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (10691270 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral annotation_xmlData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    14,
    annotation_xmlString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (3437210 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral backgroundData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    backgroundString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (8107606 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral closeData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    closeString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (3222970 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral colorData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    colorString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (2734929 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral columnspanData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    columnspanString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6827651 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral definitionURLData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    13,
    definitionURLString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (5781331 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral denomalignData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    denomalignString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (9559630 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral depthData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    depthString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (1069503 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral dirData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    3,
    dirString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (5122803 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral displayData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    displayString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (16245385 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral displaystyleData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    12,
    displaystyleString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (92854 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral encodingData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    8,
    encodingString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (641915 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral fenceData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    fenceString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (8957251 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral fontfamilyData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    fontfamilyString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6143894 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral fontsizeData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    8,
    fontsizeString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (15308314 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral fontstyleData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    9,
    fontstyleString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (2479154 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral fontweightData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    fontweightString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (4781093 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral formData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    4,
    formString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (10060301 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral heightData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    heightString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6697833 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral hrefData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    4,
    hrefString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (5797448 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral largeopData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    largeopString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (12078196 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral linethicknessData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    13,
    linethicknessString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (7924943 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral lspaceData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    lspaceString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (14574953 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mactionData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    mactionString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6240554 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral maligngroupData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    11,
    maligngroupString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (11032863 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral malignmarkData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    malignmarkString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (8634190 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mathData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    4,
    mathString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (8182406 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mathbackgroundData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    14,
    mathbackgroundString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (2374557 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mathcolorData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    9,
    mathcolorString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (7904383 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mathsizeData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    8,
    mathsizeString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6623078 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mathvariantData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    11,
    mathvariantString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (9126505 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral maxsizeData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    maxsizeString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (14756777 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mencloseData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    8,
    mencloseString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (5022529 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral merrorData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    merrorString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (7632997 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mfencedData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    mfencedString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (12259930 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mfracData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    mfracString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (13987551 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mglyphData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    mglyphString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (3316076 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral miData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    2,
    miString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (16514040 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral minsizeData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    minsizeString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (12257779 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mlabeledtrData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    mlabeledtrString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6234436 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mlongdivData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    8,
    mlongdivString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6375969 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mmultiscriptsData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    13,
    mmultiscriptsString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6674650 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mnData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    2,
    mnString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (3612898 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral moData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    2,
    moString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (16096753 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral movablelimitsData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    13,
    movablelimitsString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (3029911 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral moverData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    moverString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (14480316 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mpaddedData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    mpaddedString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (13014740 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mphantomData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    8,
    mphantomString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6126615 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mprescriptsData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    11,
    mprescriptsString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (13554220 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mrootData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    mrootString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (8188480 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mrowData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    4,
    mrowString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (8502371 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral msData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    2,
    msString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (5264856 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mscarriesData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    9,
    mscarriesString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (9694235 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mscarryData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    mscarryString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6631743 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral msgroupData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    msgroupString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6009572 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mslineData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    mslineString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (10387365 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mspaceData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    mspaceString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (10653811 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral msqrtData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    msqrtString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (10123915 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral msrowData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    msrowString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (14131536 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mstackData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    mstackString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (7213992 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mstyleData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    mstyleString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6243427 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral msubData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    4,
    msubString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (10093770 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral msubsupData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    msubsupString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (5166195 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral msupData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    4,
    msupString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (1894901 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mtableData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    mtableString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (10007321 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mtdData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    3,
    mtdString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (5470001 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mtextData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    mtextString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (16756693 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral mtrData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    3,
    mtrString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (11260899 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral munderData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    munderString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (9958019 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral munderoverData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    munderoverString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (5849942 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral noneData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    4,
    noneString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (3454253 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral notationData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    8,
    notationString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (269672 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral numalignData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    8,
    numalignString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (8165736 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral openData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    4,
    openString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (13703631 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral rowspanData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    rowspanString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (13630419 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral rspaceData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    6,
    rspaceString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (9521175 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral selectionData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    9,
    selectionString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (13833227 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral semanticsData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    9,
    semanticsString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (942856 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral separatorData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    9,
    separatorString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (6216282 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral separatorsData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    10,
    separatorsString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (11231386 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral srcData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    3,
    srcString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (11517827 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral stretchyData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    8,
    stretchyString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (9937605 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral subscriptshiftData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    14,
    subscriptshiftString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (11231861 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral superscriptshiftData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    16,
    superscriptshiftString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (4987505 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral symmetricData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    9,
    symmetricString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (1620969 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral voffsetData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    7,
    voffsetString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (14126607 << StringImpl::StaticASCIILiteral::s_hashShift)
};
static StringImpl::StaticASCIILiteral widthData = {
    StringImpl::StaticASCIILiteral::s_initialRefCount,
    5,
    widthString8,
    StringImpl::StaticASCIILiteral::s_initialFlags | (12902275 << StringImpl::StaticASCIILiteral::s_hashShift)
};

// Tags
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, annotationTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, annotation_xmlTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mactionTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, maligngroupTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, malignmarkTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mathTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mencloseTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, merrorTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mfencedTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mfracTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mglyphTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, miTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mlabeledtrTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mlongdivTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mmultiscriptsTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mnTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, moTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, moverTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mpaddedTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mphantomTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mprescriptsTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mrootTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mrowTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, msTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mscarriesTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mscarryTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, msgroupTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mslineTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mspaceTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, msqrtTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, msrowTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mstackTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mstyleTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, msubTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, msubsupTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, msupTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mtableTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mtdTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mtextTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, mtrTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, munderTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, munderoverTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, noneTag)
WEBCORE_EXPORT DEFINE_GLOBAL(MathMLQualifiedName, semanticsTag)


const WebCore::MathMLQualifiedName* const* getMathMLTags()
{
    static const WebCore::MathMLQualifiedName* const MathMLTags[] = {
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&annotationTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&annotation_xmlTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mactionTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&maligngroupTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&malignmarkTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mathTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mencloseTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&merrorTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mfencedTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mfracTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mglyphTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&miTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mlabeledtrTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mlongdivTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mmultiscriptsTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mnTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&moTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&moverTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mpaddedTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mphantomTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mprescriptsTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mrootTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mrowTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&msTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mscarriesTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mscarryTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&msgroupTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mslineTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mspaceTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&msqrtTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&msrowTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mstackTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mstyleTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&msubTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&msubsupTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&msupTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mtableTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mtdTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mtextTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&mtrTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&munderTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&munderoverTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&noneTag),
        reinterpret_cast<const WebCore::MathMLQualifiedName*>(&semanticsTag),
    };
    return MathMLTags;
}

// Attributes
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, accentAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, accentunderAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, actiontypeAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, alttextAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, backgroundAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, closeAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, colorAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, columnspanAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, definitionURLAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, denomalignAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, depthAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, dirAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, displayAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, displaystyleAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, encodingAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, fenceAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, fontfamilyAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, fontsizeAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, fontstyleAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, fontweightAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, formAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, heightAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, hrefAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, largeopAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, linethicknessAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, lspaceAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, mathbackgroundAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, mathcolorAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, mathsizeAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, mathvariantAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, maxsizeAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, minsizeAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, movablelimitsAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, notationAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, numalignAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, openAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, rowspanAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, rspaceAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, selectionAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, separatorAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, separatorsAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, srcAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, stretchyAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, subscriptshiftAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, superscriptshiftAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, symmetricAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, voffsetAttr)
WEBCORE_EXPORT DEFINE_GLOBAL(QualifiedName, widthAttr)


const WebCore::QualifiedName* const* getMathMLAttrs()
{
    static const WebCore::QualifiedName* const MathMLAttrs[] = {
        reinterpret_cast<const WebCore::QualifiedName*>(&accentAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&accentunderAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&actiontypeAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&alttextAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&backgroundAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&closeAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&colorAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&columnspanAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&definitionURLAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&denomalignAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&depthAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&dirAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&displayAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&displaystyleAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&encodingAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&fenceAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&fontfamilyAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&fontsizeAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&fontstyleAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&fontweightAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&formAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&heightAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&hrefAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&largeopAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&linethicknessAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&lspaceAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&mathbackgroundAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&mathcolorAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&mathsizeAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&mathvariantAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&maxsizeAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&minsizeAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&movablelimitsAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&notationAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&numalignAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&openAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&rowspanAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&rspaceAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&selectionAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&separatorAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&separatorsAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&srcAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&stretchyAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&subscriptshiftAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&superscriptshiftAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&symmetricAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&voffsetAttr),
        reinterpret_cast<const WebCore::QualifiedName*>(&widthAttr),
    };
    return MathMLAttrs;
}

void init()
{
    static bool initialized = false;
    if (initialized)
        return;
    initialized = true;

    // Use placement new to initialize the globals.

    AtomicString::init();
    AtomicString mathmlNS("http://www.w3.org/1998/Math/MathML", AtomicString::ConstructFromLiteral);

    // Namespace
    new (NotNull, (void*)&mathmlNamespaceURI) AtomicString(mathmlNS);

#ifndef NDEBUG
    reinterpret_cast<StringImpl*>(&accentData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&accentunderData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&actiontypeData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&alttextData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&annotationData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&annotation_xmlData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&backgroundData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&closeData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&colorData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&columnspanData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&definitionURLData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&denomalignData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&depthData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&dirData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&displayData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&displaystyleData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&encodingData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&fenceData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&fontfamilyData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&fontsizeData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&fontstyleData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&fontweightData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&formData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&heightData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&hrefData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&largeopData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&linethicknessData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&lspaceData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mactionData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&maligngroupData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&malignmarkData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mathData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mathbackgroundData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mathcolorData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mathsizeData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mathvariantData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&maxsizeData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mencloseData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&merrorData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mfencedData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mfracData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mglyphData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&miData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&minsizeData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mlabeledtrData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mlongdivData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mmultiscriptsData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mnData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&moData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&movablelimitsData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&moverData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mpaddedData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mphantomData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mprescriptsData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mrootData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mrowData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&msData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mscarriesData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mscarryData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&msgroupData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mslineData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mspaceData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&msqrtData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&msrowData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mstackData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mstyleData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&msubData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&msubsupData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&msupData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mtableData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mtdData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mtextData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&mtrData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&munderData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&munderoverData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&noneData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&notationData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&numalignData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&openData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&rowspanData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&rspaceData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&selectionData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&semanticsData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&separatorData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&separatorsData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&srcData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&stretchyData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&subscriptshiftData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&superscriptshiftData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&symmetricData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&voffsetData)->assertHashIsCorrect();
    reinterpret_cast<StringImpl*>(&widthData)->assertHashIsCorrect();
#endif // NDEBUG


    struct TagsTableEntry {
        void* targetAddress;
        StringImpl& name;
    };

    static const TagsTableEntry tagsTable[] = {
        { (void*)&annotationTag, *reinterpret_cast<StringImpl*>(&annotationData) },
        { (void*)&annotation_xmlTag, *reinterpret_cast<StringImpl*>(&annotation_xmlData) },
        { (void*)&mactionTag, *reinterpret_cast<StringImpl*>(&mactionData) },
        { (void*)&maligngroupTag, *reinterpret_cast<StringImpl*>(&maligngroupData) },
        { (void*)&malignmarkTag, *reinterpret_cast<StringImpl*>(&malignmarkData) },
        { (void*)&mathTag, *reinterpret_cast<StringImpl*>(&mathData) },
        { (void*)&mencloseTag, *reinterpret_cast<StringImpl*>(&mencloseData) },
        { (void*)&merrorTag, *reinterpret_cast<StringImpl*>(&merrorData) },
        { (void*)&mfencedTag, *reinterpret_cast<StringImpl*>(&mfencedData) },
        { (void*)&mfracTag, *reinterpret_cast<StringImpl*>(&mfracData) },
        { (void*)&mglyphTag, *reinterpret_cast<StringImpl*>(&mglyphData) },
        { (void*)&miTag, *reinterpret_cast<StringImpl*>(&miData) },
        { (void*)&mlabeledtrTag, *reinterpret_cast<StringImpl*>(&mlabeledtrData) },
        { (void*)&mlongdivTag, *reinterpret_cast<StringImpl*>(&mlongdivData) },
        { (void*)&mmultiscriptsTag, *reinterpret_cast<StringImpl*>(&mmultiscriptsData) },
        { (void*)&mnTag, *reinterpret_cast<StringImpl*>(&mnData) },
        { (void*)&moTag, *reinterpret_cast<StringImpl*>(&moData) },
        { (void*)&moverTag, *reinterpret_cast<StringImpl*>(&moverData) },
        { (void*)&mpaddedTag, *reinterpret_cast<StringImpl*>(&mpaddedData) },
        { (void*)&mphantomTag, *reinterpret_cast<StringImpl*>(&mphantomData) },
        { (void*)&mprescriptsTag, *reinterpret_cast<StringImpl*>(&mprescriptsData) },
        { (void*)&mrootTag, *reinterpret_cast<StringImpl*>(&mrootData) },
        { (void*)&mrowTag, *reinterpret_cast<StringImpl*>(&mrowData) },
        { (void*)&msTag, *reinterpret_cast<StringImpl*>(&msData) },
        { (void*)&mscarriesTag, *reinterpret_cast<StringImpl*>(&mscarriesData) },
        { (void*)&mscarryTag, *reinterpret_cast<StringImpl*>(&mscarryData) },
        { (void*)&msgroupTag, *reinterpret_cast<StringImpl*>(&msgroupData) },
        { (void*)&mslineTag, *reinterpret_cast<StringImpl*>(&mslineData) },
        { (void*)&mspaceTag, *reinterpret_cast<StringImpl*>(&mspaceData) },
        { (void*)&msqrtTag, *reinterpret_cast<StringImpl*>(&msqrtData) },
        { (void*)&msrowTag, *reinterpret_cast<StringImpl*>(&msrowData) },
        { (void*)&mstackTag, *reinterpret_cast<StringImpl*>(&mstackData) },
        { (void*)&mstyleTag, *reinterpret_cast<StringImpl*>(&mstyleData) },
        { (void*)&msubTag, *reinterpret_cast<StringImpl*>(&msubData) },
        { (void*)&msubsupTag, *reinterpret_cast<StringImpl*>(&msubsupData) },
        { (void*)&msupTag, *reinterpret_cast<StringImpl*>(&msupData) },
        { (void*)&mtableTag, *reinterpret_cast<StringImpl*>(&mtableData) },
        { (void*)&mtdTag, *reinterpret_cast<StringImpl*>(&mtdData) },
        { (void*)&mtextTag, *reinterpret_cast<StringImpl*>(&mtextData) },
        { (void*)&mtrTag, *reinterpret_cast<StringImpl*>(&mtrData) },
        { (void*)&munderTag, *reinterpret_cast<StringImpl*>(&munderData) },
        { (void*)&munderoverTag, *reinterpret_cast<StringImpl*>(&munderoverData) },
        { (void*)&noneTag, *reinterpret_cast<StringImpl*>(&noneData) },
        { (void*)&semanticsTag, *reinterpret_cast<StringImpl*>(&semanticsData) },
    };

    for (unsigned i = 0; i < WTF_ARRAY_LENGTH(tagsTable); ++i)
        createQualifiedName(tagsTable[i].targetAddress, &tagsTable[i].name, mathmlNS);

    struct AttributesTableEntry {
        void* targetAddress;
        StringImpl& name;
    };

    static const AttributesTableEntry attributesTable[] = {
        { (void*)&accentAttr, *reinterpret_cast<StringImpl*>(&accentData) },
        { (void*)&accentunderAttr, *reinterpret_cast<StringImpl*>(&accentunderData) },
        { (void*)&actiontypeAttr, *reinterpret_cast<StringImpl*>(&actiontypeData) },
        { (void*)&alttextAttr, *reinterpret_cast<StringImpl*>(&alttextData) },
        { (void*)&backgroundAttr, *reinterpret_cast<StringImpl*>(&backgroundData) },
        { (void*)&closeAttr, *reinterpret_cast<StringImpl*>(&closeData) },
        { (void*)&colorAttr, *reinterpret_cast<StringImpl*>(&colorData) },
        { (void*)&columnspanAttr, *reinterpret_cast<StringImpl*>(&columnspanData) },
        { (void*)&definitionURLAttr, *reinterpret_cast<StringImpl*>(&definitionURLData) },
        { (void*)&denomalignAttr, *reinterpret_cast<StringImpl*>(&denomalignData) },
        { (void*)&depthAttr, *reinterpret_cast<StringImpl*>(&depthData) },
        { (void*)&dirAttr, *reinterpret_cast<StringImpl*>(&dirData) },
        { (void*)&displayAttr, *reinterpret_cast<StringImpl*>(&displayData) },
        { (void*)&displaystyleAttr, *reinterpret_cast<StringImpl*>(&displaystyleData) },
        { (void*)&encodingAttr, *reinterpret_cast<StringImpl*>(&encodingData) },
        { (void*)&fenceAttr, *reinterpret_cast<StringImpl*>(&fenceData) },
        { (void*)&fontfamilyAttr, *reinterpret_cast<StringImpl*>(&fontfamilyData) },
        { (void*)&fontsizeAttr, *reinterpret_cast<StringImpl*>(&fontsizeData) },
        { (void*)&fontstyleAttr, *reinterpret_cast<StringImpl*>(&fontstyleData) },
        { (void*)&fontweightAttr, *reinterpret_cast<StringImpl*>(&fontweightData) },
        { (void*)&formAttr, *reinterpret_cast<StringImpl*>(&formData) },
        { (void*)&heightAttr, *reinterpret_cast<StringImpl*>(&heightData) },
        { (void*)&hrefAttr, *reinterpret_cast<StringImpl*>(&hrefData) },
        { (void*)&largeopAttr, *reinterpret_cast<StringImpl*>(&largeopData) },
        { (void*)&linethicknessAttr, *reinterpret_cast<StringImpl*>(&linethicknessData) },
        { (void*)&lspaceAttr, *reinterpret_cast<StringImpl*>(&lspaceData) },
        { (void*)&mathbackgroundAttr, *reinterpret_cast<StringImpl*>(&mathbackgroundData) },
        { (void*)&mathcolorAttr, *reinterpret_cast<StringImpl*>(&mathcolorData) },
        { (void*)&mathsizeAttr, *reinterpret_cast<StringImpl*>(&mathsizeData) },
        { (void*)&mathvariantAttr, *reinterpret_cast<StringImpl*>(&mathvariantData) },
        { (void*)&maxsizeAttr, *reinterpret_cast<StringImpl*>(&maxsizeData) },
        { (void*)&minsizeAttr, *reinterpret_cast<StringImpl*>(&minsizeData) },
        { (void*)&movablelimitsAttr, *reinterpret_cast<StringImpl*>(&movablelimitsData) },
        { (void*)&notationAttr, *reinterpret_cast<StringImpl*>(&notationData) },
        { (void*)&numalignAttr, *reinterpret_cast<StringImpl*>(&numalignData) },
        { (void*)&openAttr, *reinterpret_cast<StringImpl*>(&openData) },
        { (void*)&rowspanAttr, *reinterpret_cast<StringImpl*>(&rowspanData) },
        { (void*)&rspaceAttr, *reinterpret_cast<StringImpl*>(&rspaceData) },
        { (void*)&selectionAttr, *reinterpret_cast<StringImpl*>(&selectionData) },
        { (void*)&separatorAttr, *reinterpret_cast<StringImpl*>(&separatorData) },
        { (void*)&separatorsAttr, *reinterpret_cast<StringImpl*>(&separatorsData) },
        { (void*)&srcAttr, *reinterpret_cast<StringImpl*>(&srcData) },
        { (void*)&stretchyAttr, *reinterpret_cast<StringImpl*>(&stretchyData) },
        { (void*)&subscriptshiftAttr, *reinterpret_cast<StringImpl*>(&subscriptshiftData) },
        { (void*)&superscriptshiftAttr, *reinterpret_cast<StringImpl*>(&superscriptshiftData) },
        { (void*)&symmetricAttr, *reinterpret_cast<StringImpl*>(&symmetricData) },
        { (void*)&voffsetAttr, *reinterpret_cast<StringImpl*>(&voffsetData) },
        { (void*)&widthAttr, *reinterpret_cast<StringImpl*>(&widthData) },
    };

    for (unsigned i = 0; i < WTF_ARRAY_LENGTH(attributesTable); ++i)
        createQualifiedName(attributesTable[i].targetAddress, &attributesTable[i].name);
}

} }

