Diff for /loncom/html/adm/jsMath/jsMath.js between versions 1.2 and 1.5

version 1.2, 2005/12/07 18:57:45 version 1.5, 2007/10/09 21:29:16
Line 9 Line 9
  *            http://www.math.union.edu/locate/jsMath   *            http://www.math.union.edu/locate/jsMath
  *   *
  *  for the latest version, and for documentation on how to use jsMath.   *  for the latest version, and for documentation on how to use jsMath.
  *   
  *  Copyright (c) 2004-2005 by Davide P. Cervone.  
  *   *
  *  This program is free software; you can redistribute it and/or   *  Copyright 2004-2007 by Davide P. Cervone
  *  modify it under the terms of the GNU General Public License  
  *  as published by the Free Software Foundation; either version 2  
  *  of the License.  
  *    
  *  This program is distributed in the hope that it will be useful,  
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of  
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
  *  GNU General Public License for more details.  
  *    
  *  You should have received a copy of the GNU General Public License  
  *  along with this program; if not, write to the Free Software  
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  
  *    
  *****************************************************************************/  
   
 /*  
  *  Prevent running everything again if this file is loaded twice  
  */  
 if (!jsMath || !jsMath.loaded) {  
 var jsMath_old = jsMath;  // save user customizations  
   
 //  
 // debugging routine  
 //   
 function ShowObject (obj,spaces) {  
   var s = ''; if (!spaces) {spaces = ""}  
   for (var i in obj) {  
     if (obj[i] != null) {  
       if (typeof(obj[i]) == "object") {  
         s += spaces + i + ": {\n"  
           + ShowObject(obj[i],spaces + '  ')  
           + spaces + "}\n";  
       } else if (typeof(obj[i]) != "function") {  
         s += spaces + i + ': ' + obj[i] + "\n";  
       }  
     }  
   }  
   return s;  
 }  
   
 /***************************************************************************/  
 //  
 //  Check for DOM support  
 //  
 if (!document.getElementById || !document.childNodes || !document.createElement) {  
   alert('The mathematics on this page requires W3C DOM support in its JavaScript. '  
       + 'Unfortunately, your browser doesn\'t seem to have this.');  
 } else {  
   
 /***************************************************************************/  
   
 var jsMath = {  
     
   version: "2.4b",  // change this if you edit the file  
     
   //  
   //  Name of image files  
   //  
   blank: "blank.gif",  
     
   defaultH: 0, // default height for characters with none specified  
   
   // Font sizes for \tiny, \small, etc. (must match styles below)  
   sizes: [50, 60, 70, 85, 100, 120, 144, 173, 207, 249],  
   
   //  
   //  The styles needed for the TeX fonts  
   //  
   styles: {  
     '.size0':          'font-size: 50%',  // tiny (\scriptscriptsize)  
     '.size1':          'font-size: 60%',  //       (50% of \large for consistency)  
     '.size2':          'font-size: 70%',  // scriptsize  
     '.size3':          'font-size: 85%',  // small (70% of \large for consistency)  
     '.size4':          'font-size: 100%', // normalsize  
     '.size5':          'font-size: 120%', // large  
     '.size6':          'font-size: 144%', // Large  
     '.size7':          'font-size: 173%', // LARGE  
     '.size8':          'font-size: 207%', // huge  
     '.size9':          'font-size: 249%', // Huge  
     
     '.cmr10':          'font-family: cmr10, serif',  
     '.cmbx10':         'font-family: cmbx10, cmr10',  
     '.cmti10':         'font-family: cmti10, cmr10',  
     '.cmmi10':         'font-family: cmmi10',  
     '.cmsy10':         'font-family: cmsy10',  
     '.cmex10':         'font-family: cmex10',  
       
     '.math':           'font-family: serif; font-style: normal; font-weight: normal',  
     '.typeset':        'font-family: serif; font-style: normal; font-weight: normal',  
     '.normal':         'font-family: serif; font-style: normal; font-weight: normal; '  
                           + 'padding:0px; border:0px; margin:0px;',  
     'span.typeset':    '',  
     'div.typeset':     'text-align: center; margin: 1em 0px;',  
     '.mathlink':       'text-decoration: none',  
     '.mathHD':         'border-width:0px; width: 1px; margin-right: -1px',  
     
     '.error':          'font-size: 10pt; font-style: italic; '  
                          + 'background-color: #FFFFCC; padding: 1px; '  
                          + 'border: 1px solid #CC0000',  
   
     '.jsM_panel':      'position:fixed; bottom:1.5em; right:1.5em; padding: 10px 20px; '  
                          + 'background-color:#DDDDDD; border: outset 2px; '  
                          + 'z-index:103; width:auto;',  
     '.jsM_button':     'position:fixed; bottom:1px; right:2px; background-color:white; '  
                          + 'border: solid 1px #959595; margin:0px; padding: 0px 3px 1px 3px; '  
                          + 'z-index:102; color:black; text-decoration:none; font-size:x-small; width:auto;',  
     '.jsM_float':      'position:absolute; top:0px; left:0px; max-width:80%; '  
                          + 'z-index:101; width:auto; height:auto;',  
     '.jsM_drag':       'background-color:#DDDDDD; border: outset 1px; height:12px; font-size: 1px;',  
     '.jsM_close':      'background-color:#E6E6E6; border: inset 1px; width:8px; height:8px; margin: 1px 2px;',  
     '.jsM_source':     'background-color:#E2E2E2; border: outset 1px; '  
                          + 'width:auto; height:auto; padding: 8px 15px; '  
                          + 'font-family: courier, fixed; font-size: 90%',  
     '.jsM_noFont':     'text-align: center; padding: 10px 20px; border: 3px solid #DD0000; '  
                          + ' background-color: #FFF8F8; color: #AA0000; font-size:small; width:auto;',  
     '.jsM_fontLink':   'padding: 0px 5px 2px 5px; text-decoration:none; color:black;'  
                          + ' border: 2px outset; background-color:#E8E8E8; font-size:80%; width:auto;'  
   },  
     
   
   /***************************************************************************/  
   
   /*  
    *  Get the width and height (in pixels) of an HTML string  
    */  
   BBoxFor: function (s) {  
     this.hidden.innerHTML = '<NOBR><SPAN CLASS="jsM_scale">'+s+'</SPAN></NOBR>';  
     var bbox = {w: this.hidden.offsetWidth, h: this.hidden.offsetHeight};  
     this.hidden.innerHTML = '';  
     return bbox;  
   },  
   
   /*  
    *  Get the width and height (in ems) of an HTML string  
    */  
   EmBoxFor: function (s) {  
     var bbox = this.BBoxFor(s);  
     return {w: bbox.w/this.em, h: bbox.h/this.em};  
   },  
   
   /*  
    *  For browsers that don't handle sizes of italics properly (MSIE)  
    */  
   EmBoxForItalics: function (s) {  
     var bbox = this.BBoxFor(s);  
     if (s.match(/<I>|CLASS="icm/i)) {  
       bbox.w = this.BBoxFor(s+jsMath.Browser.italicString).w  
                 - jsMath.Browser.italicCorrection;  
     }  
     return {w: bbox.w/this.em, h: bbox.h/this.em};  
   },  
   
   /*  
    *  Initialize jsMath.  This determines the em size, and a variety  
    *  of other parameters used throughout jsMath.  
    */  
   Init: function () {  
     if (jsMath.Setup.inited != 1) {  
       if (jsMath.Setup.inited) {  
         alert("It looks like jsMath failed to set up properly.");  
       } else {  
         alert("You must call jsMath.Setup.Body() explicitly when jsMath is" +  
               "loaded as part of the <HEAD> section");  
       }  
       jsMath.Setup.Init(); // may fail to load fallback files properly  
     }  
     this.em = this.BBoxFor('<IMG SRC="'+jsMath.blank+'" STYLE="width:10em; height:1em">').w/10;  
     if (jsMath.Browser.italicString)   
       jsMath.Browser.italicCorrection = jsMath.BBoxFor(jsMath.Browser.italicString).w;  
     if (jsMath.Browser.hiddenSpace != '') {  
       jsMath.Browser.spaceWidth =  
         this.EmBoxFor(jsMath.Browser.hiddenSpace +  
                       jsMath.Browser.hiddenSpace +  
                       jsMath.Browser.hiddenSpace +  
                       jsMath.Browser.hiddenSpace +  
                       jsMath.Browser.hiddenSpace).w/5;  
     }  
     var bb = this.BBoxFor('x'); var h = bb.h;  
     var d = this.BBoxFor('x<IMG SRC="'+jsMath.blank+'" HEIGHT="'+(h*jsMath.Browser.imgScale)+'" WIDTH="1">').h - h;  
     this.h = (h-d)/this.em; this.d = d/this.em;  
     this.hd = this.h + this.d;  
     this.xWidth = bb.w;  // used to tell if scale has changed  
       
     this.Setup.TeXfonts();  
       
     var x_height = this.EmBoxFor('<SPAN CLASS="cmr10">M</SPAN>').w/2;  
     this.TeX.M_height = x_height*(26/14);  
     this.TeX.h = this.h; this.TeX.d = this.d; this.TeX.hd = this.hd;  
       
     this.Img.Scale();  
     if (!this.initialized) {  
       this.Setup.Sizes();  
       this.Img.UpdateFonts();  
     }  
   
     // factor for \big and its brethren  
     this.p_height = (this.TeX.cmex10[0].h + this.TeX.cmex10[0].d) / .85;  
   
     this.initialized = 1;  
   },  
     
   /*  
    *  Get the xWidth size and if it has changed, reinitialize the sizes  
    */  
   ReInit: function () {  
     var w = this.BBoxFor('x').w;  
     if (w != this.xWidth) {this.Init()}  
   },  
     
   /*  
    *  Mark jsMath as loaded and copy any user-provided overrides  
    */  
   Loaded: function () {  
     this.Insert(jsMath,jsMath_old);  
     jsMath_old = null;  
     jsMath.loaded = 1;  
   },  
     
   /*  
    *  Manage JavaScript objects:  
    *    
    *      Add:        add/replace items in an object  
    *      Insert:     add items to an object  
    *      Package:    add items to an object prototype  
    */  
   Add: function (dst,src) {for (var id in src) {dst[id] = src[id]}},  
   Insert: function (dst,src) {  
     for (var id in src) {  
       if (dst[id] && typeof(src[id]) == 'object'  
                   && (typeof(dst[id]) == 'object'  
                   ||  typeof(dst[id]) == 'function')) {  
         this.Insert(dst[id],src[id]);  
       } else {  
         dst[id] = src[id];  
       }  
     }  
   },  
   Package: function (obj,def) {this.Insert(obj.prototype,def)}  
   
 }  
   
 /***************************************************************************/  
   
 /*  
  *  Miscellaneous setup and initialization  
  */  
 jsMath.Setup = {  
     
   /*  
    *  Insert a DIV at the top of the page with given ID,  
    *  attributes, and style settings  
    */  
   TopHTML: function (id,attributes,styles) {  
     try {  
       var div = document.createElement('div');  
       div.setAttribute("id",'jsMath.'+id);  
       for (var i in attributes) {  
         div.setAttribute(i,attributes[i]);  
         if (i == "class") {div.setAttribute('className',attributes[i])} // MSIE  
       }  
       for (var i in styles) {div.style[i]= styles[i]}  
       if (!document.body.hasChildNodes) {document.body.appendChild(div)}  
         else {document.body.insertBefore(div,document.body.firstChild)}  
     } catch (err) {  
       var html = '<DIV ID="jsMath.'+id+'"';  
       for (var id in attributes) {html += ' '+id+'="'+attributes[id]+'"'}  
       if (styles) {  
         html += ' STYLE="';  
         for (var id in styles) {html += ' '+id+':'+styles[id]+';'}  
         html += '"';  
       }  
       html += '</DIV>';  
       if (!document.body.insertAdjacentHTML) {document.write(html)}  
         else {document.body.insertAdjacentHTML('AfterBegin',html)}  
       div = jsMath.Element(id);  
     }  
     return div;  
   },  
     
   /*  
    *  Source a jsMath JavaScript file  
    */  
   Script: function (file) {  
     if (!file.match('^([a-zA-Z]+:/)?/')) {file = jsMath.root + file}  
     document.write('<SCRIPT SRC="'+file+'"></SCRIPT>');  
   },  
     
   /*  
    *  Use a hidden <DIV> for measuring the BBoxes of things  
    */  
   HTML: function () {  
     jsMath.hidden = this.TopHTML("Hidden",{'class':"normal"},{  
       position:"absolute", top:0, left:0, border:0, padding:0, margin:0  
     });  
     jsMath.hiddenTop = jsMath.hidden;  
     return;  
   },  
   
   /*  
    *  Find the root URL for the jsMath files (so we can load  
    *  the other .js and .gif files)  
    */  
   Source: function () {  
     var script = document.getElementsByTagName('SCRIPT');  
     if (script) {  
       for (var i = 0; i < script.length; i++) {  
         var src = script[i].src;  
         if (src && src.match('(^|/)jsMath.js$')) {  
           jsMath.root = src.replace(/jsMath.js$/,'');  
           jsMath.Img.root = jsMath.root + "fonts/";  
           jsMath.blank = jsMath.root + jsMath.blank;  
           this.Domain();  
           return;  
         }  
       }  
     }  
     jsMath.root = ''; jsMath.Img.root = "fonts/";  
   },  
     
   /*  
    *  Find the most restricted common domain for the main  
    *  page and jsMath.  Report an error if jsMath is outside  
    *  the domain of the calling page.  
    */  
   Domain: function () {  
     var jsDomain = ''; var pageDomain = document.domain;  
     if (jsMath.root.match('://([^/]*)/')) {jsDomain = RegExp.$1}  
     jsDomain = jsDomain.replace(/:\d+$/,'');  
     if (jsDomain == "" || jsDomain == pageDomain) return;  
     //  
     // MSIE on the Mac can't change document.domain and 'try' won't  
     //   catch the error (Grrr!), so exit for them  
     //  
     if (navigator.appName == 'Microsoft Internet Explorer' &&  
         navigator.platform == 'MacPPC' && navigator.onLine &&  
         navigator.userProfile && document.all) return;  
     jsDomain = jsDomain.split(/\./); pageDomain = pageDomain.split(/\./);  
     if (jsDomain.length < 2 || pageDomain.length < 2 ||  
         jsDomain[jsDomain.length-1] != pageDomain[pageDomain.length-1] ||  
         jsDomain[jsDomain.length-2] != pageDomain[pageDomain.length-2]) {  
       this.DomainWarning();  
       return;  
     }  
     var domain = jsDomain[jsDomain.length-2] + '.' + jsDomain[jsDomain.length-1];  
     for (var i = 3; i <= jsDomain.length && i <= pageDomain.length; i++) {  
       if (jsDomain[jsDomain.length-i] != pageDomain[pageDomain.length-i]) break;  
       domain = jsDomain[jsDomain.length-i] + '.' + domain;  
     }  
     document.domain = domain;  
   },  
   
   DomainWarning: function () {  
     alert("In order for jsMath to be able to load the additional "  
         + "components that it may need, the jsMath.js file must be "  
         + "loaded from a server in the same domain as the page that "  
         + "contains it.  Because that is not the case for this page, "  
         + "the mathematics displayed here may not appear correctly.");  
   },  
     
   /*  
    *  Look up the default height and depth for a TeX font  
    *  and set the skewchar  
    */  
   TeXfont: function (name) {  
     var font = jsMath.TeX[name];  
     var WH = jsMath.EmBoxFor('<SPAN CLASS="'+name+'">'+font[65].c+'</SPAN>');  
     font.hd = WH.h;  
     font.d = jsMath.EmBoxFor('<SPAN CLASS="'+name+'">'+ font[65].c +  
       '<IMG SRC="'+jsMath.blank+'" STYLE="height:'+(font.hd*jsMath.Browser.imgScale)+'em; width:1px;"></SPAN>').h  
       - font.hd;  
     font.h = font.hd - font.d;  
     font.dh = .05; if (jsMath.browser == 'Safari') {font.hd *= 2};  
     if (name == 'cmmi10') {font.skewchar = 0177}   
     else if (name == 'cmsy10') {font.skewchar = 060}  
   },  
   
   /*  
    *  Init all the TeX fonts  
    */  
   TeXfonts: function () {  
     for (var i = 0; i < jsMath.TeX.fam.length; i++)   
       {if (jsMath.TeX.fam[i]) {this.TeXfont(jsMath.TeX.fam[i])}}  
   },  
   
   /*  
    *  Compute font parameters for various sizes  
    */  
   Sizes: function () {  
     jsMath.TeXparams = [];  
     for (var j=0; j < jsMath.sizes.length; j++) {jsMath.TeXparams[j] = {}}  
     for (var i in jsMath.TeX) {  
       if (typeof(jsMath.TeX[i]) != 'object') {  
         for (var j=0; j < jsMath.sizes.length; j++) {  
           jsMath.TeXparams[j][i] = jsMath.sizes[j]*jsMath.TeX[i]/100;  
         }  
       }  
     }  
   },  
   
     
   /*  
    *  Send the style definitions to the browser (these may be adjusted  
    *  by the browser-specific code)  
    */  
   Styles: function (styles) {  
     if (!styles) {  
       styles = jsMath.styles;  
       styles['.jsM_scale'] = 'font-size:'+jsMath.Controls.cookie.scale+'%';  
     }  
     document.writeln('<STYLE TYPE="text/css" ID="jsMath.styles">');  
     for (var id in styles) {document.writeln('  '+id+'  {'+styles[id]+'}')}  
     document.writeln('</STYLE>');  
   },  
     
   /*  
    *  Do the initialization that requires the BODY to be in place.  
    *  (called automatically if the jsMath.js file is loaded in the  
    *  BODY, but must be called explicitly if it is in the HEAD).  
    */  
   Body: function () {  
     if (this.inited) return;  
   
     this.inited = -1;  
   
     jsMath.Setup.HTML();  
     jsMath.Setup.Source();  
     jsMath.Browser.Init();  
     jsMath.Controls.Init();  
     jsMath.Click.Init();  
     jsMath.Setup.Styles();  
       
     jsMath.Setup.User();  //  do user-specific initialization  
   
     //make sure browser-specific loads are done before this  
     document.write('<SCRIPT>jsMath.Font.Check()</SCRIPT>');  
       
     this.inited = 1;  
   },  
     
   /*  
    *  Web page author can override this to do initialization  
    *  that must be done before the font check is performed  
    */  
   User: function () {}  
     
 };  
   
 jsMath.Update = {  
   
   /*  
    *  Update specific parameters for a limited number of font entries  
    */  
   TeXfonts: function (change) {  
     for (var font in change) {  
       for (var code in change[font]) {  
         for (var id in change[font][code]) {  
           jsMath.TeX[font][code][id] = change[font][code][id];  
         }  
       }  
     }  
   },  
     
   /*  
    *  Update the character code for every character in a list  
    *  of fonts  
    */  
   TeXfontCodes: function (change) {  
     for (var font in change) {  
       for (var i = 0; i < change[font].length; i++) {  
         jsMath.TeX[font][i].c = change[font][i];  
       }  
     }  
   },  
   
   /*  
    *  Add a collection of styles to the style list  
    */  
   Styles: function (styles) {  
     for (var i in styles) {jsMath.styles[i] = styles[i]}  
   }  
     
 };  
   
 /***************************************************************************/  
   
 /*  
  *  Implement browser-specific checks  
  */  
   
 jsMath.Browser = {  
   
   allowAbsolute: 1,           // tells if browser can nest absolutely positioned  
                               //   SPANs inside relative SPANs  
   allowAbsoluteDelim: 0,      // OK to use absolute placement for building delims?  
   separateSkips: 0,           // MSIE doesn't do negative left margins, and  
                               //   Netscape doesn't combine skips well  
   
   msieSpaceFix: '',           // for MSIE spacing bug fix  
   msieCenterBugFix: '',       // for MSIE centering bug with image fonts  
   msieInlineBlockFix: '',     // for MSIE alignment bug in non-quirks mode  
   imgScale: 1,                // MSI scales images for 120dpi screens, so compensate  
   
   renameOK: 1,                // tells if brower will find a tag whose name  
                               //   has been set via setAttributes  
   
   delay: 1,                   // delay for asynchronous math processing  
     
   spaceWidth: 0,              // Konqueror space fix  
   hiddenSpace: "",            // ditto  
   valignBug: 0,               // Konqueror doesn't nest vertical-align  
   
   operaHiddenFix: '',         // for Opera to fix bug with math in tables  
   
   /*  
    *  Determine if the "top" of a <SPAN> is always at the same height  
    *  or varies with the height of the rest of the line (MSIE).  
    */  
   TestSpanHeight: function () {  
     jsMath.hidden.innerHTML = '<SPAN><IMG SRC="'+jsMath.blank+'" STYLE="height: 2em"></SPAN>';  
     var span = jsMath.hidden.getElementsByTagName('SPAN')[0];  
     var img  = jsMath.hidden.getElementsByTagName('IMG')[0];  
     this.spanHeightVaries = (span.offsetHeight == img.offsetHeight);  
     jsMath.hidden.innerHTML = '';  
   },  
     
   /*  
    *  Determine if the NAME attribute of a tag can be changed  
    *  using the setAttribute function, and then be properly  
    *  returned by getElementByName.  
    */  
   TestRenameOK: function () {  
     jsMath.hidden.innerHTML = '<SPAN ID="jsMath.test"></SPAN>';  
     var test = document.getElementById('jsMath.test');  
     test.setAttribute('NAME','jsMath_test');  
     this.renameOK = (document.getElementsByName('jsMath_test').length > 0);  
     jsMath.hidden.innerHTML = '';  
   },  
   
   /*  
    *  Test for browser characteristics, and adjust things  
    *  to overcome specific browser bugs  
    */  
   Init: function () {  
     jsMath.browser = 'unknown';  
     this.TestSpanHeight();  
     this.TestRenameOK();  
   
     this.MSIE();  
     this.Mozilla();  
     this.Opera();  
     this.OmniWeb();  
     this.Safari();  
     this.Konqueror();  
       
     //  
     // Change some routines depending on the browser  
     //   
     if (this.allowAbsoluteDelim) {  
       jsMath.Box.DelimExtend = jsMath.Box.DelimExtendAbsolute;  
       jsMath.Box.Layout = jsMath.Box.LayoutAbsolute;  
     } else {  
       jsMath.Box.DelimExtend = jsMath.Box.DelimExtendRelative;  
       jsMath.Box.Layout = jsMath.Box.LayoutRelative;  
     }  
       
     if (this.separateSkips) {  
       jsMath.HTML.Place = jsMath.HTML.PlaceSeparateSkips;  
       jsMath.Typeset.prototype.Place = jsMath.Typeset.prototype.PlaceSeparateSkips;  
     }  
   },  
     
   //  
   //  Handle bug-filled Internet Explorer  
   //  
   MSIE: function () {  
     if (this.spanHeightVaries) {  
       jsMath.browser = 'MSIE';  
       if (navigator.platform == 'Win32') {  
         jsMath.Update.TeXfonts({  
           cmr10:  {'10': {c: '&Omega;', tclass: 'normal'}},  
           cmmi10: {  
              '10':  {c: '<I>&Omega;</I>', tclass: 'normal'},  
              '126': {c: '&#x7E;<SPAN STYLE="margin-left:.1em"></SPAN>'}  
           },  
           cmsy10: {  
             '10': {c: '&#x2297;', tclass: 'arial'},  
             '55': {c: '<SPAN STYLE="margin-right:-.54em">7</SPAN>'}  
           },  
           cmex10: {'10': {c: '<SPAN STYLE="font-size: 67%">D</SPAN>'}},  
           cmti10: {'10': {c: '<I>&Omega;</I>', tclass: 'normal'}},  
           cmbx10: {'10': {c: '<B>&Omega;</B>', tclass: 'normal'}}  
         });  
         this.allowAbsoluteDelim = 1;  
         this.separateSkips = 1;  
         this.buttonCheck = 1;  
         this.msieDivWidthBug = 1;  
         this.msieFontBug = 1; this.msieIntegralBug = 1;  
         this.msieAlphaBug = 1; this.alphaPrintBug = 1;  
         this.msieCenterBugFix = 'position:relative; ';  
         this.msieSpaceFix = '<IMG SRC="'+jsMath.blank+'" CLASS="mathHD">';  
         this.msieInlineBlockFix = ' display: inline-block;';  
         jsMath.Macro('joinrel','\\mathrel{\\kern-5mu}'),  
         jsMath.styles['.arial'] = "font-family: 'Arial unicode MS'";  
         // MSIE doesn't implement fixed positioning, so use absolute  
         jsMath.styles['.jsM_panel'] =  
               jsMath.styles['.jsM_panel'].replace(/position:fixed/,"position:absolute").replace(/width:auto/,"");  
         jsMath.styles['.jsM_button'] = 'width:1px; '  
             + jsMath.styles['.jsM_button'].replace(/position:fixed/,"position:absolute").replace(/width:auto/,"");  
         window.onscroll = jsMath.Controls.MoveButton;  
         // MSIE will rescale images if the DPIs differ  
         if (screen.deviceXDPI && screen.logicalXDPI   
              && screen.deviceXDPI != screen.logicalXDPI) {  
           this.imgScale *= screen.logicalXDPI/screen.deviceXDPI;  
           jsMath.Controls.cookie.alpha = 0;  
         }  
         // Handle bug with getting width of italic text  
         this.italicString = '<I>x</I>';  
         jsMath.EmBoxFor = jsMath.EmBoxForItalics;  
       } else if (navigator.platform == 'MacPPC') {  
         this.msieAbsoluteBug = 1; this.msieButtonBug = 1;  
         this.msieDivWidthBug = 1;  
         jsMath.Setup.Script('jsMath-msie-mac.js');  
         jsMath.Parser.prototype.macros.angle = ['Replace','ord','<FONT FACE="Symbol">&#x8B;</FONT>','normal'];  
         jsMath.styles['.jsM_panel'] = 'width:25em; ' + jsMath.styles['.jsM_panel'].replace(/width:auto/,"");  
         jsMath.styles['.jsM_button'] = 'width:1px; ' + jsMath.styles['.jsM_button'].replace(/width:auto/,"");  
       }  
       jsMath.Macro('not','\\mathrel{\\rlap{\\kern3mu/}}');  
     }  
   },  
   
   //  
   //  Handle Netscape/Mozilla (any flavor)  
   //  
   Mozilla: function () {  
     if (jsMath.hidden.ATTRIBUTE_NODE) {  
       jsMath.browser = 'Mozilla';  
       if (navigator.platform == 'MacPPC') {  
         jsMath.Update.TeXfonts({  
           cmr10:  {'10': {c: '&Omega;', tclass: 'normal'}},  
           cmmi10: {'10': {c: '<I>&Omega;</I>', tclass: 'normal'}},  
           cmsy10: {'10': {c: '&otimes;', tclass: 'normal'}},  
           cmex10: {'10': {c: '<SPAN STYLE="font-size: 67%">D</SPAN>'}},  
           cmti10: {'10': {c: '<I>&Omega;</I>', tclass: 'normal'}},  
           cmbx10: {'10': {c: '<B>&Omega;</B>', tclass: 'normal'}}  
         });  
       } else {  
         jsMath.Setup.Script('jsMath-mozilla.js');  
         this.alphaPrintBug = 1;  
       }  
       for (var i = 0; i < jsMath.TeX.fam.length; i++) {  
         if (jsMath.TeX.fam[i])   
           {jsMath.styles['.'+jsMath.TeX.fam[i]] += '; position: relative'}  
       }  
       this.allowAbsoluteDelim = 1;  
       this.separateSkips = 1;  
       jsMath.Macro('not','\\mathrel{\\rlap{\\kern3mu/}}');  
     }  
   },  
     
   //  
   //  Handle OmniWeb  
   //  
   OmniWeb: function () {  
     if (navigator.accentColorName) {  
       jsMath.browser = 'OmniWeb';  
       this.allowAbsolute = !navigator.userAgent.match("OmniWeb/v4");  
       this.allowAbsoluteDelim = this.allowAbsolute;  
       this.buttonCheck = 1;  
     }  
   },  
       
   //  
   //  Handle Opera  
   //  
   Opera: function () {  
     if (navigator.appName == 'Opera' || navigator.userAgent.match(" Opera ")) {  
       jsMath.browser = 'Opera';  
       jsMath.Update.TeXfonts({  
         cmr10:  {  
           '10': {c: '&Omega;', tclass: 'normal'},  
           '20': {c: '&#x2C7;', tclass: 'normal'}  
         },  
         cmmi10: {  
           '10': {c: '<I>&Omega;</I>', tclass: 'normal'},  
           '20': {c: '&kappa;', tclass: 'normal'}  
         },  
         cmsy10: {  
           '10': {c: '&otimes;', tclass: 'normal'},  
           '20': {c: '&#x2264;', tclass: 'normal'}  
         },  
         cmex10: {  
           '10': {c: '<SPAN STYLE="font-size: 67%">D</SPAN>'},  
           '20': {c: '<SPAN STYLE="font-size: 82%">"</SPAN>'}  
         },  
         cmti10: {  
           '10': {c: '<I>&Omega;</I>', tclass: 'normal'},  
           '20': {c: '<I>&#x2C7;</I>', tclass: 'normal'}  
         },  
         cmbx10: {  
           '10': {c: '<B>&Omega;</B>', tclass: 'normal'},  
           '20': {c: '<B>&#x2C7;</B>', tclass: 'normal'}  
         }  
       });  
       this.allowAbsolute = 0;  
       this.delay = 10;  
       this.operaHiddenFix = '[Processing Math]';  
     }  
   },  
   
   //  
   //  Handle Safari  
   //  
   Safari: function () {  
     if (navigator.appVersion.match(/Safari\//)) {  
       jsMath.browser = 'Safari';  
       var version = navigator.userAgent.match("Safari/([0-9]+)");  
       version = (version)? version[1] : 200;  // FIXME: hack until I get Tiger  
       for (var i = 0; i < jsMath.TeX.fam.length; i++)  
         {if (jsMath.TeX.fam[i]) {jsMath.TeX[jsMath.TeX.fam[i]].dh = .1}}  
       jsMath.TeX.axis_height += .05;  
       this.allowAbsoluteDelim = version >= 125;  
       this.safariIFRAMEbug = version >= 312;  // FIXME: find out if they fixed it  
       this.safariImgBug = 1;  
       this.buttonCheck = 1;  
     }  
   },  
     
   //  
   //  Handle Konqueror  
   //  
   Konqueror: function () {  
     if (navigator.product && navigator.product.match("Konqueror")) {  
       jsMath.browser = 'Konqueror';  
       jsMath.Update.TeXfonts({  
         cmr10:  {'20': {c: '&#x2C7;', tclass: 'normal'}},  
         cmmi10: {'20': {c: '&kappa;', tclass: 'normal'}},  
         cmsy10: {'20': {c: '&#x2264;', tclass: 'normal'}},  
         cmex10: {'20': {c: '<SPAN STYLE="font-size: 84%">"</SPAN>'}},  
         cmti10: {'20': {c: '<I>&#x2C7;</I>', tclass: 'normal'}},  
         cmbx10: {'20': {c: '<B>&#x2C7;</B>', tclass: 'normal'}}  
       });  
       this.allowAbsolute = 0;  
       this.allowAbsoluteDelim = 0;  
       if (navigator.userAgent.match(/Konqueror\/(\d+)\.(\d+)/)) {  
         if (RegExp.$1 < 3 || (RegExp.$1 == 3 && RegExp.$2 < 3)) {  
           this.separateSkips = 1;  
           this.valignBug = 1;  
           this.hiddenSpace = '&nbsp;';  
           jsMath.Box.prototype.Remeasured = function () {return this};  
         }  
       }  
     }  
   }  
   
 };  
   
 /***************************************************************************/  
   
 /*  
  *  Implement font check and messages  
  */  
 jsMath.Font = {  
     
   fallback: "symbol", // the default fallback method  
   
   // the HTML for the missing font message  
   message:      
     '<B>No TeX fonts found</B> -- using image fonts instead.<BR>\n'  
       + 'These may be slow and might not print well.<BR>\n'  
       + 'Use the jsMath control panel to get additional information.',  
         
   extra_message:  
     'Extra TeX fonts not found: <B><SPAN ID="jsMath.ExtraFonts"></SPAN></B><BR>'  
       + 'Using image fonts instead.  This may be slow and might not print well.<BR>\n'  
       + 'Use the jsMath control panel to get additional information.',  
     
   /*  
    *  Look to see if a font is found.  HACK!  
    *  Check the character in a given position, and see if it is  
    *  wider than the usual one in that position.  
    */  
   Test1: function (name,n,factor) {  
     if (n == null) {n = 124}; if (factor == null) {factor = 2}  
     var wh1 = jsMath.BBoxFor('<SPAN STYLE="font-family: '+name+', serif">'+jsMath.TeX[name][n].c+'</SPAN>');  
     var wh2 = jsMath.BBoxFor('<SPAN STYLE="font-family: serif">'+jsMath.TeX[name][n].c+'</SPAN>');  
     //alert([wh1.w,wh2.w,wh1.h,factor*wh2.w]);  
     return (wh1.w > factor*wh2.w && wh1.h != 0);  
   },  
   
   Test2: function (name,n,factor) {  
     if (n == null) {n = 124}; if (factor == null) {factor = 2}  
     var wh1 = jsMath.BBoxFor('<SPAN STYLE="font-family: '+name+', serif">'+jsMath.TeX[name][n].c+'</SPAN>');  
     var wh2 = jsMath.BBoxFor('<SPAN STYLE="font-family: serif">'+jsMath.TeX[name][n].c+'</SPAN>');  
     //alert([wh2.w,wh1.w,wh1.h,factor*wh1.w]);  
     return (wh2.w > factor*wh1.w && wh1.h != 0);  
   },  
     
   /*  
    *  Check for the availability of TeX fonts.  We do this by looking at  
    *  the width and height of a character in the cmex10 font.  The cmex10  
    *  font has depth considerably greater than most characters' widths (the  
    *  whole font has the depth of the character with greatest depth).  This  
    *  is not the case for most fonts, so if we can access cmex10, the  
    *  height of a character should be much bigger than the width.  
    *  Otherwise, if we don't have cmex10, we'll get a character in another  
    *  font with normal height and width.  In this case, we insert a message  
    *  pointing the user to the jsMath site, and load one of the fallback  
    *  definitions.  
    *    
    */  
   Check: function () {  
     var cookie = jsMath.Controls.cookie;  
     var wh = jsMath.BBoxFor('<SPAN STYLE="font-family: cmex10">'+jsMath.TeX.cmex10[1].c+'</SPAN>');  
     jsMath.nofonts = ((wh.w*3 > wh.h || wh.h == 0) && !this.Test1('cmr10'));  
     if (jsMath.nofonts) {  
       if (cookie.autofont || cookie.font == 'tex') {  
         cookie.font = this.fallback;  
         if (cookie.warn) {  
           jsMath.nofontMessage = 1;  
           cookie.warn = 0; jsMath.Controls.SetCookie(0);  
           if (window.NoFontMessage) {window.NoFontMessage()}  
                                else {this.Message(this.message)}  
         }  
       }  
     } else {  
       if (cookie.autofont) {cookie.font = 'tex'}  
       if (cookie.font == 'tex') return;  
     }  
     if (jsMath.noImgFonts) {cookie.font = 'unicode'}  
     if (cookie.font == 'unicode') {  
       var platform = ({Win32: 'pc', MacPPC: 'mac'})[navigator.platform] || 'unix';  
       jsMath.Setup.Script('jsMath-fallback-'+platform+'.js');  
       return;  
     }  
     if (cookie.font == 'symbol') {  
       jsMath.Setup.Script('jsMath-fallback-symbols.js');  
       return;  
     }  
     jsMath.Img.SetFont({  
       cmr10:  ['all'], cmmi10: ['all'], cmsy10: ['all'],  
       cmex10: ['all'], cmbx10: ['all'], cmti10: ['all']  
     });  
     jsMath.Img.LoadFont('cm-fonts');  
   },  
   
   /*  
    *  The message for when no TeX fonts.  You can eliminate this message  
    *  by including  
    *    
    *      <SCRIPT>jsMath = {Font: {Message: function () {}}}</SCRIPT>  
    *  
    *  in your HTML file, before loading jsMath.js, if you want.  But this  
    *  means the user may not know that he or she can get a better version  
    *  of your page.  
    */  
   Message: function (message) {  
     if(jsMath.Element("Warning")) return;  
     var div = jsMath.Setup.TopHTML("Warning",{'class':'jsM_Warning'},{});  
     div.innerHTML =   
       '<CENTER><TABLE><TR><TD>'  
       + '<DIV CLASS="jsM_noFont">' + message  
       + '<DIV STYLE="text-align:left"><SPAN STYLE="float:left; margin: 8px 0px 0px 20px">'  
       + '<A HREF="javascript:jsMath.Controls.Panel()" CLASS="jsM_fontLink">jsMath Control Panel</A>'  
       + '</SPAN><SPAN STYLE="margin: 8px 20px 0px 0px; float:right">'  
       + '<A HREF="javascript:jsMath.Font.HideMessage()" CLASS="jsM_fontLink">Hide this Message</A>'  
       + '</SPAN></DIV><BR CLEAR="ALL"></DIV>'  
       + '<DIV STYLE="width:22em; height:1px"></DIV>'  
       + '</TD></TR></TABLE></CENTER><HR>';  
   },  
     
   HideMessage: function () {  
     var message = jsMath.Element("Warning");  
     if (message) {message.style.display = "none"}  
   },  
     
   /*  
    *  Register an extra font so jsMath knows about it  
    */  
   Register: function (data) {  
     if (typeof(data) == 'string') {data = {name: data}}  
     var fontname = data.name; var name = fontname.replace(/10$/,'');  
     var fontfam = jsMath.TeX.fam.length;  
     if (!data.style) {data.style = "font-family: "+fontname+", serif"}  
     if (!data.styles) {data.styles = {}}  
     if (!data.macros) {data.macros = {}}  
     /*  
      *  Register font family  
      */  
     jsMath.TeX.fam[fontfam] = fontname;  
     data.macros[name] = ['HandleFont',fontfam];  
     jsMath.Add(jsMath.Parser.prototype.macros,data.macros);  
     /*  
      *  Set up styles  
      */  
     data.styles['.'+fontname] = data.style;  
     jsMath.Setup.Styles(data.styles);  
     jsMath.Setup.TeXfont(fontname);  
     /*  
      *  Check for font and give message if missing  
      */  
     var hasTeXfont = !jsMath.nofonts &&  
                       data.test(fontname,data.testChar,data.testFactor);  
     if (hasTeXfont && jsMath.Controls.cookie.font == 'tex') {  
       if (data.tex) {data.tex(fontname,fontfam)}  
       return;  
     }  
     if (!hasTeXfont && jsMath.Controls.cookie.warn &&  
         jsMath.Controls.cookie.font == 'tex' && !jsMath.nofonts) {  
       if (!jsMath.Element("Warning")) this.Message(this.extra_message);  
       var extra = jsMath.Element("ExtraFonts");  
       if (extra) {  
         if (extra.innerHTML != "") {extra.innerHTML += ','}  
         extra.innerHTML += " " + fontname;  
       }  
     }  
     if (jsMath.Controls.cookie.font == 'unicode') {  
       if (data.fallback) {data.fallback(fontname,fontfam)}  
       return;  
     }  
     //  Image fonts  
     var font = {}; font[fontname] = ['all'];  
     jsMath.Img.SetFont(font);  
     jsMath.Img.LoadFont(fontname);  
   },  
   
   /*  
    *  Load a font  
    */  
   Load: function (name) {jsMath.Setup.Script("fonts/"+name+"/def.js")}  
     
 };  
   
 /***************************************************************************/  
   
 /*  
  *  Implements the jsMath control panel.  
  *  Much of the code is in jsMath-controls.html, which is  
  *  loaded into a hidden IFRAME on demand  
  */  
 jsMath.Controls = {  
   
   //  Data stored in the jsMath cookie  
   cookie: {  
     scale: 100,  
     font: 'tex', autofont: 1, scaleImg: 0, alpha: 1,  
     warn: 1, button: 1,  
     print: 0, keep: '0D'  
   },  
     
   cookiePath: '/',  // can also set cookieDomain  
     
     
   /*  
    *  Load the control panel  
    */  
   Panel: function () {  
     if (!this.panel) {this.panel = jsMath.Element("Controls")}  
     if (this.loaded) {this.Main()} else {  
       this.openMain = 1;  
       if (!this.iframe) {this.iframe = jsMath.Element("Frame")}  
       this.iframe.src = jsMath.root+"jsMath-controls.html";  
     }  
   },  
     
   /*  
    *  Create the control panel button  
    */  
   Button: function () {  
     var button = jsMath.Setup.TopHTML("jsMath",{'class':'jsM_button'},{});  
     button.innerHTML =   
       '<A HREF="javascript:jsMath.Controls.Panel()" '+  
          'STYLE="text-decoration:inherit; color:inherit">' +  
       '<SPAN TITLE="Open jsMath Control Panel">jsMath</SPAN></A>'  
     if (!this.cookie.button) {button.style.display = "none"}  
   },  
     
  /*  
   *  MSIE doesn't implement position:fixed, so redraw the button on scrolls.  
   */  
   MoveButton: function () {  
     if (!this.button) {this.button = jsMath.Element("jsMath")}  
     this.button.style.visibility = "hidden";  
     this.button.style.visibility = "visible";  
   },  
   
   /*  
    *  Create the HTML needed for control panel  
    */  
   Init: function () {  
     this.document = document;  
     this.panel = jsMath.Setup.TopHTML("Controls", {'class':"jsM_panel"},{display:'none'});  
     if (!jsMath.Browser.msieButtonBug) {this.Button()}  
       else {setTimeout("jsMath.Controls.Button()",500)}  
     if (jsMath.Browser.safariIFRAMEbug) {  
       document.write(  
          '<IFRAME SRC="'+jsMath.root+'jsMath-controls.html" '  
          + 'ID="jsMath.Frame" SCROLLING="no" '  
          + 'STYLE="visibility:hidden; position:absolute; width:1em; height:1em;">'  
          + '</IFRAME>\n');  
       return;  
     }  
     try {  
       var frame = document.createElement('iframe');  
       frame.setAttribute('scrolling','no');  
       frame.style.border = '0px';  
       frame.style.width  = '0px';  
       frame.style.height = '0px';  
       document.body.insertBefore(frame,this.panel);  
       this.iframe = frame;  
     } catch (err) {  
       document.write('<IFRAME SRC="" ID="jsMath.Frame" SCROLLING="no" '  
          + 'STYLE="visibility:hidden; position:absolute; width:1em; height:1em;">'  
          + '</IFRAME>\n');  
     }  
   },  
   
   /*  
    *  Get the cookie data from the browser  
    *  (for file: references, use url '?' syntax)  
    */  
   GetCookie: function () {  
     var cookies = document.cookie;  
     if (window.location.protocol == 'file:')   
       {cookies = unescape(window.location.search.substr(1))}  
     if (cookies.match(/jsMath=([^;]*)/)) {  
       var data = RegExp.$1.split(/,/);  
       for (var i = 0; i < data.length; i++) {  
         var x = data[i].match(/(.*):(.*)/);  
         if (x[2].match(/^\d+$/)) {x[2] = 1*x[2]} // convert from string  
         this.cookie[x[1]] = x[2];  
       }  
     }  
   },  
     
   /*  
    *  Save the cookie data in the browser  
    *  (for file: urls, append data like CGI reference)  
    */  
   SetCookie: function (warn) {  
     var cookie = [];  
     for (var id in this.cookie) {cookie[cookie.length] = id + ':' + this.cookie[id]}  
     cookie = cookie.join(',');  
     if (window.location.protocol == 'file:') {  
       if (!warn) return;  
       this.loaded = 0;  
       var href = window.location.href;  
       href = href.replace(/\?.*/,"") + '?jsMath=' + escape(cookie);  
       if (href != window.location.href) {window.location.replace(href)}  
     } else {  
       if (this.cookiePath) {cookie += '; path='+this.cookiePath}  
       if (this.cookieDomain) {cookie += '; domain='+this.cookieDomain}  
       if (this.cookie.keep != '0D') {  
         var ms = {  
           D: 1000*60*60*24,  
           W: 1000*60*60*24*7,  
           M: 1000*60*60*24*30,  
           Y: 1000*60*60*24*365  
         };  
         var exp = new Date;  
         exp.setTime(exp.getTime() +  
             this.cookie.keep.substr(0,1) * ms[this.cookie.keep.substr(1,1)]);  
         cookie += '; expires=' + exp.toGMTString();  
       }  
       document.cookie = 'jsMath='+cookie;  
       var cookies = document.cookie;  
       if (warn && !cookies.match(/jsMath=/))  
         {alert("Cookies must be enabled in order to save jsMath options")}  
     }  
   }  
   
 };  
   
 /***************************************************************************/  
   
 /*  
  *  Implements the actions for clicking and double-clicking  
  *  on math formulas  
  */  
 jsMath.Click = {  
     
   dragging: 0,  
     
   /*  
    *  Create the hidden DIV used for the tex source window  
    */  
   Init: function () {  
     this.source = jsMath.Setup.TopHTML("Source",{'class':'jsM_float'},{display:'none'});  
     this.source.innerHTML =  
       '<DIV CLASS="jsM_drag"><DIV CLASS="jsM_close"></DIV></DIV>'  
       + '<DIV CLASS="jsM_source"><SPAN></SPAN></DIV>';  
     this.drag = this.source.firstChild;  
     this.tex  = this.drag.nextSibling.firstChild;  
     this.drag.firstChild.onclick = jsMath.Click.CloseSource;  
     this.drag.onmousedown = jsMath.Click.StartDragging;  
     this.drag.ondragstart = jsMath.Click.False;  
     this.drag.onselectstart = jsMath.Click.False;  
     this.source.onclick = jsMath.Click.CheckClose;  
   },  
   False: function () {return false},  
   
   /*  
    *  Handle clicking on math to get control panel  
    */  
   CheckClick: function (event) {  
     if (!event) {event = window.event}  
     if (event.altKey) jsMath.Controls.Panel();  
   },  
     
   /*  
    *  Handle double-click for seeing TeX code  
    */  
   CheckDblClick: function (event) {  
     if (!event) {event = window.event}  
     var event = jsMath.Click.Event(event);  
   
     var source = jsMath.Click.source  
     var tex = jsMath.Click.tex;  
   
     source.style.visibility = 'hidden';  
     source.style.display = ''; source.style.width = '';  
     source.style.left = ''; source.style.top = '';  
     tex.innerHTML = '';  
   
     var TeX = this.alt;  
     TeX = TeX.replace(/^\s+|\s+$/g,'');  
     TeX = TeX.replace(/&/g,'&amp;');  
     TeX = TeX.replace(/</g,'&lt;');  
     TeX = TeX.replace(/>/g,'&gt;');  
     TeX = TeX.replace(/\n/g,'<BR>');  
     tex.innerHTML = TeX;  
   
     var h = source.offsetHeight; var w;  
     if (jsMath.Browser.msieDivWidthBug) {  
       tex.className = 'jsM_source';      // Work around MSIE bug where  
       w = tex.offsetWidth + 5;           // DIV's don't collapse to  
       tex.className = '';                // their natural widths  
     } else {  
       w = source.offsetWidth;  
     }  
     w = Math.max(50,Math.min(w,.8*event.W,event.W-40));  
     var x = Math.floor(event.x-w/2); var y = Math.floor(event.y-h/2);  
     x = event.X + Math.max(Math.min(x,event.W-w-20),20);  
     y = event.Y + Math.max(Math.min(y,event.H-h-5),5);  
   
     source.style.left = x+'px'; source.style.top = y+'px';  
     source.style.width = w+'px';  
     source.style.visibility = '';  
     jsMath.Click.left = x + event.X; jsMath.Click.top = y + event.Y;  
     jsMath.Click.w = w; jsMath.Click.h = source.offsetHeight;  
   
     jsMath.Click.DeselectText(x,y);  
     return false;  
   },  
   
   /*  
    *  Get window width, height, and offsets plus  
    *  position of pointer relative to the window  
    */  
   Event: function (event) {  
     var W = window.innerWidth  || document.body.clientWidth;  
     var H = window.innerHeight || document.body.clientHeight;  
     var X = window.pageXOffset; var Y = window.pageYOffset;  
     if (X == null) {X = document.body.clientLeft; Y = document.body.clientTop}  
     var x = event.pageX; var y = event.pageY;  
     if (x == null) {  
       x = event.clientX; y = event.clientY;  
       if (jsMath.browser == 'MSIE' && document.compatMode == 'CSS1Compat') {  
         X = document.documentElement.scrollLeft;  
         Y = document.documentElement.scrollTop;  
         W = document.documentElement.clientWidth;  
         H = document.documentElement.clientHeight;  
       } else {  
         X = document.body.scrollLeft;  
         Y = document.body.scrollTop;  
       }  
     } else {x -= X; y -= Y}  
   
     return {x: x, y: y, W: W, H: H, X: X, Y: Y};  
   },  
     
   /*  
    *  Unselect whatever text is selected (since double-clicking  
    *  usually selects something)  
    */  
   DeselectText: function (x,y) {  
     if (window.getSelection && window.getSelection().removeAllRanges)  
       {window.getSelection().removeAllRanges()}  
     else if (document.getSelection && document.getSelection().removeAllRanges)  
       {document.getSelection().removeAllRanges()}  
     else if (document.selection && document.selection.empty)  
       {document.selection.empty()}  
     else {  
       /* Hack to deselect the text in Opera and Safari */  
       if (jsMath.browser == 'MSIE') return;  // don't try it if MISE on Mac  
       jsMath.hiddenTop.innerHTML =  
         '<textarea style="visibility:hidden" ROWS="1" COLS="1">a</textarea>';  
       jsMath.hiddenTop.firstChild.style.position = 'absolute';  
       jsMath.hiddenTop.firstChild.style.left = x+'px';  
       jsMath.hiddenTop.firstChild.style.top  = y+'px';  
       setTimeout(jsMath.Click.SelectHidden,1);  
     }  
   },  
   SelectHidden: function () {  
     jsMath.hiddenTop.firstChild.focus();  
     jsMath.hiddenTop.firstChild.select();  
     jsMath.hiddenTop.innerHTML = '';  
   },  
   
   /*  
    *  Close the TeX source window  
    */  
   CloseSource: function () {  
     jsMath.Click.tex.innerHTML = '';  
     jsMath.Click.source.style.display = 'none';  
     jsMath.Click.source.style.visibility = 'hidden';  
     jsMath.Click.StopDragging();  
     return false;  
   },  
   CheckClose: function (event) {  
     if (!event) {event = window.event}  
     if (event.altKey) {jsMath.Click.CloseSource(); return false}  
   },  
     
   /*  
    *  Set up for dragging the source panel  
    */  
   StartDragging: function (event) {  
     if (!event) {event = window.event}  
     if (jsMath.Click.dragging) {jsMath.Click.StopDragging(event)}  
     var event = jsMath.Click.Event(event);  
     jsMath.Click.dragging = 1;  
     jsMath.Click.x = event.x + 2*event.X - jsMath.Click.left;  
     jsMath.Click.y = event.y + 2*event.Y - jsMath.Click.top;  
     jsMath.Click.oldonmousemove = document.body.onmousemove;  
     jsMath.Click.oldonmouseup = document.body.onmouseup;  
     document.body.onmousemove = jsMath.Click.DragSource;  
     document.body.onmouseup = jsMath.Click.StopDragging;  
     return false;  
   },  
     
   /*  
    *  Stop dragging the source window  
    */  
   StopDragging: function (event) {  
     if (jsMath.Click.dragging) {  
       document.body.onmousemove = jsMath.Click.oldonmousemove;  
       document.body.onmouseup   = jsMath.Click.oldonmouseup;  
       jsMath.Click.oldonmousemove = null;  
       jsMath.Click.oldonmouseup   = null;  
       jsMath.Click.dragging = 0;  
     }  
     return false;  
   },  
     
   /*  
    *  Move the source window (but stay within the browser window)  
    */  
   DragSource: function (event) {  
     if (!event) {event = window.event}  
     if (jsMath.Browser.buttonCheck && !event.button) {return jsMath.Click.StopDragging(event)}  
     event = jsMath.Click.Event(event);  
     var x = event.x + event.X - jsMath.Click.x;  
     var y = event.y + event.Y - jsMath.Click.y;  
     x = Math.max(event.X,Math.min(event.W+event.X-jsMath.Click.w,x));  
     y = Math.max(event.Y,Math.min(event.H+event.Y-jsMath.Click.h,y));  
     jsMath.Click.source.style.left = x + 'px';  
     jsMath.Click.source.style.top  = y + 'px';  
     jsMath.Click.left = x + event.X; jsMath.Click.top = y + event.Y;  
     return false;  
   }  
   
 };  
   
 /***************************************************************************/  
   
 /*  
  *  The TeX font information  
  */  
 jsMath.TeX = {  
   
   //  
   //  The TeX font parameters  
   //  
   thinmuskip:   3/18,  
   medmuskip:    4/18,  
   thickmuskip:  5/18,  
   
   x_height:    .430554,  
   quad:        1,  
   num1:        .676508,  
   num2:        .393732,  
   num3:        .44373,  
   denom1:      .685951,  
   denom2:      .344841,  
   sup1:        .412892,  
   sup2:        .362892,  
   sup3:        .288888,  
   sub1:        .15,  
   sub2:        .247217,  
   sup_drop:    .386108,  
   sub_drop:    .05,  
   delim1:     2.39,  
   delim2:     1.0,  
   axis_height: .25,  
   default_rule_thickness: .04,  
   big_op_spacing1:  .111111,  
   big_op_spacing2:  .166666,  
   big_op_spacing3:  .2,  
   big_op_spacing4:  .6,  
   big_op_spacing5:  .1,  
   
   integer:          6553.6,     // conversion of em's to TeX internal integer  
   scriptspace:         .05,  
   nulldelimiterspace:  .12,  
   delimiterfactor:     901,  
   delimitershortfall:   .5,  
   scale:                 1,     //  scaling factor for font dimensions  
    
   //  The TeX math atom types (see Appendix G of the TeXbook)  
   atom: ['ord', 'op', 'bin', 'rel', 'open', 'close', 'punct', 'ord'],  
   
   //  The TeX font families  
   fam: ['cmr10','cmmi10','cmsy10','cmex10','cmti10','','cmbx10'],  
   
   /*  
    *  The following are the TeX font mappings and metrics.  The metric  
    *  information comes directly from the TeX .tfm files, and the  
    *  character mappings are for the TrueType TeX fonts.  Browser-specific  
    *  adjustments are made to these tables in the Browser.Init() routine  
    */  
   cmr10: [  
     // 00 - 0F  
     {c: '&#xA1;', h: 0.683, w: 0.625},  
     {c: '&#xA2;', h: 0.683, w: 0.833},  
     {c: '&#xA3;', h: 0.683, w: 0.778},  
     {c: '&#xA4;', h: 0.683, w: 0.694},  
     {c: '&#xA5;', h: 0.683, w: 0.667},  
     {c: '&#xA6;', h: 0.683, w: 0.75},  
     {c: '&#xA7;', h: 0.683, w: 0.722},  
     {c: '&#xA8;', h: 0.683, w: 0.778},  
     {c: '&#xA9;', h: 0.683, w: 0.722},  
     {c: '&#xAA;', h: 0.683, w: 0.778},  
     {c: '&#xAD;', h: 0.683, w: 0.722},  
     {c: '&#xAE;', h: 0.694, w: 0.583, ic: 0.0778, krn: {'39': 0.0778, '63': 0.0778, '33': 0.0778, '41': 0.0778, '93': 0.0778}, lig: {'105': 14, '108': 15}},  
     {c: '&#xAF;', h: 0.694, w: 0.556},  
     {c: '&#xB0;', h: 0.694, w: 0.556},  
     {c: '&#xB1;', h: 0.694, w: 0.833},  
     {c: '&#xB2;', h: 0.694, w: 0.833},  
     // 10 - 1F  
     {c: '&#xB3;', h: 0.431, w: 0.278},  
     {c: '&#xB4;', h: 0.431, d: 0.194, w: 0.306},  
     {c: '&#xB5;', h: 0.694, w: 0.5},  
     {c: '&#xB6;', h: 0.694, w: 0.5},  
     {c: '&#x2219;', h: 0.628, w: 0.5},  
     {c: '&#xB8;', h: 0.694, w: 0.5},  
     {c: '&#xB9;', h: 0.568, w: 0.5},  
     {c: '&#xBA;', h: 0.694, w: 0.75},  
     {c: '&#xBB;', d: 0.17, w: 0.444},  
     {c: '&#xBC;', h: 0.694, w: 0.5},  
     {c: '&#xBD;', h: 0.431, w: 0.722},  
     {c: '&#xBE;', h: 0.431, w: 0.778},  
     {c: '&#xBF;', h: 0.528, d: 0.0972, w: 0.5},  
     {c: '&#xC0;', h: 0.683, w: 0.903},  
     {c: '&#xC1;', h: 0.683, w: 1.01},  
     {c: '&#xC2;', h: 0.732, d: 0.0486, w: 0.778},  
     // 20 - 2F  
     {c: '&#xC3;', h: 0.431, w: 0.278, krn: {'108': -0.278, '76': -0.319}},  
     {c: '!', h: 0.694, w: 0.278, lig: {'96': 60}},  
     {c: '"', h: 0.694, w: 0.5},  
     {c: '#', h: 0.694, d: 0.194, w: 0.833},  
     {c: '$', h: 0.75, d: 0.0556, w: 0.5},  
     {c: '%', h: 0.75, d: 0.0556, w: 0.833},  
     {c: '&#x26;', h: 0.694, w: 0.778},  
     {c: '\'', h: 0.694, w: 0.278, krn: {'63': 0.111, '33': 0.111}, lig: {'39': 34}},  
     {c: '(', h: 0.75, d: 0.25, w: 0.389},  
     {c: ')', h: 0.75, d: 0.25, w: 0.389},  
     {c: '*', h: 0.75, w: 0.5},  
     {c: '+', h: 0.583, d: 0.0833, w: 0.778},  
     {c: ',', h: 0.106, d: 0.194, w: 0.278},  
     {c: '-', h: 0.431, w: 0.333, lig: {'45': 123}},  
     {c: '.', h: 0.106, w: 0.278},  
     {c: '/', h: 0.75, d: 0.25, w: 0.5},  
     // 30 - 3F  
     {c: '0', h: 0.644, w: 0.5},  
     {c: '1', h: 0.644, w: 0.5},  
     {c: '2', h: 0.644, w: 0.5},  
     {c: '3', h: 0.644, w: 0.5},  
     {c: '4', h: 0.644, w: 0.5},  
     {c: '5', h: 0.644, w: 0.5},  
     {c: '6', h: 0.644, w: 0.5},  
     {c: '7', h: 0.644, w: 0.5},  
     {c: '8', h: 0.644, w: 0.5},  
     {c: '9', h: 0.644, w: 0.5},  
     {c: ':', h: 0.431, w: 0.278},  
     {c: ';', h: 0.431, d: 0.194, w: 0.278},  
     {c: '&#x3C;', h: 0.5, d: 0.194, w: 0.278},  
     {c: '=', h: 0.367, d: -0.133, w: 0.778},  
     {c: '&#x3E;', h: 0.5, d: 0.194, w: 0.472},  
     {c: '?', h: 0.694, w: 0.472, lig: {'96': 62}},  
     // 40 - 4F  
     {c: '@', h: 0.694, w: 0.778},  
     {c: 'A', h: 0.683, w: 0.75, krn: {'116': -0.0278, '67': -0.0278, '79': -0.0278, '71': -0.0278, '85': -0.0278, '81': -0.0278, '84': -0.0833, '89': -0.0833, '86': -0.111, '87': -0.111}},  
     {c: 'B', h: 0.683, w: 0.708},  
     {c: 'C', h: 0.683, w: 0.722},  
     {c: 'D', h: 0.683, w: 0.764, krn: {'88': -0.0278, '87': -0.0278, '65': -0.0278, '86': -0.0278, '89': -0.0278}},  
     {c: 'E', h: 0.683, w: 0.681},  
     {c: 'F', h: 0.683, w: 0.653, krn: {'111': -0.0833, '101': -0.0833, '117': -0.0833, '114': -0.0833, '97': -0.0833, '65': -0.111, '79': -0.0278, '67': -0.0278, '71': -0.0278, '81': -0.0278}},  
     {c: 'G', h: 0.683, w: 0.785},  
     {c: 'H', h: 0.683, w: 0.75},  
     {c: 'I', h: 0.683, w: 0.361, krn: {'73': 0.0278}},  
     {c: 'J', h: 0.683, w: 0.514},  
     {c: 'K', h: 0.683, w: 0.778, krn: {'79': -0.0278, '67': -0.0278, '71': -0.0278, '81': -0.0278}},  
     {c: 'L', h: 0.683, w: 0.625, krn: {'84': -0.0833, '89': -0.0833, '86': -0.111, '87': -0.111}},  
     {c: 'M', h: 0.683, w: 0.917},  
     {c: 'N', h: 0.683, w: 0.75},  
     {c: 'O', h: 0.683, w: 0.778, krn: {'88': -0.0278, '87': -0.0278, '65': -0.0278, '86': -0.0278, '89': -0.0278}},  
     // 50 - 5F  
     {c: 'P', h: 0.683, w: 0.681, krn: {'65': -0.0833, '111': -0.0278, '101': -0.0278, '97': -0.0278, '46': -0.0833, '44': -0.0833}},  
     {c: 'Q', h: 0.683, d: 0.194, w: 0.778},  
     {c: 'R', h: 0.683, w: 0.736, krn: {'116': -0.0278, '67': -0.0278, '79': -0.0278, '71': -0.0278, '85': -0.0278, '81': -0.0278, '84': -0.0833, '89': -0.0833, '86': -0.111, '87': -0.111}},  
     {c: 'S', h: 0.683, w: 0.556},  
     {c: 'T', h: 0.683, w: 0.722, krn: {'121': -0.0278, '101': -0.0833, '111': -0.0833, '114': -0.0833, '97': -0.0833, '65': -0.0833, '117': -0.0833}},  
     {c: 'U', h: 0.683, w: 0.75},  
     {c: 'V', h: 0.683, w: 0.75, ic: 0.0139, krn: {'111': -0.0833, '101': -0.0833, '117': -0.0833, '114': -0.0833, '97': -0.0833, '65': -0.111, '79': -0.0278, '67': -0.0278, '71': -0.0278, '81': -0.0278}},  
     {c: 'W', h: 0.683, w: 1.03, ic: 0.0139, krn: {'111': -0.0833, '101': -0.0833, '117': -0.0833, '114': -0.0833, '97': -0.0833, '65': -0.111, '79': -0.0278, '67': -0.0278, '71': -0.0278, '81': -0.0278}},  
     {c: 'X', h: 0.683, w: 0.75, krn: {'79': -0.0278, '67': -0.0278, '71': -0.0278, '81': -0.0278}},  
     {c: 'Y', h: 0.683, w: 0.75, ic: 0.025, krn: {'101': -0.0833, '111': -0.0833, '114': -0.0833, '97': -0.0833, '65': -0.0833, '117': -0.0833}},  
     {c: 'Z', h: 0.683, w: 0.611},  
     {c: '[', h: 0.75, d: 0.25, w: 0.278},  
     {c: '\\', h: 0.694, w: 0.5},  
     {c: ']', h: 0.75, d: 0.25, w: 0.278},  
     {c: '^', h: 0.694, w: 0.5},  
     {c: '_', h: 0.668, w: 0.278},  
     // 60 - 6F  
     {c: '&#x60;', h: 0.694, w: 0.278, lig: {'96': 92}},  
     {c: 'a', h: 0.431, w: 0.5, krn: {'118': -0.0278, '106': 0.0556, '121': -0.0278, '119': -0.0278}},  
     {c: 'b', h: 0.694, w: 0.556, krn: {'101': 0.0278, '111': 0.0278, '120': -0.0278, '100': 0.0278, '99': 0.0278, '113': 0.0278, '118': -0.0278, '106': 0.0556, '121': -0.0278, '119': -0.0278}},  
     {c: 'c', h: 0.431, w: 0.444, krn: {'104': -0.0278, '107': -0.0278}},  
     {c: 'd', h: 0.694, w: 0.556},  
     {c: 'e', h: 0.431, w: 0.444},  
     {c: 'f', h: 0.694, w: 0.306, ic: 0.0778, krn: {'39': 0.0778, '63': 0.0778, '33': 0.0778, '41': 0.0778, '93': 0.0778}, lig: {'105': 12, '102': 11, '108': 13}},  
     {c: 'g', h: 0.431, d: 0.194, w: 0.5, ic: 0.0139, krn: {'106': 0.0278}},  
     {c: 'h', h: 0.694, w: 0.556, krn: {'116': -0.0278, '117': -0.0278, '98': -0.0278, '121': -0.0278, '118': -0.0278, '119': -0.0278}},  
     {c: 'i', h: 0.668, w: 0.278},  
     {c: 'j', h: 0.668, d: 0.194, w: 0.306},  
     {c: 'k', h: 0.694, w: 0.528, krn: {'97': -0.0556, '101': -0.0278, '97': -0.0278, '111': -0.0278, '99': -0.0278}},  
     {c: 'l', h: 0.694, w: 0.278},  
     {c: 'm', h: 0.431, w: 0.833, krn: {'116': -0.0278, '117': -0.0278, '98': -0.0278, '121': -0.0278, '118': -0.0278, '119': -0.0278}},  
     {c: 'n', h: 0.431, w: 0.556, krn: {'116': -0.0278, '117': -0.0278, '98': -0.0278, '121': -0.0278, '118': -0.0278, '119': -0.0278}},  
     {c: 'o', h: 0.431, w: 0.5, krn: {'101': 0.0278, '111': 0.0278, '120': -0.0278, '100': 0.0278, '99': 0.0278, '113': 0.0278, '118': -0.0278, '106': 0.0556, '121': -0.0278, '119': -0.0278}},  
     // 70 - 7F  
     {c: 'p', h: 0.431, d: 0.194, w: 0.556, krn: {'101': 0.0278, '111': 0.0278, '120': -0.0278, '100': 0.0278, '99': 0.0278, '113': 0.0278, '118': -0.0278, '106': 0.0556, '121': -0.0278, '119': -0.0278}},  
     {c: 'q', h: 0.431, d: 0.194, w: 0.528},  
     {c: 'r', h: 0.431, w: 0.392},  
     {c: 's', h: 0.431, w: 0.394},  
     {c: 't', h: 0.615, w: 0.389, krn: {'121': -0.0278, '119': -0.0278}},  
     {c: 'u', h: 0.431, w: 0.556, krn: {'119': -0.0278}},  
     {c: 'v', h: 0.431, w: 0.528, ic: 0.0139, krn: {'97': -0.0556, '101': -0.0278, '97': -0.0278, '111': -0.0278, '99': -0.0278}},  
     {c: 'w', h: 0.431, w: 0.722, ic: 0.0139, krn: {'101': -0.0278, '97': -0.0278, '111': -0.0278, '99': -0.0278}},  
     {c: 'x', h: 0.431, w: 0.528},  
     {c: 'y', h: 0.431, d: 0.194, w: 0.528, ic: 0.0139, krn: {'111': -0.0278, '101': -0.0278, '97': -0.0278, '46': -0.0833, '44': -0.0833}},  
     {c: 'z', h: 0.431, w: 0.444},  
     {c: '&#x7B;', h: 0.431, w: 0.5, ic: 0.0278, lig: {'45': 124}},  
     {c: '&#x7C;', h: 0.431, w: 1, ic: 0.0278},  
     {c: '&#x7D;', h: 0.694, w: 0.5},  
     {c: '&#x7E;', h: 0.668, w: 0.5},  
     {c: '&#xC4;', h: 0.668, w: 0.5}  
   ],  
     
   cmmi10: [  
     // 00 - 0F  
     {c: '&#xA1;', h: 0.683, w: 0.615, ic: 0.139, krn: {'61': -0.0556, '59': -0.111, '58': -0.111, '127': 0.0833}},  
     {c: '&#xA2;', h: 0.683, w: 0.833, krn: {'127': 0.167}},  
     {c: '&#xA3;', h: 0.683, w: 0.763, ic: 0.0278, krn: {'127': 0.0833}},  
     {c: '&#xA4;', h: 0.683, w: 0.694, krn: {'127': 0.167}},  
     {c: '&#xA5;', h: 0.683, w: 0.742, ic: 0.0757, krn: {'127': 0.0833}},  
     {c: '&#xA6;', h: 0.683, w: 0.831, ic: 0.0812, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0556}},  
     {c: '&#xA7;', h: 0.683, w: 0.78, ic: 0.0576, krn: {'127': 0.0833}},  
     {c: '&#xA8;', h: 0.683, w: 0.583, ic: 0.139, krn: {'61': -0.0556, '59': -0.111, '58': -0.111, '127': 0.0556}},  
     {c: '&#xA9;', h: 0.683, w: 0.667, krn: {'127': 0.0833}},  
     {c: '&#xAA;', h: 0.683, w: 0.612, ic: 0.11, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0556}},  
     {c: '&#xAD;', h: 0.683, w: 0.772, ic: 0.0502, krn: {'127': 0.0833}},  
     {c: '&#xAE;', h: 0.431, w: 0.64, ic: 0.0037, krn: {'127': 0.0278}},  
     {c: '&#xAF;', h: 0.694, d: 0.194, w: 0.566, ic: 0.0528, krn: {'127': 0.0833}},  
     {c: '&#xB0;', h: 0.431, d: 0.194, w: 0.518, ic: 0.0556},  
     {c: '&#xB1;', h: 0.694, w: 0.444, ic: 0.0378, krn: {'59': -0.0556, '58': -0.0556, '127': 0.0556}},  
     {c: '&#xB2;', h: 0.431, w: 0.406, krn: {'127': 0.0556}},  
     // 10 - 1F  
     {c: '&#xB3;', h: 0.694, d: 0.194, w: 0.438, ic: 0.0738, krn: {'127': 0.0833}},  
     {c: '&#xB4;', h: 0.431, d: 0.194, w: 0.497, ic: 0.0359, krn: {'127': 0.0556}},  
     {c: '&#xB5;', h: 0.694, w: 0.469, ic: 0.0278, krn: {'127': 0.0833}},  
     {c: '&#xB6;', h: 0.431, w: 0.354, krn: {'127': 0.0556}},  
     {c: '&#x2219;', h: 0.431, w: 0.576},  
     {c: '&#xB8;', h: 0.694, w: 0.583},  
     {c: '&#xB9;', h: 0.431, d: 0.194, w: 0.603, krn: {'127': 0.0278}},  
     {c: '&#xBA;', h: 0.431, w: 0.494, ic: 0.0637, krn: {'59': -0.0556, '58': -0.0556, '127': 0.0278}},  
     {c: '&#xBB;', h: 0.694, d: 0.194, w: 0.438, ic: 0.046, krn: {'127': 0.111}},  
     {c: '&#xBC;', h: 0.431, w: 0.57, ic: 0.0359},  
     {c: '&#xBD;', h: 0.431, d: 0.194, w: 0.517, krn: {'127': 0.0833}},  
     {c: '&#xBE;', h: 0.431, w: 0.571, ic: 0.0359, krn: {'59': -0.0556, '58': -0.0556}},  
     {c: '&#xBF;', h: 0.431, w: 0.437, ic: 0.113, krn: {'59': -0.0556, '58': -0.0556, '127': 0.0278}},  
     {c: '&#xC0;', h: 0.431, w: 0.54, ic: 0.0359, krn: {'127': 0.0278}},  
     {c: '&#xC1;', h: 0.694, d: 0.194, w: 0.596, krn: {'127': 0.0833}},  
     {c: '&#xC2;', h: 0.431, d: 0.194, w: 0.626, krn: {'127': 0.0556}},  
     // 20 - 2F  
     {c: '&#xC3;', h: 0.694, d: 0.194, w: 0.651, ic: 0.0359, krn: {'127': 0.111}},  
     {c: '!', h: 0.431, w: 0.622, ic: 0.0359},  
     {c: '"', h: 0.431, w: 0.466, krn: {'127': 0.0833}},  
     {c: '#', h: 0.694, w: 0.591, krn: {'127': 0.0833}},  
     {c: '$', h: 0.431, w: 0.828, ic: 0.0278},  
     {c: '%', h: 0.431, d: 0.194, w: 0.517, krn: {'127': 0.0833}},  
     {c: '&#x26;', h: 0.431, d: 0.0972, w: 0.363, ic: 0.0799, krn: {'127': 0.0833}},  
     {c: '\'', h: 0.431, d: 0.194, w: 0.654, krn: {'127': 0.0833}},  
     {c: '(', h: 0.367, d: -0.133, w: 1},  
     {c: ')', h: 0.367, d: -0.133, w: 1},  
     {c: '*', h: 0.367, d: -0.133, w: 1},  
     {c: '+', h: 0.367, d: -0.133, w: 1},  
     {c: ',', h: 0.464, d: -0.0363, w: 0.278},  
     {c: '-', h: 0.464, d: -0.0363, w: 0.278},  
     {c: '.', h: 0.465, d: -0.0347, w: 0.5},  
     {c: '/', h: 0.465, d: -0.0347, w: 0.5},  
     // 30 - 3F  
     {c: '0', h: 0.431, w: 0.5},  
     {c: '1', h: 0.431, w: 0.5},  
     {c: '2', h: 0.431, w: 0.5},  
     {c: '3', h: 0.431, d: 0.194, w: 0.5},  
     {c: '4', h: 0.431, d: 0.194, w: 0.5},  
     {c: '5', h: 0.431, d: 0.194, w: 0.5},  
     {c: '6', h: 0.644, w: 0.5},  
     {c: '7', h: 0.431, d: 0.194, w: 0.5},  
     {c: '8', h: 0.644, w: 0.5},  
     {c: '9', h: 0.431, d: 0.194, w: 0.5},  
     {c: ':', h: 0.106, w: 0.278},  
     {c: ';', h: 0.106, d: 0.194, w: 0.278},  
     {c: '&#x3C;', h: 0.539, d: 0.0391, w: 0.778},  
     {c: '=', h: 0.75, d: 0.25, w: 0.5, krn: {'1': -0.0556, '65': -0.0556, '77': -0.0556, '78': -0.0556, '89': 0.0556, '90': -0.0556}},  
     {c: '&#x3E;', h: 0.539, d: 0.0391, w: 0.778},  
     {c: '?', h: 0.465, d: -0.0347, w: 0.5},  
     // 40 - 4F  
     {c: '@', h: 0.694, w: 0.531, ic: 0.0556, krn: {'127': 0.0833}},  
     {c: 'A', h: 0.683, w: 0.75, krn: {'127': 0.139}},  
     {c: 'B', h: 0.683, w: 0.759, ic: 0.0502, krn: {'127': 0.0833}},  
     {c: 'C', h: 0.683, w: 0.715, ic: 0.0715, krn: {'61': -0.0278, '59': -0.0556, '58': -0.0556, '127': 0.0833}},  
     {c: 'D', h: 0.683, w: 0.828, ic: 0.0278, krn: {'127': 0.0556}},  
     {c: 'E', h: 0.683, w: 0.738, ic: 0.0576, krn: {'127': 0.0833}},  
     {c: 'F', h: 0.683, w: 0.643, ic: 0.139, krn: {'61': -0.0556, '59': -0.111, '58': -0.111, '127': 0.0833}},  
     {c: 'G', h: 0.683, w: 0.786, krn: {'127': 0.0833}},  
     {c: 'H', h: 0.683, w: 0.831, ic: 0.0812, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0556}},  
     {c: 'I', h: 0.683, w: 0.44, ic: 0.0785, krn: {'127': 0.111}},  
     {c: 'J', h: 0.683, w: 0.555, ic: 0.0962, krn: {'61': -0.0556, '59': -0.111, '58': -0.111, '127': 0.167}},  
     {c: 'K', h: 0.683, w: 0.849, ic: 0.0715, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0556}},  
     {c: 'L', h: 0.683, w: 0.681, krn: {'127': 0.0278}},  
     {c: 'M', h: 0.683, w: 0.97, ic: 0.109, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0833}},  
     {c: 'N', h: 0.683, w: 0.803, ic: 0.109, krn: {'61': -0.0833, '61': -0.0278, '59': -0.0556, '58': -0.0556, '127': 0.0833}},  
     {c: 'O', h: 0.683, w: 0.763, ic: 0.0278, krn: {'127': 0.0833}},  
     // 50 - 5F  
     {c: 'P', h: 0.683, w: 0.642, ic: 0.139, krn: {'61': -0.0556, '59': -0.111, '58': -0.111, '127': 0.0833}},  
     {c: 'Q', h: 0.683, d: 0.194, w: 0.791, krn: {'127': 0.0833}},  
     {c: 'R', h: 0.683, w: 0.759, ic: 0.00773, krn: {'127': 0.0833}},  
     {c: 'S', h: 0.683, w: 0.613, ic: 0.0576, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0833}},  
     {c: 'T', h: 0.683, w: 0.584, ic: 0.139, krn: {'61': -0.0278, '59': -0.0556, '58': -0.0556, '127': 0.0833}},  
     {c: 'U', h: 0.683, w: 0.683, ic: 0.109, krn: {'59': -0.111, '58': -0.111, '61': -0.0556, '127': 0.0278}},  
     {c: 'V', h: 0.683, w: 0.583, ic: 0.222, krn: {'59': -0.167, '58': -0.167, '61': -0.111}},  
     {c: 'W', h: 0.683, w: 0.944, ic: 0.139, krn: {'59': -0.167, '58': -0.167, '61': -0.111}},  
     {c: 'X', h: 0.683, w: 0.828, ic: 0.0785, krn: {'61': -0.0833, '61': -0.0278, '59': -0.0556, '58': -0.0556, '127': 0.0833}},  
     {c: 'Y', h: 0.683, w: 0.581, ic: 0.222, krn: {'59': -0.167, '58': -0.167, '61': -0.111}},  
     {c: 'Z', h: 0.683, w: 0.683, ic: 0.0715, krn: {'61': -0.0556, '59': -0.0556, '58': -0.0556, '127': 0.0833}},  
     {c: '[', h: 0.75, w: 0.389},  
     {c: '\\', h: 0.694, d: 0.194, w: 0.389},  
     {c: ']', h: 0.694, d: 0.194, w: 0.389},  
     {c: '^', h: 0.358, d: -0.142, w: 1},  
     {c: '_', h: 0.358, d: -0.142, w: 1},  
     // 60 - 6F  
     {c: '&#x60;', h: 0.694, w: 0.417, krn: {'127': 0.111}},  
     {c: 'a', h: 0.431, w: 0.529},  
     {c: 'b', h: 0.694, w: 0.429},  
     {c: 'c', h: 0.431, w: 0.433, krn: {'127': 0.0556}},  
     {c: 'd', h: 0.694, w: 0.52, krn: {'89': 0.0556, '90': -0.0556, '106': -0.111, '102': -0.167, '127': 0.167}},  
     {c: 'e', h: 0.431, w: 0.466, krn: {'127': 0.0556}},  
     {c: 'f', h: 0.694, d: 0.194, w: 0.49, ic: 0.108, krn: {'59': -0.0556, '58': -0.0556, '127': 0.167}},  
     {c: 'g', h: 0.431, d: 0.194, w: 0.477, ic: 0.0359, krn: {'127': 0.0278}},  
     {c: 'h', h: 0.694, w: 0.576, krn: {'127': -0.0278}},  
     {c: 'i', h: 0.66, w: 0.345},  
     {c: 'j', h: 0.66, d: 0.194, w: 0.412, ic: 0.0572, krn: {'59': -0.0556, '58': -0.0556}},  
     {c: 'k', h: 0.694, w: 0.521, ic: 0.0315},  
     {c: 'l', h: 0.694, w: 0.298, ic: 0.0197, krn: {'127': 0.0833}},  
     {c: 'm', h: 0.431, w: 0.878},  
     {c: 'n', h: 0.431, w: 0.6},  
     {c: 'o', h: 0.431, w: 0.485, krn: {'127': 0.0556}},  
     // 70 - 7F  
     {c: 'p', h: 0.431, d: 0.194, w: 0.503, krn: {'127': 0.0833}},  
     {c: 'q', h: 0.431, d: 0.194, w: 0.446, ic: 0.0359, krn: {'127': 0.0833}},  
     {c: 'r', h: 0.431, w: 0.451, ic: 0.0278, krn: {'59': -0.0556, '58': -0.0556, '127': 0.0556}},  
     {c: 's', h: 0.431, w: 0.469, krn: {'127': 0.0556}},  
     {c: 't', h: 0.615, w: 0.361, krn: {'127': 0.0833}},  
     {c: 'u', h: 0.431, w: 0.572, krn: {'127': 0.0278}},  
     {c: 'v', h: 0.431, w: 0.485, ic: 0.0359, krn: {'127': 0.0278}},  
     {c: 'w', h: 0.431, w: 0.716, ic: 0.0269, krn: {'127': 0.0833}},  
     {c: 'x', h: 0.431, w: 0.572, krn: {'127': 0.0278}},  
     {c: 'y', h: 0.431, d: 0.194, w: 0.49, ic: 0.0359, krn: {'127': 0.0556}},  
     {c: 'z', h: 0.431, w: 0.465, ic: 0.044, krn: {'127': 0.0556}},  
     {c: '&#x7B;', h: 0.431, w: 0.322, krn: {'127': 0.0278}},  
     {c: '&#x7C;', h: 0.431, d: 0.194, w: 0.384, krn: {'127': 0.0833}},  
     {c: '&#x7D;', h: 0.431, d: 0.194, w: 0.636, krn: {'127': 0.111}},  
     {c: '&#x7E;', h: 0.714, w: 0.5, ic: 0.154},  
     {c: '&#xC4;', h: 0.694, w: 0.278, ic: 0.399}  
   ],  
   
   cmsy10: [  
     // 00 - 0F  
     {c: '&#xA1;', h: 0.583, d: 0.0833, w: 0.778},  
     {c: '&#xA2;', h: 0.444, d: -0.0556, w: 0.278},  
     {c: '&#xA3;', h: 0.583, d: 0.0833, w: 0.778},  
     {c: '&#xA4;', h: 0.465, d: -0.0347, w: 0.5},  
     {c: '&#xA5;', h: 0.583, d: 0.0833, w: 0.778},  
     {c: '&#xA6;', h: 0.444, d: -0.0556, w: 0.5},  
     {c: '&#xA7;', h: 0.583, d: 0.0833, w: 0.778},  
     {c: '&#xA8;', h: 0.583, d: 0.0833, w: 0.778},  
     {c: '&#xA9;', h: 0.583, d: 0.0833, w: 0.778},  
     {c: '&#xAA;', h: 0.583, d: 0.0833, w: 0.778},  
     {c: '&#xAD;', h: 0.583, d: 0.0833, w: 0.778},  
     {c: '&#xAE;', h: 0.583, d: 0.0833, w: 0.778},  
     {c: '&#xAF;', h: 0.583, d: 0.0833, w: 0.778},  
     {c: '&#xB0;', h: 0.694, d: 0.194, w: 1},  
     {c: '&#xB1;', h: 0.444, d: -0.0556, w: 0.5},  
     {c: '&#xB2;', h: 0.444, d: -0.0556, w: 0.5},  
     // 10 - 1F  
     {c: '&#xB3;', h: 0.464, d: -0.0363, w: 0.778},  
     {c: '&#xB4;', h: 0.464, d: -0.0363, w: 0.778},  
     {c: '&#xB5;', h: 0.636, d: 0.136, w: 0.778},  
     {c: '&#xB6;', h: 0.636, d: 0.136, w: 0.778},  
     {c: '&#x2219;', h: 0.636, d: 0.136, w: 0.778},  
     {c: '&#xB8;', h: 0.636, d: 0.136, w: 0.778},  
     {c: '&#xB9;', h: 0.636, d: 0.136, w: 0.778},  
     {c: '&#xBA;', h: 0.636, d: 0.136, w: 0.778},  
     {c: '&#xBB;', h: 0.367, d: -0.133, w: 0.778},  
     {c: '&#xBC;', h: 0.483, d: -0.0169, w: 0.778},  
     {c: '&#xBD;', h: 0.539, d: 0.0391, w: 0.778},  
     {c: '&#xBE;', h: 0.539, d: 0.0391, w: 0.778},  
     {c: '&#xBF;', h: 0.539, d: 0.0391, w: 1},  
     {c: '&#xC0;', h: 0.539, d: 0.0391, w: 1},  
     {c: '&#xC1;', h: 0.539, d: 0.0391, w: 0.778},  
     {c: '&#xC2;', h: 0.539, d: 0.0391, w: 0.778},  
     // 20 - 2F  
     {c: '&#xC3;', h: 0.367, d: -0.133, w: 1},  
     {c: '!', h: 0.367, d: -0.133, w: 1},  
     {c: '"', h: 0.694, d: 0.194, w: 0.5},  
     {c: '#', h: 0.694, d: 0.194, w: 0.5},  
     {c: '$', h: 0.367, d: -0.133, w: 1},  
     {c: '%', h: 0.694, d: 0.194, w: 1},  
     {c: '&#x26;', h: 0.694, d: 0.194, w: 1},  
     {c: '\'', h: 0.464, d: -0.0363, w: 0.778},  
     {c: '(', h: 0.367, d: -0.133, w: 1},  
     {c: ')', h: 0.367, d: -0.133, w: 1},  
     {c: '*', h: 0.694, d: 0.194, w: 0.611},  
     {c: '+', h: 0.694, d: 0.194, w: 0.611},  
     {c: ',', h: 0.367, d: -0.133, w: 1},  
     {c: '-', h: 0.694, d: 0.194, w: 1},  
     {c: '.', h: 0.694, d: 0.194, w: 1},  
     {c: '/', h: 0.431, w: 0.778},  
     // 30 - 3F  
     {c: '0', h: 0.556, w: 0.275},  
     {c: '1', h: 0.431, w: 1},  
     {c: '2', h: 0.539, d: 0.0391, w: 0.667},  
     {c: '3', h: 0.539, d: 0.0391, w: 0.667},  
     {c: '4', h: 0.694, d: 0.194, w: 0.889},  
     {c: '5', h: 0.694, d: 0.194, w: 0.889},  
     {c: '6', h: 0.694, d: 0.194, w: 0},  
     {c: '7', h: 0.367, d: -0.133, w: 0},  
     {c: '8', h: 0.694, w: 0.556},  
     {c: '9', h: 0.694, w: 0.556},  
     {c: ':', h: 0.431, w: 0.667},  
     {c: ';', h: 0.75, d: 0.0556, w: 0.5},  
     {c: '&#x3C;', h: 0.694, w: 0.722},  
     {c: '=', h: 0.694, w: 0.722},  
     {c: '&#x3E;', h: 0.694, w: 0.778},  
     {c: '?', h: 0.694, w: 0.778},  
     // 40 - 4F  
     {c: '@', h: 0.694, w: 0.611},  
     {c: 'A', h: 0.683, w: 0.798, krn: {'48': 0.194}},  
     {c: 'B', h: 0.683, w: 0.657, ic: 0.0304, krn: {'48': 0.139}},  
     {c: 'C', h: 0.683, w: 0.527, ic: 0.0583, krn: {'48': 0.139}},  
     {c: 'D', h: 0.683, w: 0.771, ic: 0.0278, krn: {'48': 0.0833}},  
     {c: 'E', h: 0.683, w: 0.528, ic: 0.0894, krn: {'48': 0.111}},  
     {c: 'F', h: 0.683, w: 0.719, ic: 0.0993, krn: {'48': 0.111}},  
     {c: 'G', h: 0.683, d: 0.0972, w: 0.595, ic: 0.0593, krn: {'48': 0.111}},  
     {c: 'H', h: 0.683, w: 0.845, ic: 0.00965, krn: {'48': 0.111}},  
     {c: 'I', h: 0.683, w: 0.545, ic: 0.0738, krn: {'48': 0.0278}},  
     {c: 'J', h: 0.683, d: 0.0972, w: 0.678, ic: 0.185, krn: {'48': 0.167}},  
     {c: 'K', h: 0.683, w: 0.762, ic: 0.0144, krn: {'48': 0.0556}},  
     {c: 'L', h: 0.683, w: 0.69, krn: {'48': 0.139}},  
     {c: 'M', h: 0.683, w: 1.2, krn: {'48': 0.139}},  
     {c: 'N', h: 0.683, w: 0.82, ic: 0.147, krn: {'48': 0.0833}},  
     {c: 'O', h: 0.683, w: 0.796, ic: 0.0278, krn: {'48': 0.111}},  
     // 50 - 5F  
     {c: 'P', h: 0.683, w: 0.696, ic: 0.0822, krn: {'48': 0.0833}},  
     {c: 'Q', h: 0.683, d: 0.0972, w: 0.817, krn: {'48': 0.111}},  
     {c: 'R', h: 0.683, w: 0.848, krn: {'48': 0.0833}},  
     {c: 'S', h: 0.683, w: 0.606, ic: 0.075, krn: {'48': 0.139}},  
     {c: 'T', h: 0.683, w: 0.545, ic: 0.254, krn: {'48': 0.0278}},  
     {c: 'U', h: 0.683, w: 0.626, ic: 0.0993, krn: {'48': 0.0833}},  
     {c: 'V', h: 0.683, w: 0.613, ic: 0.0822, krn: {'48': 0.0278}},  
     {c: 'W', h: 0.683, w: 0.988, ic: 0.0822, krn: {'48': 0.0833}},  
     {c: 'X', h: 0.683, w: 0.713, ic: 0.146, krn: {'48': 0.139}},  
     {c: 'Y', h: 0.683, d: 0.0972, w: 0.668, ic: 0.0822, krn: {'48': 0.0833}},  
     {c: 'Z', h: 0.683, w: 0.725, ic: 0.0794, krn: {'48': 0.139}},  
     {c: '[', h: 0.556, w: 0.667},  
     {c: '\\', h: 0.556, w: 0.667},  
     {c: ']', h: 0.556, w: 0.667},  
     {c: '^', h: 0.556, w: 0.667},  
     {c: '_', h: 0.556, w: 0.667},  
     // 60 - 6F  
     {c: '&#x60;', h: 0.694, w: 0.611},  
     {c: 'a', h: 0.694, w: 0.611},  
     {c: 'b', h: 0.75, d: 0.25, w: 0.444},  
     {c: 'c', h: 0.75, d: 0.25, w: 0.444},  
     {c: 'd', h: 0.75, d: 0.25, w: 0.444},  
     {c: 'e', h: 0.75, d: 0.25, w: 0.444},  
     {c: 'f', h: 0.75, d: 0.25, w: 0.5},  
     {c: 'g', h: 0.75, d: 0.25, w: 0.5},  
     {c: 'h', h: 0.75, d: 0.25, w: 0.389},  
     {c: 'i', h: 0.75, d: 0.25, w: 0.389},  
     {c: 'j', h: 0.75, d: 0.25, w: 0.278},  
     {c: 'k', h: 0.75, d: 0.25, w: 0.5},  
     {c: 'l', h: 0.75, d: 0.25, w: 0.5},  
     {c: 'm', h: 0.75, d: 0.25, w: 0.611},  
     {c: 'n', h: 0.75, d: 0.25, w: 0.5},  
     {c: 'o', h: 0.694, d: 0.194, w: 0.278},  
     // 70 - 7F  
     {c: 'p', h: 0.04, d: 0.96, w: 0.833},  
     {c: 'q', h: 0.683, w: 0.75},  
     {c: 'r', h: 0.683, w: 0.833},  
     {c: 's', h: 0.694, d: 0.194, w: 0.417, ic: 0.111},  
     {c: 't', h: 0.556, w: 0.667},  
     {c: 'u', h: 0.556, w: 0.667},  
     {c: 'v', h: 0.636, d: 0.136, w: 0.778},  
     {c: 'w', h: 0.636, d: 0.136, w: 0.778},  
     {c: 'x', h: 0.694, d: 0.194, w: 0.444},  
     {c: 'y', h: 0.694, d: 0.194, w: 0.444},  
     {c: 'z', h: 0.694, d: 0.194, w: 0.444},  
     {c: '&#x7B;', h: 0.694, d: 0.194, w: 0.611},  
     {c: '&#x7C;', h: 0.694, d: 0.13, w: 0.778},  
     {c: '&#x7D;', h: 0.694, d: 0.13, w: 0.778},  
     {c: '&#x7E;', h: 0.694, d: 0.13, w: 0.778},  
     {c: '&#xC4;', h: 0.694, d: 0.13, w: 0.778}  
   ],  
   
   cmex10: [  
     // 00 - 0F  
     {c: '&#xA1;', h: 0.04, d: 1.16, w: 0.458, n: 16},  
     {c: '&#xA2;', h: 0.04, d: 1.16, w: 0.458, n: 17},  
     {c: '&#xA3;', h: 0.04, d: 1.16, w: 0.417, n: 104},  
     {c: '&#xA4;', h: 0.04, d: 1.16, w: 0.417, n: 105},  
     {c: '&#xA5;', h: 0.04, d: 1.16, w: 0.472, n: 106},  
     {c: '&#xA6;', h: 0.04, d: 1.16, w: 0.472, n: 107},  
     {c: '&#xA7;', h: 0.04, d: 1.16, w: 0.472, n: 108},  
     {c: '&#xA8;', h: 0.04, d: 1.16, w: 0.472, n: 109},  
     {c: '&#xA9;', h: 0.04, d: 1.16, w: 0.583, n: 110},  
     {c: '&#xAA;', h: 0.04, d: 1.16, w: 0.583, n: 111},  
     {c: '&#xAD;', h: 0.04, d: 1.16, w: 0.472, n: 68},  
     {c: '&#xAE;', h: 0.04, d: 1.16, w: 0.472, n: 69},  
     {c: '&#xAF;', d: 0.6, w: 0.333, delim: {rep: 12}},  
     {c: '&#xB0;', d: 0.6, w: 0.556, delim: {rep: 13}},  
     {c: '&#xB1;', h: 0.04, d: 1.16, w: 0.578, n: 46},  
     {c: '&#xB2;', h: 0.04, d: 1.16, w: 0.578, n: 47},  
     // 10 - 1F  
     {c: '&#xB3;', h: 0.04, d: 1.76, w: 0.597, n: 18},  
     {c: '&#xB4;', h: 0.04, d: 1.76, w: 0.597, n: 19},  
     {c: '&#xB5;', h: 0.04, d: 2.36, w: 0.736, n: 32},  
     {c: '&#xB6;', h: 0.04, d: 2.36, w: 0.736, n: 33},  
     {c: '&#x2219;', h: 0.04, d: 2.36, w: 0.528, n: 34},  
     {c: '&#xB8;', h: 0.04, d: 2.36, w: 0.528, n: 35},  
     {c: '&#xB9;', h: 0.04, d: 2.36, w: 0.583, n: 36},  
     {c: '&#xBA;', h: 0.04, d: 2.36, w: 0.583, n: 37},  
     {c: '&#xBB;', h: 0.04, d: 2.36, w: 0.583, n: 38},  
     {c: '&#xBC;', h: 0.04, d: 2.36, w: 0.583, n: 39},  
     {c: '&#xBD;', h: 0.04, d: 2.36, w: 0.75, n: 40},  
     {c: '&#xBE;', h: 0.04, d: 2.36, w: 0.75, n: 41},  
     {c: '&#xBF;', h: 0.04, d: 2.36, w: 0.75, n: 42},  
     {c: '&#xC0;', h: 0.04, d: 2.36, w: 0.75, n: 43},  
     {c: '&#xC1;', h: 0.04, d: 2.36, w: 1.04, n: 44},  
     {c: '&#xC2;', h: 0.04, d: 2.36, w: 1.04, n: 45},  
     // 20 - 2F  
     {c: '&#xC3;', h: 0.04, d: 2.96, w: 0.792, n: 48},  
     {c: '!', h: 0.04, d: 2.96, w: 0.792, n: 49},  
     {c: '"', h: 0.04, d: 2.96, w: 0.583, n: 50},  
     {c: '#', h: 0.04, d: 2.96, w: 0.583, n: 51},  
     {c: '$', h: 0.04, d: 2.96, w: 0.639, n: 52},  
     {c: '%', h: 0.04, d: 2.96, w: 0.639, n: 53},  
     {c: '&#x26;', h: 0.04, d: 2.96, w: 0.639, n: 54},  
     {c: '\'', h: 0.04, d: 2.96, w: 0.639, n: 55},  
     {c: '(', h: 0.04, d: 2.96, w: 0.806, n: 56},  
     {c: ')', h: 0.04, d: 2.96, w: 0.806, n: 57},  
     {c: '*', h: 0.04, d: 2.96, w: 0.806},  
     {c: '+', h: 0.04, d: 2.96, w: 0.806},  
     {c: ',', h: 0.04, d: 2.96, w: 1.28},  
     {c: '-', h: 0.04, d: 2.96, w: 1.28},  
     {c: '.', h: 0.04, d: 1.76, w: 0.811, n: 30},  
     {c: '/', h: 0.04, d: 1.76, w: 0.811, n: 31},  
     // 30 - 3F  
     {c: '0', h: 0.04, d: 1.76, w: 0.875, delim: {top: 48, bot: 64, rep: 66}},  
     {c: '1', h: 0.04, d: 1.76, w: 0.875, delim: {top: 49, bot: 65, rep: 67}},  
     {c: '2', h: 0.04, d: 1.76, w: 0.667, delim: {top: 50, bot: 52, rep: 54}},  
     {c: '3', h: 0.04, d: 1.76, w: 0.667, delim: {top: 51, bot: 53, rep: 55}},  
     {c: '4', h: 0.04, d: 1.76, w: 0.667, delim: {bot: 52, rep: 54}},  
     {c: '5', h: 0.04, d: 1.76, w: 0.667, delim: {bot: 53, rep: 55}},  
     {c: '6', d: 0.6, w: 0.667, delim: {top: 50, rep: 54}},  
     {c: '7', d: 0.6, w: 0.667, delim: {top: 51, rep: 55}},  
     {c: '8', d: 0.9, w: 0.889, delim: {top: 56, mid: 60, bot: 58, rep: 62}},  
     {c: '9', d: 0.9, w: 0.889, delim: {top: 57, mid: 61, bot: 59, rep: 62}},  
     {c: ':', d: 0.9, w: 0.889, delim: {top: 56, bot: 58, rep: 62}},  
     {c: ';', d: 0.9, w: 0.889, delim: {top: 57, bot: 59, rep: 62}},  
     {c: '&#x3C;', d: 1.8, w: 0.889, delim: {rep: 63}},  
     {c: '=', d: 1.8, w: 0.889, delim: {rep: 119}},  
     {c: '&#x3E;', d: 0.3, w: 0.889, delim: {rep: 62}},  
     {c: '?', d: 0.6, w: 0.667, delim: {top: 120, bot: 121, rep: 63}},  
     // 40 - 4F  
     {c: '@', h: 0.04, d: 1.76, w: 0.875, delim: {top: 56, bot: 59, rep: 62}},  
     {c: 'A', h: 0.04, d: 1.76, w: 0.875, delim: {top: 57, bot: 58, rep: 62}},  
     {c: 'B', d: 0.6, w: 0.875, delim: {rep: 66}},  
     {c: 'C', d: 0.6, w: 0.875, delim: {rep: 67}},  
     {c: 'D', h: 0.04, d: 1.76, w: 0.611, n: 28},  
     {c: 'E', h: 0.04, d: 1.76, w: 0.611, n: 29},  
     {c: 'F', d: 1, w: 0.833, n: 71},  
     {c: 'G', h: 0.1, d: 1.5, w: 1.11},  
     {c: 'H', d: 1.11, w: 0.472, ic: 0.194, n: 73},  
     {c: 'I', d: 2.22, w: 0.556, ic: 0.444},  
     {c: 'J', d: 1, w: 1.11, n: 75},  
     {c: 'K', h: 0.1, d: 1.5, w: 1.51},  
     {c: 'L', d: 1, w: 1.11, n: 77},  
     {c: 'M', h: 0.1, d: 1.5, w: 1.51},  
     {c: 'N', d: 1, w: 1.11, n: 79},  
     {c: 'O', h: 0.1, d: 1.5, w: 1.51},  
     // 50 - 5F  
     {c: 'P', d: 1, w: 1.06, n: 88},  
     {c: 'Q', d: 1, w: 0.944, n: 89},  
     {c: 'R', d: 1.11, w: 0.472, ic: 0.194, n: 90},  
     {c: 'S', d: 1, w: 0.833, n: 91},  
     {c: 'T', d: 1, w: 0.833, n: 92},  
     {c: 'U', d: 1, w: 0.833, n: 93},  
     {c: 'V', d: 1, w: 0.833, n: 94},  
     {c: 'W', d: 1, w: 0.833, n: 95},  
     {c: 'X', h: 0.1, d: 1.5, w: 1.44},  
     {c: 'Y', h: 0.1, d: 1.5, w: 1.28},  
     {c: 'Z', d: 2.22, w: 0.556, ic: 0.444},  
     {c: '[', h: 0.1, d: 1.5, w: 1.11},  
     {c: '\\', h: 0.1, d: 1.5, w: 1.11},  
     {c: ']', h: 0.1, d: 1.5, w: 1.11},  
     {c: '^', h: 0.1, d: 1.5, w: 1.11},  
     {c: '_', h: 0.1, d: 1.5, w: 1.11},  
     // 60 - 6F  
     {c: '&#x60;', d: 1, w: 0.944, n: 97},  
     {c: 'a', h: 0.1, d: 1.5, w: 1.28},  
     {c: 'b', h: 0.722, w: 0.556, n: 99},  
     {c: 'c', h: 0.75, w: 1, n: 100},  
     {c: 'd', h: 0.75, w: 1.44},  
     {c: 'e', h: 0.722, w: 0.556, n: 102},  
     {c: 'f', h: 0.75, w: 1, n: 103},  
     {c: 'g', h: 0.75, w: 1.44},  
     {c: 'h', h: 0.04, d: 1.76, w: 0.472, n: 20},  
     {c: 'i', h: 0.04, d: 1.76, w: 0.472, n: 21},  
     {c: 'j', h: 0.04, d: 1.76, w: 0.528, n: 22},  
     {c: 'k', h: 0.04, d: 1.76, w: 0.528, n: 23},  
     {c: 'l', h: 0.04, d: 1.76, w: 0.528, n: 24},  
     {c: 'm', h: 0.04, d: 1.76, w: 0.528, n: 25},  
     {c: 'n', h: 0.04, d: 1.76, w: 0.667, n: 26},  
     {c: 'o', h: 0.04, d: 1.76, w: 0.667, n: 27},  
     // 70 - 7F  
     {c: 'p', h: 0.04, d: 1.16, w: 1, n: 113},  
     {c: 'q', h: 0.04, d: 1.76, w: 1, n: 114},  
     {c: 'r', h: 0.04, d: 2.36, w: 1, n: 115},  
     {c: 's', h: 0.04, d: 2.96, w: 1, n: 116},  
     {c: 't', d: 1.8, w: 1.06, delim: {top: 118, bot: 116, rep: 117}},  
     {c: 'u', d: 0.6, w: 1.06},  
     {c: 'v', h: 0.04, d: 0.56, w: 1.06},  
     {c: 'w', d: 0.6, w: 0.778, delim: {top: 126, bot: 127, rep: 119}},  
     {c: 'x', d: 0.6, w: 0.667, delim: {top: 120, rep: 63}},  
     {c: 'y', d: 0.6, w: 0.667, delim: {bot: 121, rep: 63}},  
     {c: 'z', h: 0.12, w: 0.45},  
     {c: '&#x7B;', h: 0.12, w: 0.45},  
     {c: '&#x7C;', h: 0.12, w: 0.45},  
     {c: '&#x7D;', h: 0.12, w: 0.45},  
     {c: '&#x7E;', d: 0.6, w: 0.778, delim: {top: 126, rep: 119}},  
     {c: '&#xC4;', d: 0.6, w: 0.778, delim: {bot: 127, rep: 119}}  
   ],  
     
   cmti10: [  
     // 00 - 0F  
     {c: '&#xA1;', h: 0.683, w: 0.627, ic: 0.133},  
     {c: '&#xA2;', h: 0.683, w: 0.818},  
     {c: '&#xA3;', h: 0.683, w: 0.767, ic: 0.094},  
     {c: '&#xA4;', h: 0.683, w: 0.692},  
     {c: '&#xA5;', h: 0.683, w: 0.664, ic: 0.153},  
     {c: '&#xA6;', h: 0.683, w: 0.743, ic: 0.164},  
     {c: '&#xA7;', h: 0.683, w: 0.716, ic: 0.12},  
     {c: '&#xA8;', h: 0.683, w: 0.767, ic: 0.111},  
     {c: '&#xA9;', h: 0.683, w: 0.716, ic: 0.0599},  
     {c: '&#xAA;', h: 0.683, w: 0.767, ic: 0.111},  
     {c: '&#xAD;', h: 0.683, w: 0.716, ic: 0.103},  
     {c: '&#xAE;', h: 0.694, d: 0.194, w: 0.613, ic: 0.212, krn: {'39': 0.104, '63': 0.104, '33': 0.104, '41': 0.104, '93': 0.104}, lig: {'105': 14, '108': 15}},  
     {c: '&#xAF;', h: 0.694, d: 0.194, w: 0.562, ic: 0.103},  
     {c: '&#xB0;', h: 0.694, d: 0.194, w: 0.588, ic: 0.103},  
     {c: '&#xB1;', h: 0.694, d: 0.194, w: 0.882, ic: 0.103},  
     {c: '&#xB2;', h: 0.694, d: 0.194, w: 0.894, ic: 0.103},  
     // 10 - 1F  
     {c: '&#xB3;', h: 0.431, w: 0.307, ic: 0.0767},  
     {c: '&#xB4;', h: 0.431, d: 0.194, w: 0.332, ic: 0.0374},  
     {c: '&#xB5;', h: 0.694, w: 0.511},  
     {c: '&#xB6;', h: 0.694, w: 0.511, ic: 0.0969},  
     {c: '&#x2219;', h: 0.628, w: 0.511, ic: 0.083},  
     {c: '&#xB8;', h: 0.694, w: 0.511, ic: 0.108},  
     {c: '&#xB9;', h: 0.562, w: 0.511, ic: 0.103},  
     {c: '&#xBA;', h: 0.694, w: 0.831},  
     {c: '&#xBB;', d: 0.17, w: 0.46},  
     {c: '&#xBC;', h: 0.694, d: 0.194, w: 0.537, ic: 0.105},  
     {c: '&#xBD;', h: 0.431, w: 0.716, ic: 0.0751},  
     {c: '&#xBE;', h: 0.431, w: 0.716, ic: 0.0751},  
     {c: '&#xBF;', h: 0.528, d: 0.0972, w: 0.511, ic: 0.0919},  
     {c: '&#xC0;', h: 0.683, w: 0.883, ic: 0.12},  
     {c: '&#xC1;', h: 0.683, w: 0.985, ic: 0.12},  
     {c: '&#xC2;', h: 0.732, d: 0.0486, w: 0.767, ic: 0.094},  
     // 20 - 2F  
     {c: '&#xC3;', h: 0.431, w: 0.256, krn: {'108': -0.256, '76': -0.321}},  
     {c: '!', h: 0.694, w: 0.307, ic: 0.124, lig: {'96': 60}},  
     {c: '"', h: 0.694, w: 0.514, ic: 0.0696},  
     {c: '#', h: 0.694, d: 0.194, w: 0.818, ic: 0.0662},  
     {c: '$', h: 0.694, w: 0.769},  
     {c: '%', h: 0.75, d: 0.0556, w: 0.818, ic: 0.136},  
     {c: '&#x26;', h: 0.694, w: 0.767, ic: 0.0969},  
     {c: '\'', h: 0.694, w: 0.307, ic: 0.124, krn: {'63': 0.102, '33': 0.102}, lig: {'39': 34}},  
     {c: '(', h: 0.75, d: 0.25, w: 0.409, ic: 0.162},  
     {c: ')', h: 0.75, d: 0.25, w: 0.409, ic: 0.0369},  
     {c: '*', h: 0.75, w: 0.511, ic: 0.149},  
     {c: '+', h: 0.562, d: 0.0567, w: 0.767, ic: 0.0369},  
     {c: ',', h: 0.106, d: 0.194, w: 0.307},  
     {c: '-', h: 0.431, w: 0.358, ic: 0.0283, lig: {'45': 123}},  
     {c: '.', h: 0.106, w: 0.307},  
     {c: '/', h: 0.75, d: 0.25, w: 0.511, ic: 0.162},  
     // 30 - 3F  
     {c: '0', h: 0.644, w: 0.511, ic: 0.136},  
     {c: '1', h: 0.644, w: 0.511, ic: 0.136},  
     {c: '2', h: 0.644, w: 0.511, ic: 0.136},  
     {c: '3', h: 0.644, w: 0.511, ic: 0.136},  
     {c: '4', h: 0.644, d: 0.194, w: 0.511, ic: 0.136},  
     {c: '5', h: 0.644, w: 0.511, ic: 0.136},  
     {c: '6', h: 0.644, w: 0.511, ic: 0.136},  
     {c: '7', h: 0.644, d: 0.194, w: 0.511, ic: 0.136},  
     {c: '8', h: 0.644, w: 0.511, ic: 0.136},  
     {c: '9', h: 0.644, w: 0.511, ic: 0.136},  
     {c: ':', h: 0.431, w: 0.307, ic: 0.0582},  
     {c: ';', h: 0.431, d: 0.194, w: 0.307, ic: 0.0582},  
     {c: '&#x3C;', h: 0.5, d: 0.194, w: 0.307, ic: 0.0756},  
     {c: '=', h: 0.367, d: -0.133, w: 0.767, ic: 0.0662},  
     {c: '&#x3E;', h: 0.5, d: 0.194, w: 0.511},  
     {c: '?', h: 0.694, w: 0.511, ic: 0.122, lig: {'96': 62}},  
     // 40 - 4F  
     {c: '@', h: 0.694, w: 0.767, ic: 0.096},  
     {c: 'A', h: 0.683, w: 0.743, krn: {'110': -0.0256, '108': -0.0256, '114': -0.0256, '117': -0.0256, '109': -0.0256, '116': -0.0256, '105': -0.0256, '67': -0.0256, '79': -0.0256, '71': -0.0256, '104': -0.0256, '98': -0.0256, '85': -0.0256, '107': -0.0256, '118': -0.0256, '119': -0.0256, '81': -0.0256, '84': -0.0767, '89': -0.0767, '86': -0.102, '87': -0.102, '101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}},  
     {c: 'B', h: 0.683, w: 0.704, ic: 0.103},  
     {c: 'C', h: 0.683, w: 0.716, ic: 0.145},  
     {c: 'D', h: 0.683, w: 0.755, ic: 0.094, krn: {'88': -0.0256, '87': -0.0256, '65': -0.0256, '86': -0.0256, '89': -0.0256}},  
     {c: 'E', h: 0.683, w: 0.678, ic: 0.12},  
     {c: 'F', h: 0.683, w: 0.653, ic: 0.133, krn: {'111': -0.0767, '101': -0.0767, '117': -0.0767, '114': -0.0767, '97': -0.0767, '65': -0.102, '79': -0.0256, '67': -0.0256, '71': -0.0256, '81': -0.0256}},  
     {c: 'G', h: 0.683, w: 0.774, ic: 0.0872},  
     {c: 'H', h: 0.683, w: 0.743, ic: 0.164},  
     {c: 'I', h: 0.683, w: 0.386, ic: 0.158},  
     {c: 'J', h: 0.683, w: 0.525, ic: 0.14},  
     {c: 'K', h: 0.683, w: 0.769, ic: 0.145, krn: {'79': -0.0256, '67': -0.0256, '71': -0.0256, '81': -0.0256}},  
     {c: 'L', h: 0.683, w: 0.627, krn: {'84': -0.0767, '89': -0.0767, '86': -0.102, '87': -0.102, '101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}},  
     {c: 'M', h: 0.683, w: 0.897, ic: 0.164},  
     {c: 'N', h: 0.683, w: 0.743, ic: 0.164},  
     {c: 'O', h: 0.683, w: 0.767, ic: 0.094, krn: {'88': -0.0256, '87': -0.0256, '65': -0.0256, '86': -0.0256, '89': -0.0256}},  
     // 50 - 5F  
     {c: 'P', h: 0.683, w: 0.678, ic: 0.103, krn: {'65': -0.0767}},  
     {c: 'Q', h: 0.683, d: 0.194, w: 0.767, ic: 0.094},  
     {c: 'R', h: 0.683, w: 0.729, ic: 0.0387, krn: {'110': -0.0256, '108': -0.0256, '114': -0.0256, '117': -0.0256, '109': -0.0256, '116': -0.0256, '105': -0.0256, '67': -0.0256, '79': -0.0256, '71': -0.0256, '104': -0.0256, '98': -0.0256, '85': -0.0256, '107': -0.0256, '118': -0.0256, '119': -0.0256, '81': -0.0256, '84': -0.0767, '89': -0.0767, '86': -0.102, '87': -0.102, '101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}},  
     {c: 'S', h: 0.683, w: 0.562, ic: 0.12},  
     {c: 'T', h: 0.683, w: 0.716, ic: 0.133, krn: {'121': -0.0767, '101': -0.0767, '111': -0.0767, '114': -0.0767, '97': -0.0767, '117': -0.0767, '65': -0.0767}},  
     {c: 'U', h: 0.683, w: 0.743, ic: 0.164},  
     {c: 'V', h: 0.683, w: 0.743, ic: 0.184, krn: {'111': -0.0767, '101': -0.0767, '117': -0.0767, '114': -0.0767, '97': -0.0767, '65': -0.102, '79': -0.0256, '67': -0.0256, '71': -0.0256, '81': -0.0256}},  
     {c: 'W', h: 0.683, w: 0.999, ic: 0.184, krn: {'65': -0.0767}},  
     {c: 'X', h: 0.683, w: 0.743, ic: 0.158, krn: {'79': -0.0256, '67': -0.0256, '71': -0.0256, '81': -0.0256}},  
     {c: 'Y', h: 0.683, w: 0.743, ic: 0.194, krn: {'101': -0.0767, '111': -0.0767, '114': -0.0767, '97': -0.0767, '117': -0.0767, '65': -0.0767}},  
     {c: 'Z', h: 0.683, w: 0.613, ic: 0.145},  
     {c: '[', h: 0.75, d: 0.25, w: 0.307, ic: 0.188},  
     {c: '\\', h: 0.694, w: 0.514, ic: 0.169},  
     {c: ']', h: 0.75, d: 0.25, w: 0.307, ic: 0.105},  
     {c: '^', h: 0.694, w: 0.511, ic: 0.0665},  
     {c: '_', h: 0.668, w: 0.307, ic: 0.118},  
     // 60 - 6F  
     {c: '&#x60;', h: 0.694, w: 0.307, ic: 0.124, lig: {'96': 92}},  
     {c: 'a', h: 0.431, w: 0.511, ic: 0.0767},  
     {c: 'b', h: 0.694, w: 0.46, ic: 0.0631, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}},  
     {c: 'c', h: 0.431, w: 0.46, ic: 0.0565, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}},  
     {c: 'd', h: 0.694, w: 0.511, ic: 0.103, krn: {'108': 0.0511}},  
     {c: 'e', h: 0.431, w: 0.46, ic: 0.0751, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}},  
     {c: 'f', h: 0.694, d: 0.194, w: 0.307, ic: 0.212, krn: {'39': 0.104, '63': 0.104, '33': 0.104, '41': 0.104, '93': 0.104}, lig: {'105': 12, '102': 11, '108': 13}},  
     {c: 'g', h: 0.431, d: 0.194, w: 0.46, ic: 0.0885},  
     {c: 'h', h: 0.694, w: 0.511, ic: 0.0767},  
     {c: 'i', h: 0.655, w: 0.307, ic: 0.102},  
     {c: 'j', h: 0.655, d: 0.194, w: 0.307, ic: 0.145},  
     {c: 'k', h: 0.694, w: 0.46, ic: 0.108},  
     {c: 'l', h: 0.694, w: 0.256, ic: 0.103, krn: {'108': 0.0511}},  
     {c: 'm', h: 0.431, w: 0.818, ic: 0.0767},  
     {c: 'n', h: 0.431, w: 0.562, ic: 0.0767, krn: {'39': -0.102}},  
     {c: 'o', h: 0.431, w: 0.511, ic: 0.0631, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}},  
     // 70 - 7F  
     {c: 'p', h: 0.431, d: 0.194, w: 0.511, ic: 0.0631, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}},  
     {c: 'q', h: 0.431, d: 0.194, w: 0.46, ic: 0.0885},  
     {c: 'r', h: 0.431, w: 0.422, ic: 0.108, krn: {'101': -0.0511, '97': -0.0511, '111': -0.0511, '100': -0.0511, '99': -0.0511, '103': -0.0511, '113': -0.0511}},  
     {c: 's', h: 0.431, w: 0.409, ic: 0.0821},  
     {c: 't', h: 0.615, w: 0.332, ic: 0.0949},  
     {c: 'u', h: 0.431, w: 0.537, ic: 0.0767},  
     {c: 'v', h: 0.431, w: 0.46, ic: 0.108},  
     {c: 'w', h: 0.431, w: 0.664, ic: 0.108, krn: {'108': 0.0511}},  
     {c: 'x', h: 0.431, w: 0.464, ic: 0.12},  
     {c: 'y', h: 0.431, d: 0.194, w: 0.486, ic: 0.0885},  
     {c: 'z', h: 0.431, w: 0.409, ic: 0.123},  
     {c: '&#x7B;', h: 0.431, w: 0.511, ic: 0.0921, lig: {'45': 124}},  
     {c: '&#x7C;', h: 0.431, w: 1.02, ic: 0.0921},  
     {c: '&#x7D;', h: 0.694, w: 0.511, ic: 0.122},  
     {c: '&#x7E;', h: 0.668, w: 0.511, ic: 0.116},  
     {c: '&#xC4;', h: 0.668, w: 0.511, ic: 0.105}  
   ],  
     
   cmbx10: [  
     // 00 - 0F  
     {c: '&#xA1;', h: 0.686, w: 0.692},  
     {c: '&#xA2;', h: 0.686, w: 0.958},  
     {c: '&#xA3;', h: 0.686, w: 0.894},  
     {c: '&#xA4;', h: 0.686, w: 0.806},  
     {c: '&#xA5;', h: 0.686, w: 0.767},  
     {c: '&#xA6;', h: 0.686, w: 0.9},  
     {c: '&#xA7;', h: 0.686, w: 0.831},  
     {c: '&#xA8;', h: 0.686, w: 0.894},  
     {c: '&#xA9;', h: 0.686, w: 0.831},  
     {c: '&#xAA;', h: 0.686, w: 0.894},  
     {c: '&#xAD;', h: 0.686, w: 0.831},  
     {c: '&#xAE;', h: 0.694, w: 0.671, ic: 0.109, krn: {'39': 0.109, '63': 0.109, '33': 0.109, '41': 0.109, '93': 0.109}, lig: {'105': 14, '108': 15}},  
     {c: '&#xAF;', h: 0.694, w: 0.639},  
     {c: '&#xB0;', h: 0.694, w: 0.639},  
     {c: '&#xB1;', h: 0.694, w: 0.958},  
     {c: '&#xB2;', h: 0.694, w: 0.958},  
     // 10 - 1F  
     {c: '&#xB3;', h: 0.444, w: 0.319},  
     {c: '&#xB4;', h: 0.444, d: 0.194, w: 0.351},  
     {c: '&#xB5;', h: 0.694, w: 0.575},  
     {c: '&#xB6;', h: 0.694, w: 0.575},  
     {c: '&#x2219;', h: 0.632, w: 0.575},  
     {c: '&#xB8;', h: 0.694, w: 0.575},  
     {c: '&#xB9;', h: 0.596, w: 0.575},  
     {c: '&#xBA;', h: 0.694, w: 0.869},  
     {c: '&#xBB;', d: 0.17, w: 0.511},  
     {c: '&#xBC;', h: 0.694, w: 0.597},  
     {c: '&#xBD;', h: 0.444, w: 0.831},  
     {c: '&#xBE;', h: 0.444, w: 0.894},  
     {c: '&#xBF;', h: 0.542, d: 0.0972, w: 0.575},  
     {c: '&#xC0;', h: 0.686, w: 1.04},  
     {c: '&#xC1;', h: 0.686, w: 1.17},  
     {c: '&#xC2;', h: 0.735, d: 0.0486, w: 0.894},  
     // 20 - 2F  
     {c: '&#xC3;', h: 0.444, w: 0.319, krn: {'108': -0.319, '76': -0.378}},  
     {c: '!', h: 0.694, w: 0.35, lig: {'96': 60}},  
     {c: '"', h: 0.694, w: 0.603},  
     {c: '#', h: 0.694, d: 0.194, w: 0.958},  
     {c: '$', h: 0.75, d: 0.0556, w: 0.575},  
     {c: '%', h: 0.75, d: 0.0556, w: 0.958},  
     {c: '&#x26;', h: 0.694, w: 0.894},  
     {c: '\'', h: 0.694, w: 0.319, krn: {'63': 0.128, '33': 0.128}, lig: {'39': 34}},  
     {c: '(', h: 0.75, d: 0.25, w: 0.447},  
     {c: ')', h: 0.75, d: 0.25, w: 0.447},  
     {c: '*', h: 0.75, w: 0.575},  
     {c: '+', h: 0.633, d: 0.133, w: 0.894},  
     {c: ',', h: 0.156, d: 0.194, w: 0.319},  
     {c: '-', h: 0.444, w: 0.383, lig: {'45': 123}},  
     {c: '.', h: 0.156, w: 0.319},  
     {c: '/', h: 0.75, d: 0.25, w: 0.575},  
     // 30 - 3F  
     {c: '0', h: 0.644, w: 0.575},  
     {c: '1', h: 0.644, w: 0.575},  
     {c: '2', h: 0.644, w: 0.575},  
     {c: '3', h: 0.644, w: 0.575},  
     {c: '4', h: 0.644, w: 0.575},  
     {c: '5', h: 0.644, w: 0.575},  
     {c: '6', h: 0.644, w: 0.575},  
     {c: '7', h: 0.644, w: 0.575},  
     {c: '8', h: 0.644, w: 0.575},  
     {c: '9', h: 0.644, w: 0.575},  
     {c: ':', h: 0.444, w: 0.319},  
     {c: ';', h: 0.444, d: 0.194, w: 0.319},  
     {c: '&#x3C;', h: 0.5, d: 0.194, w: 0.35},  
     {c: '=', h: 0.391, d: -0.109, w: 0.894},  
     {c: '&#x3E;', h: 0.5, d: 0.194, w: 0.543},  
     {c: '?', h: 0.694, w: 0.543, lig: {'96': 62}},  
     // 40 - 4F  
     {c: '@', h: 0.694, w: 0.894},  
     {c: 'A', h: 0.686, w: 0.869, krn: {'116': -0.0319, '67': -0.0319, '79': -0.0319, '71': -0.0319, '85': -0.0319, '81': -0.0319, '84': -0.0958, '89': -0.0958, '86': -0.128, '87': -0.128}},  
     {c: 'B', h: 0.686, w: 0.818},  
     {c: 'C', h: 0.686, w: 0.831},  
     {c: 'D', h: 0.686, w: 0.882, krn: {'88': -0.0319, '87': -0.0319, '65': -0.0319, '86': -0.0319, '89': -0.0319}},  
     {c: 'E', h: 0.686, w: 0.756},  
     {c: 'F', h: 0.686, w: 0.724, krn: {'111': -0.0958, '101': -0.0958, '117': -0.0958, '114': -0.0958, '97': -0.0958, '65': -0.128, '79': -0.0319, '67': -0.0319, '71': -0.0319, '81': -0.0319}},  
     {c: 'G', h: 0.686, w: 0.904},  
     {c: 'H', h: 0.686, w: 0.9},  
     {c: 'I', h: 0.686, w: 0.436, krn: {'73': 0.0319}},  
     {c: 'J', h: 0.686, w: 0.594},  
     {c: 'K', h: 0.686, w: 0.901, krn: {'79': -0.0319, '67': -0.0319, '71': -0.0319, '81': -0.0319}},  
     {c: 'L', h: 0.686, w: 0.692, krn: {'84': -0.0958, '89': -0.0958, '86': -0.128, '87': -0.128}},  
     {c: 'M', h: 0.686, w: 1.09},  
     {c: 'N', h: 0.686, w: 0.9},  
     {c: 'O', h: 0.686, w: 0.864, krn: {'88': -0.0319, '87': -0.0319, '65': -0.0319, '86': -0.0319, '89': -0.0319}},  
     // 50 - 5F  
     {c: 'P', h: 0.686, w: 0.786, krn: {'65': -0.0958, '111': -0.0319, '101': -0.0319, '97': -0.0319, '46': -0.0958, '44': -0.0958}},  
     {c: 'Q', h: 0.686, d: 0.194, w: 0.864},  
     {c: 'R', h: 0.686, w: 0.862, krn: {'116': -0.0319, '67': -0.0319, '79': -0.0319, '71': -0.0319, '85': -0.0319, '81': -0.0319, '84': -0.0958, '89': -0.0958, '86': -0.128, '87': -0.128}},  
     {c: 'S', h: 0.686, w: 0.639},  
     {c: 'T', h: 0.686, w: 0.8, krn: {'121': -0.0319, '101': -0.0958, '111': -0.0958, '114': -0.0958, '97': -0.0958, '65': -0.0958, '117': -0.0958}},  
     {c: 'U', h: 0.686, w: 0.885},  
     {c: 'V', h: 0.686, w: 0.869, ic: 0.016, krn: {'111': -0.0958, '101': -0.0958, '117': -0.0958, '114': -0.0958, '97': -0.0958, '65': -0.128, '79': -0.0319, '67': -0.0319, '71': -0.0319, '81': -0.0319}},  
     {c: 'W', h: 0.686, w: 1.19, ic: 0.016, krn: {'111': -0.0958, '101': -0.0958, '117': -0.0958, '114': -0.0958, '97': -0.0958, '65': -0.128, '79': -0.0319, '67': -0.0319, '71': -0.0319, '81': -0.0319}},  
     {c: 'X', h: 0.686, w: 0.869, krn: {'79': -0.0319, '67': -0.0319, '71': -0.0319, '81': -0.0319}},  
     {c: 'Y', h: 0.686, w: 0.869, ic: 0.0287, krn: {'101': -0.0958, '111': -0.0958, '114': -0.0958, '97': -0.0958, '65': -0.0958, '117': -0.0958}},  
     {c: 'Z', h: 0.686, w: 0.703},  
     {c: '[', h: 0.75, d: 0.25, w: 0.319},  
     {c: '\\', h: 0.694, w: 0.603},  
     {c: ']', h: 0.75, d: 0.25, w: 0.319},  
     {c: '^', h: 0.694, w: 0.575},  
     {c: '_', h: 0.694, w: 0.319},  
     // 60 - 6F  
     {c: '&#x60;', h: 0.694, w: 0.319, lig: {'96': 92}},  
     {c: 'a', h: 0.444, w: 0.559, krn: {'118': -0.0319, '106': 0.0639, '121': -0.0319, '119': -0.0319}},  
     {c: 'b', h: 0.694, w: 0.639, krn: {'101': 0.0319, '111': 0.0319, '120': -0.0319, '100': 0.0319, '99': 0.0319, '113': 0.0319, '118': -0.0319, '106': 0.0639, '121': -0.0319, '119': -0.0319}},  
     {c: 'c', h: 0.444, w: 0.511, krn: {'104': -0.0319, '107': -0.0319}},  
     {c: 'd', h: 0.694, w: 0.639},  
     {c: 'e', h: 0.444, w: 0.527},  
     {c: 'f', h: 0.694, w: 0.351, ic: 0.109, krn: {'39': 0.109, '63': 0.109, '33': 0.109, '41': 0.109, '93': 0.109}, lig: {'105': 12, '102': 11, '108': 13}},  
     {c: 'g', h: 0.444, d: 0.194, w: 0.575, ic: 0.016, krn: {'106': 0.0319}},  
     {c: 'h', h: 0.694, w: 0.639, krn: {'116': -0.0319, '117': -0.0319, '98': -0.0319, '121': -0.0319, '118': -0.0319, '119': -0.0319}},  
     {c: 'i', h: 0.694, w: 0.319},  
     {c: 'j', h: 0.694, d: 0.194, w: 0.351},  
     {c: 'k', h: 0.694, w: 0.607, krn: {'97': -0.0639, '101': -0.0319, '97': -0.0319, '111': -0.0319, '99': -0.0319}},  
     {c: 'l', h: 0.694, w: 0.319},  
     {c: 'm', h: 0.444, w: 0.958, krn: {'116': -0.0319, '117': -0.0319, '98': -0.0319, '121': -0.0319, '118': -0.0319, '119': -0.0319}},  
     {c: 'n', h: 0.444, w: 0.639, krn: {'116': -0.0319, '117': -0.0319, '98': -0.0319, '121': -0.0319, '118': -0.0319, '119': -0.0319}},  
     {c: 'o', h: 0.444, w: 0.575, krn: {'101': 0.0319, '111': 0.0319, '120': -0.0319, '100': 0.0319, '99': 0.0319, '113': 0.0319, '118': -0.0319, '106': 0.0639, '121': -0.0319, '119': -0.0319}},  
     // 70 - 7F  
     {c: 'p', h: 0.444, d: 0.194, w: 0.639, krn: {'101': 0.0319, '111': 0.0319, '120': -0.0319, '100': 0.0319, '99': 0.0319, '113': 0.0319, '118': -0.0319, '106': 0.0639, '121': -0.0319, '119': -0.0319}},  
     {c: 'q', h: 0.444, d: 0.194, w: 0.607},  
     {c: 'r', h: 0.444, w: 0.474},  
     {c: 's', h: 0.444, w: 0.454},  
     {c: 't', h: 0.635, w: 0.447, krn: {'121': -0.0319, '119': -0.0319}},  
     {c: 'u', h: 0.444, w: 0.639, krn: {'119': -0.0319}},  
     {c: 'v', h: 0.444, w: 0.607, ic: 0.016, krn: {'97': -0.0639, '101': -0.0319, '97': -0.0319, '111': -0.0319, '99': -0.0319}},  
     {c: 'w', h: 0.444, w: 0.831, ic: 0.016, krn: {'101': -0.0319, '97': -0.0319, '111': -0.0319, '99': -0.0319}},  
     {c: 'x', h: 0.444, w: 0.607},  
     {c: 'y', h: 0.444, d: 0.194, w: 0.607, ic: 0.016, krn: {'111': -0.0319, '101': -0.0319, '97': -0.0319, '46': -0.0958, '44': -0.0958}},  
     {c: 'z', h: 0.444, w: 0.511},  
     {c: '&#x7B;', h: 0.444, w: 0.575, ic: 0.0319, lig: {'45': 124}},  
     {c: '&#x7C;', h: 0.444, w: 1.15, ic: 0.0319},  
     {c: '&#x7D;', h: 0.694, w: 0.575},  
     {c: '&#x7E;', h: 0.694, w: 0.575},  
     {c: '&#xC4;', h: 0.694, w: 0.575}  
   ]  
 };  
   
 /***************************************************************************/  
   
 /*  
  *  Implement image-based fonts for fallback method  
  */  
 jsMath.Img = {  
     
   // font sizes available  
   fonts: [50, 60, 70, 85, 100, 120, 144, 173, 207, 249, 298, 358, 430],  
       
   // em widths for the various font size directories  
   w: {'50': 6.9, '60': 8.3, '70': 9.7, '85': 11.8, '100': 13.9,  
       '120': 16.7, '144': 20.0, '173': 24.0, '207': 28.8, '249': 34.6,  
       '298': 41.4, '358': 49.8, '430': 59.8},  
           
   // index of best font size in the fonts list  
   best: 4,  
       
   // fonts to update (see UpdateFonts below)  
   update: {},  
       
   // factor by which to shrink images (for better printing)  
   factor: 1,  
     
   // image fonts are loaded  
   loaded: 0,  
     
   // add characters to be drawn using images  
   SetFont: function (change) {  
     for (var font in change) {  
       if (!this.update[font]) {this.update[font] = []}  
       this.update[font] = this.update[font].concat(change[font]);  
     }  
   },  
   
   /*  
    *  Called by the exta-font definition files to add an image font  
    *  into the mix  
    */  
   AddFont: function (size,def) {  
     if (!jsMath.Img[size]) {jsMath.Img[size] = {}};  
     jsMath.Add(jsMath.Img[size],def);  
   },  
       
   /*  
    *  Update font(s) to use image data rather than native fonts  
    *  It looks in the jsMath.Img.update array to find the names  
    *  of the fonts to udpate, and the arrays of character codes  
    *  to set (or 'all' to change every character);  
    */  
   UpdateFonts: function () {  
     var change = this.update; if (!this.loaded) return;  
     var best = this[jsMath.Img.fonts[this.best]];  
     for (var font in change) {  
       for (var i = 0; i < change[font].length; i++) {  
         var c = change[font][i];  
         if (c == 'all') {for (c in jsMath.TeX[font]) {jsMath.TeX[font][c].img = {}}}  
           else {jsMath.TeX[font][c].img = {}}  
       }  
     }  
     this.update = {};  
   },  
     
   /*  
    *  Find the font size that best fits our current font  
    *  (this is the directory name for the img files used  
    *  in some fallback modes).  
    */  
   BestSize: function () {  
     var w = jsMath.em * this.factor;  
     var m = this.w[this.fonts[0]];  
     for (var i = 1; i < this.fonts.length; i++) {  
       if (w < (this.w[this.fonts[i]] + 2*m) / 3) {return i-1}  
       m = this.w[this.fonts[i]];  
     }  
     return i-1;  
   },  
   
   /*  
    *  Get the scaling factor for the image fonts  
    */  
   Scale: function () {  
     if (!this.loaded) return;  
     this.best = this.BestSize();  
     this.em = jsMath.Img.w[this.fonts[this.best]];  
     this.scale = (jsMath.em/this.em);  
     if (Math.abs(this.scale - 1) < .12) {this.scale = 1}  
   },  
   
   /*  
    *  Get URL to directory for given font and size, based on the  
    *  user's alpha/plain setting  
    */  
   URL: function (name,size,C) {  
     var type = (jsMath.Controls.cookie.alpha) ? '/alpha/': '/plain/';  
     if (C == null) {C = "def.js"} else {C = 'char'+C+'.png'}  
     if (size != "") {size += '/'}  
     return this.root+name+type+size+C;  
   },  
   
   /*  
    *  Laod the data for an image font  
    */  
   LoadFont: function (name) {  
     if (jsMath.Controls.cookie.print) {  
       jsMath.Controls.cookie.print = 0;  
       var button = jsMath.Element("jsMath");  
       if (button) {button.style.display = "none"}  
       this.factor *= 3;  
       if (window.location.protocol != 'file:') {jsMath.Controls.SetCookie(0)}  
       if (jsMath.Browser.alphaPrintBug) {jsMath.Controls.cookie.alpha = 0}  
     }  
     document.writeln('<SCRIPT SRC="'+this.URL(name,"")+'"></SCRIPT>');  
     this.loaded = 1;  
   }  
     
 };  
   
 /***************************************************************************/  
   
 /*  
  *  jsMath.HTML handles creation of most of the HTML needed for  
  *  presenting mathematics in HTML pages.  
  */  
   
 jsMath.HTML = {  
     
   /*  
    *  produce a string version of a measurement in ems,  
    *  showing only a limited number of digits, and   
    *  using 0 when the value is near zero.  
    */  
   Em: function (m) {  
     var n = 5; if (m < 0) {n++}  
     if (Math.abs(m) < .000001) {m = 0}  
     var s = String(m); s = s.replace(/(\.\d\d\d).+/,'$1');  
     return s+'em'  
   },  
   
   /*  
    *  Create a horizontal space of width w  
    */  
   Spacer: function (w) {  
     if (w == 0) {return ''};  
     return jsMath.Browser.msieSpaceFix  
       + '<SPAN STYLE="margin-left: '  
       +    this.Em(w-jsMath.Browser.spaceWidth)+'">'  
       + jsMath.Browser.hiddenSpace + '</SPAN>';  
   },  
   
   /*  
    *  Create a colored frame (for debugging use)  
    */  
   Frame: function (x,y,w,h,c,pos) {  
   
     h -= 2/jsMath.em; // use 2 pixels to compensate for border size  
     w -= 2/jsMath.em;  
     y -= 1/jsMath.em;  
     if (!c) {c = 'black'};  
     if (pos) {pos = 'absolute;'} else  
              {pos = 'relative; margin-right: '+this.Em(-(w+2/jsMath.em))+'; '}  
     return '<IMG SRC="'+jsMath.blank+'" STYLE="position:' + pos  
              + 'vertical-align: '+this.Em(y)+'; left: '+this.Em(x)+'; '  
              + 'width:' +this.Em(w*jsMath.Browser.imgScale)+'; '  
              + 'height:'+this.Em(h*jsMath.Browser.imgScale)+'; '  
              + 'border: 1px solid '+c+';">';  
   },  
   
   /*  
    *  Create a rule line for fractions, etc.  
    *  Height is converted to pixels (with a minimum of 1), so that  
    *    the line will not disappear at small font sizes.  This means that  
    *    the thickness will not change if you change the font size, or  
    *    may not be correct within a header or other enlarged text.  
    */  
   Rule: function (w,h) {  
     if (h == null) {h = jsMath.TeX.default_rule_thickness}  
     if (w == 0 || h == 0) return;  // should make an invisible box?  
     w *= jsMath.Browser.imgScale;  
     h = Math.round(h*jsMath.em*jsMath.Browser.imgScale+.25);  
     if (h < 1) {h = 1};  
     return '<IMG SRC="'+jsMath.blank+'" HSPACE="0" VSPACE="0" '  
               + 'STYLE="width:'+this.Em(w)+'; height:1px; '  
               + 'vertical-align:-1px; '  
               + 'border:0px none; border-top:'+h+'px solid">';  
   },  
     
   /*  
    *  Add a <SPAN> tag to activate a specific CSS class  
    */  
   Class: function (tclass,html) {  
     return '<SPAN CLASS="'+tclass+'">'+html+'</SPAN>';  
   },  
     
   /*  
    *  Use a <SPAN> to place some HTML at a specific position.  
    *  (This can be replaced by the ones below to overcome  
    *   some browser-specific bugs.)  
    */  
   Place: function (html,x,y) {  
     if (Math.abs(x) < .0001) {x = 0}  
     if (Math.abs(y) < .0001) {y = 0}  
     if (x || y) {  
       var span = '<SPAN STYLE="position: relative;';  
       if (x) {span += ' margin-left:'+this.Em(x)+';'}  
       if (y) {span += ' top:'+this.Em(-y)+';'}  
       html = span + '">' + html + '</SPAN>';  
     }  
     return html;  
   },  
     
   /*  
    *  For MSIE on Windows, backspacing must be done in a separate  
    *  <SPAN>, otherwise the contents will be clipped.  Netscape  
    *  also doesn't combine vertical and horizontal spacing well.  
    *  Here the x and y positioning are done in separate <SPAN> tags  
    */  
   PlaceSeparateSkips: function (html,x,y) {  
     if (Math.abs(x) < .0001) {x = 0}  
     if (Math.abs(y) < .0001) {y = 0}  
     if (y) {html = '<SPAN STYLE="position: relative; top:'+this.Em(-y)+';'  
                        + '">' + html + '</SPAN>'}  
     if (x) {html = jsMath.Browser.msieSpaceFix   
                        + '<SPAN STYLE="margin-left:'  
                        +    this.Em(x-jsMath.Browser.spaceWidth)+';">'  
                        +  jsMath.Browser.hiddenSpace + '</SPAN>' + html}  
     return html;  
   },  
     
   /*  
    *  Place a SPAN with absolute coordinates  
    */  
   PlaceAbsolute: function (html,x,y) {  
     if (Math.abs(x) < .0001) {x = 0}  
     if (Math.abs(y) < .0001) {y = 0}  
     html = '<SPAN STYLE="position: absolute; left:'+this.Em(x)+'; '  
               + 'top:'+this.Em(y)+';">' + html + '&nbsp;</SPAN>';  
               //  space normalizes line height  
     return html;  
   },  
   
   Absolute: function(html,w,h,d,y,H) {  
     var align = "";  
     if (d && d != "none") {align = ' vertical-align: '+jsMath.HTML.Em(-d)+';'}  
     if (y != "none") {  
       if (Math.abs(y) < .0001) {y = 0}  
       html = '<SPAN STYLE="position: absolute; '  
                + 'top:'+jsMath.HTML.Em(y)+'; left: 0em;">'  
                + html + '&nbsp;' // space normalizes line height in script styles  
              + '</SPAN>';  
     }  
     html += '<IMG SRC="'+jsMath.blank+'" STYLE="'  
               + 'width:' +jsMath.HTML.Em(w*jsMath.Browser.imgScale)+'; '  
               + 'height:'+jsMath.HTML.Em(h*jsMath.Browser.imgScale)+';'+align+'">';  
     if (jsMath.Browser.msieAbsoluteBug) {           // for MSIE (Mac)  
       html = '<SPAN STYLE="position: relative;">' + html + '</SPAN>';  
     }  
     html =   '<SPAN STYLE="position: relative;'  
            +     ' width: '+jsMath.HTML.Em(w)+';'   // for MSIE  
            +     ' height: '+jsMath.HTML.Em(H)+';'  // for MSIE  
            +     jsMath.Browser.msieInlineBlockFix  // for MSIE  
            +     '">'  
            +   html  
            + '</SPAN>';  
     return html;  
   }  
   
 };  
   
   
 /***************************************************************************/  
   
 /*  
  *  jsMath.Box handles TeX's math boxes and jsMath's equivalent of hboxes.  
  */  
   
 jsMath.Box = function (format,text,w,h,d) {  
   if (d == null) {d = jsMath.d}  
   this.type = 'typeset';  
   this.w = w; this.h = h; this.d = d; this.bh = h; this.bd = d;  
   this.x = 0; this.y = 0;  
   this.html = text; this.format = format;  
 };  
   
   
 jsMath.Add(jsMath.Box,{  
   
   /*  
    *  An empty box  
    */  
   Null: new jsMath.Box('null','',0,0,0),  
   
   /*  
    *  A box containing only text whose class and style haven't been added  
    *  yet (so that we can combine ones with the same styles).  It gets  
    *  the text dimensions, if needed.  (In general, this has been  
    *  replaced by TeX() below, but is still used in fallback mode.)  
    */  
   Text: function (text,tclass,style,size,a,d) {  
     var html = jsMath.Typeset.AddClass(tclass,text);  
         html = jsMath.Typeset.AddStyle(style,size,html);  
     var BB = jsMath.EmBoxFor(html); var TeX = jsMath.Typeset.TeX(style,size);  
     var bd = ((tclass == 'cmsy10' || tclass == 'cmex10')? BB.h-TeX.h: TeX.d*BB.h/TeX.hd);  
     var box = new jsMath.Box('text',text,BB.w,BB.h-bd,bd);  
     box.style = style; box.size = size; box.tclass = tclass;  
     if (d != null) {if (d != 1) {box.d = d}} else {box.d = 0}  
     if (a == null || a == 1) {box.h = .9*TeX.M_height}  
       else {box.h = 1.1*TeX.x_height + 1*a}; // sometimes a is a string?  
     return box;  
   },  
   
   /*  
    *  Produce a box containing a given TeX character from a given font.  
    *  The box is a text box (like the ones above), so that characters from  
    *  the same font can be combined.  
    */  
   TeX: function (C,font,style,size) {  
     var c = jsMath.TeX[font][C];  
     if (c.d == null) {c.d = 0}; if (c.h == null) {c.h = 0}  
     if (c.img != null && c.c != '') this.TeXIMG(font,C,jsMath.Typeset.StyleSize(style,size));  
     var scale = jsMath.Typeset.TeX(style,size).scale;  
     var h = c.h + jsMath.TeX[font].dh  
     var box = new jsMath.Box('text',c.c,c.w*scale,h*scale,c.d*scale);  
     box.style = style; box.size = size;  
     if (c.tclass) {  
       box.tclass = c.tclass;  
       box.bh = scale*jsMath.h;  
       box.bd = scale*jsMath.d;  
     } else {  
       box.tclass = font;  
       box.bh = scale*jsMath.TeX[font].h;  
       box.bd = scale*jsMath.TeX[font].d;  
       if (jsMath.Browser.msieFontBug) {  
         // hack to avoid Font changing back to the default  
         // font when a unicode reference is not followed  
         // by a letter or number  
         box.html += '<SPAN STYLE="display: none">x</SPAN>'  
       }  
     }  
     if (c.img != null) {  
       box.bh = c.img.bh; box.bd = c.img.bd;  
       box.tclass = "normal";  
     }  
     return box;  
   },  
     
   /*  
    *  Set the character's string to the appropriate image file  
    */  
   TeXIMG: function (font,C,size) {  
     var c = jsMath.TeX[font][C];  
     if (c.img.size != null && c.img.size == size &&  
         c.img.best != null && c.img.best == jsMath.Img.best) return;  
     var mustScale = (jsMath.Img.scale != 1);  
     var id = jsMath.Img.best + size - 4;  
     if (id < 0) {id = 0; mustScale = 1} else  
     if (id >= jsMath.Img.fonts.length) {id = jsMath.Img.fonts.length-1; mustScale = 1}  
     var imgFont = jsMath.Img[jsMath.Img.fonts[id]];  
     var img = imgFont[font][C];  
     var scale = 1/jsMath.Img.w[jsMath.Img.fonts[id]];  
     if (id != jsMath.Img.best + size - 4) {  
       if (c.w != null) {scale = c.w/img[0]} else {  
         scale *= jsMath.Img.fonts[size]/jsMath.Img.fonts[4]  
               *  jsMath.Img.fonts[jsMath.Img.best]/jsMath.Img.fonts[id];  
       }  
     }  
     var w = img[0]*scale; var h = img[1]*scale; var d = -img[2]*scale; var v;  
     var wadjust = (c.w == null || Math.abs(c.w-w) < .01)? "" : " margin-right:"+jsMath.HTML.Em(c.w-w)+';';  
     var resize = ""; C = this.HexCode(C);  
     if (!mustScale && !jsMath.Controls.cookie.scaleImg) {  
       if (2*w < h || (jsMath.Browser.msieAlphaBug && jsMath.Controls.cookie.alpha))  
          {resize = "height:"+(img[1]*jsMath.Browser.imgScale)+'px;'}  
       resize += " width:"+(img[0]*jsMath.Browser.imgScale)+'px;'  
       v = -img[2]+'px';  
     } else {  
       if (2*w < h || (jsMath.Browser.msieAlphaBug && jsMath.Controls.cookie.alpha))  
          {resize = "height:"+jsMath.HTML.Em(h*jsMath.Browser.imgScale)+';'}  
       resize += " width:"+jsMath.HTML.Em(w*jsMath.Browser.imgScale)+';'  
       v = jsMath.HTML.Em(d);  
     }  
     var vadjust = (Math.abs(d) < .01 && !jsMath.Browser.valignBug)?  
                          "": " vertical-align:"+v+';';  
     var URL = jsMath.Img.URL(font,jsMath.Img.fonts[id],C);  
     if (jsMath.Browser.msieAlphaBug && jsMath.Controls.cookie.alpha) {  
       c.c = '<IMG SRC="'+jsMath.blank+'" '  
                + 'STYLE="'+jsMath.Browser.msieCenterBugFix  
                + resize + vadjust + wadjust  
                + ' filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=' + "'"  
                + URL + "', sizingMethod='scale'" + ');">';  
     } else {  
       c.c = '<IMG SRC="'+URL+'" STYLE="'+jsMath.Browser.msieCenterBugFix  
                   + resize + vadjust + wadjust + '">';  
     }  
     c.tclass = "normal";  
     c.img.bh = h+d; c.img.bd = -d;  
     c.img.size = size; c.img.best = jsMath.Img.best;  
   },  
     
   /*  
    *  Get a two-character hex code (some browsers don't know toString(16))  
    */  
   HexCode: function (C) {  
     var codes = '0123456789ABCDEF';  
     var h = Math.floor(C/16); var l = C - 16*h;  
     return codes.charAt(h)+codes.charAt(l);  
   },  
   
   /*  
    *  A box containing a spacer of a specific width  
    */  
   Space: function (w) {  
     return new jsMath.Box('html',jsMath.HTML.Spacer(w),w,0,0);  
   },  
   
   /*  
    *  A box containing a horizontal rule  
    */  
   Rule: function (w,h) {  
     if (h == null) {h = jsMath.TeX.default_rule_thickness}  
     html = jsMath.HTML.Rule(w,h);  
     return new jsMath.Box('html',html,w,h,0);  
   },  
   
   /*  
    *  Get a character from a TeX font, and make sure that it has  
    *  its metrics specified.  
    */  
   GetChar: function (code,font) {  
     var c = jsMath.TeX[font][code];  
     if (c.img != null) {this.TeXIMG(font,code,4)}  
     if (c.tclass == null) {c.tclass = font}  
     if (!c.computedW) {  
       c.w = jsMath.EmBoxFor(jsMath.Typeset.AddClass(c.tclass,c.c)).w;  
       if (c.h == null) {c.h = jsMath.defaultH}; if (c.d == null) {c.d = 0}  
       c.computedW = 1;  
     }  
     return c;  
   },  
     
   /*  
    *  Locate the TeX delimiter character that matches a given height.  
    *  Return the character, font, style and actual height used.  
    */  
   DelimBestFit: function (H,c,font,style) {  
     if (c == 0 && font == 0) return;  
     var C; var h; font = jsMath.TeX.fam[font];  
     var isSS = (style.charAt(1) == 'S');  
     var isS  = (style.charAt(0) == 'S');  
     while (c != null) {  
       C = jsMath.TeX[font][c];  
       if (C.h == null) {C.h = jsMath.defaultH}; if (C.d == null) {C.d = 0}  
       h = C.h+C.d;  
       if (C.delim) {return [c,font,'',H]}  
       if (isSS && .5*h >= H) {return [c,font,'SS',.5*h]}  
       if (isS  && .7*h >= H) {return [c,font,'S',.7*h]}  
       if (h >= H || C.n == null) {return [c,font,'T',h]}  
       c = C.n  
     }  
   },  
     
   /*  
    *  Create the HTML needed for a stretchable delimiter of a given height,  
    *  either centered or not.  This version uses relative placement (i.e.,  
    *  backspaces, not line-breaks).  This works with more browsers, but  
    *  if the font size changes, the backspacing may not be right, so the  
    *  delimiters may become jagged.  
    */  
   DelimExtendRelative: function (H,c,font,a,nocenter) {  
     var C = jsMath.TeX[font][c];  
     var top = this.GetChar(C.delim.top? C.delim.top: C.delim.rep,font);  
     var rep = this.GetChar(C.delim.rep,font);  
     var bot = this.GetChar(C.delim.bot? C.delim.bot: C.delim.rep,font);  
     var ext = jsMath.Typeset.AddClass(rep.tclass,rep.c);  
     var w = rep.w; var h = rep.h+rep.d  
     var y; var dx;  
     if (C.delim.mid) {// braces  
       var mid = this.GetChar(C.delim.mid,font);  
       var n = Math.ceil((H-(top.h+top.d)-(mid.h+mid.d)-(bot.h+bot.d))/(2*(rep.h+rep.d)));  
       H = 2*n*(rep.h+rep.d) + (top.h+top.d) + (mid.h+mid.d) + (bot.h+bot.d);  
       if (nocenter) {y = 0} else {y = H/2+a}; var Y = y;  
       var html = jsMath.HTML.Place(jsMath.Typeset.AddClass(top.tclass,top.c),0,y-top.h)  
                + jsMath.HTML.Place(jsMath.Typeset.AddClass(bot.tclass,bot.c),-(top.w+bot.w)/2,y-(H-bot.d))  
                + jsMath.HTML.Place(jsMath.Typeset.AddClass(mid.tclass,mid.c),-(bot.w+mid.w)/2,y-(H+mid.h-mid.d)/2);  
       dx = (w-mid.w)/2; if (Math.abs(dx) < .0001) {dx = 0}  
       if (dx) {html += jsMath.HTML.Spacer(dx)}  
       y -= top.h+top.d + rep.h;  
       for (var i = 0; i < n; i++) {html += jsMath.HTML.Place(ext,-w,y-i*h)}  
       y -= H/2 - rep.h/2;  
       for (var i = 0; i < n; i++) {html += jsMath.HTML.Place(ext,-w,y-i*h)}  
     } else {// everything else  
       var n = Math.ceil((H - (top.h+top.d) - (bot.h+bot.d))/(rep.h+rep.d));  
       // make sure two-headed arrows have an extender  
       if (top.h+top.d < .9*(rep.h+rep.d)) {n = Math.max(1,n)}  
       H = n*(rep.h+rep.d) + (top.h+top.d) + (bot.h+bot.d);  
       if (nocenter) {y = 0} else {y = H/2+a}; var Y = y;  
       var html = jsMath.HTML.Place(jsMath.Typeset.AddClass(top.tclass,top.c),0,y-top.h)  
       dx = (w-top.w)/2; if (Math.abs(dx) < .0001) {dx = 0}  
       if (dx) {html += jsMath.HTML.Spacer(dx)}  
       y -= top.h+top.d + rep.h;  
       for (var i = 0; i < n; i++) {html += jsMath.HTML.Place(ext,-w,y-i*h)}  
       html += jsMath.HTML.Place(jsMath.Typeset.AddClass(bot.tclass,bot.c),-(w+bot.w)/2,Y-(H-bot.d));  
     }  
     if (nocenter) {h = top.h} else {h = H/2+a}  
     var box = new jsMath.Box('html',html,rep.w,h,H-h);  
     box.bh = jsMath.TeX[font].h; box.bd = jsMath.TeX[font].d;  
     return box;  
   },  
   
   /*  
    *  Create the HTML needed for a stretchable delimiter of a given height,  
    *  either centered or not.  This version uses absolute placement (i.e.,  
    *  line-breaks, not backspacing).  This gives more reliable results,  
    *  but doesn't work with all browsers.  
    */  
   DelimExtendAbsolute: function (H,c,font,a,nocenter) {  
     var Font = jsMath.TeX[font];  
     var C = Font[c];  
     var top = this.GetChar(C.delim.top? C.delim.top: C.delim.rep,font);  
     var rep = this.GetChar(C.delim.rep,font);  
     var bot = this.GetChar(C.delim.bot? C.delim.bot: C.delim.rep,font);  
       
     if (C.delim.mid) {// braces  
       var mid = this.GetChar(C.delim.mid,font);  
       var n = Math.ceil((H-(top.h+top.d)-(mid.h+mid.d-.05)-(bot.h+bot.d-.05))/(2*(rep.h+rep.d-.05)));  
       H = 2*n*(rep.h+rep.d-.05) + (top.h+top.d) + (mid.h+mid.d-.05) + (bot.h+bot.d-.05);  
         
       html = jsMath.HTML.PlaceAbsolute(jsMath.Typeset.AddClass(top.tclass,top.c),0,0);  
       var h = rep.h+rep.d - .05; var y = top.d-.05 + rep.h;  
       var ext = jsMath.Typeset.AddClass(font,rep.c)  
       for (var i = 0; i < n; i++) {html += jsMath.HTML.PlaceAbsolute(ext,0,y+i*h)}  
       html += jsMath.HTML.PlaceAbsolute(jsMath.Typeset.AddClass(mid.tclass,mid.c),0,y+n*h-rep.h+mid.h);  
       y += n*h + mid.h+mid.d - .05;  
       for (var i = 0; i < n; i++) {html += jsMath.HTML.PlaceAbsolute(ext,0,y+i*h)}  
       html += jsMath.HTML.PlaceAbsolute(jsMath.Typeset.AddClass(bot.tclass,bot.c),0,y+n*h-rep.h+bot.h);  
     } else {// all others  
       var n = Math.ceil((H - (top.h+top.d) - (bot.h+bot.d-.05))/(rep.h+rep.d-.05));  
       H = n*(rep.h+rep.d-.05) + (top.h+top.d) + (bot.h+bot.d-.05);  
   
       html = jsMath.HTML.PlaceAbsolute(jsMath.Typeset.AddClass(top.tclass,top.c),0,0);  
       var h = rep.h+rep.d-.05; var y = top.d-.05 + rep.h;  
       var ext = jsMath.Typeset.AddClass(rep.tclass,rep.c);  
       for (var i = 0; i < n; i++) {html += jsMath.HTML.PlaceAbsolute(ext,0,y+i*h)}  
       html += jsMath.HTML.PlaceAbsolute(jsMath.Typeset.AddClass(bot.tclass,bot.c),0,y+n*h-rep.h+bot.h);  
     }  
       
     var w = top.w;  
     if (nocenter) {h = top.h; y = 0} else {h = H/2 + a; y = h - top.h}  
     html = jsMath.HTML.Absolute(html,w,Font.h,"none",-y,top.h);  
     var box = new jsMath.Box('html',html,rep.w,h,H-h);  
     box.bh = jsMath.TeX[font].h; box.bd = jsMath.TeX[font].d;  
     return box;  
   },  
     
   /*  
    *  Get the HTML for a given delimiter of a given height.  
    *  It will return either a single character, if one exists, or the  
    *  more complex HTML needed for a stretchable delimiter.  
    */  
   Delimiter: function (H,delim,style,nocenter) {  
     var size = 4;  //### pass this?  
     var TeX = jsMath.Typeset.TeX(style,size);  
     if (!delim) {return this.Space(TeX.nulldelimiterspace)}  
     var CFSH = this.DelimBestFit(H,delim[2],delim[1],style);  
     if (CFSH == null || CFSH[3] < H)   
       {CFSH = this.DelimBestFit(H,delim[4],delim[3],style)}  
     if (CFSH == null) {return this.Space(TeX.nulldelimiterspace)}  
     if (CFSH[2] == '')  
       {return this.DelimExtend(H,CFSH[0],CFSH[1],TeX.axis_height,nocenter)}  
     box = jsMath.Box.TeX(CFSH[0],CFSH[1],CFSH[2],size).Styled();  
     if (nocenter) {box.y = -jsMath.TeX[CFSH[1]].dh*TeX.scale}  
       else {box.y = -((box.h+box.d)/2 - box.d - TeX.axis_height)}  
     if (Math.abs(box.y) < .0001) {box.y = 0}  
     if (box.y) {box = jsMath.Box.SetList([box],CFSH[2],size)}  
     return box;  
   },  
     
   /*  
    *  Get a character by its TeX charcode, and make sure its width  
    *  is specified.  
    */  
   GetCharCode: function (code) {  
     var font = jsMath.TeX.fam[code[0]];  
     var Font = jsMath.TeX[font];  
     var c = Font[code[1]];  
     if (c.img != null) {this.TeXIMG(font,code[1],4)}  
     if (c.w == null) {c.w = jsMath.EmBoxFor(jsMath.Typeset.AddClass(c.tclass,c.c)).w}  
     if (c.font == null) {c.font = font}  
     return c;  
   },  
   
   /*  
    * Add the class to the html, and use the font if there isn't one  
    * specified already  
    */  
   
   AddClass: function (tclass,html,font) {  
     if (tclass == null) {tclass = font}  
     return jsMath.Typeset.AddClass(tclass,html);  
   },  
     
   /*  
    *  Create a horizontally stretchable "delimiter" (like over- and  
    *  underbraces).  
    */  
 //###  Add size?  
   Leaders: function (W,leader) {  
     var h; var d; var w; var html; var font;  
     if (leader.lmid) {// braces  
       font = jsMath.TeX.fam[leader.left[0]];  
       var left = this.GetCharCode(leader.left);  
       var right = this.GetCharCode(leader.right);  
       var lmid = this.GetCharCode(leader.lmid);  
       var rmid = this.GetCharCode(leader.rmid);  
       w = (W - left.w - right.w - lmid.w - rmid.w)/2 - .1; h = .4; d = .3;  
       if (w < 0) {w = 0}  
       html = this.AddClass(left.tclass,left.c,left.font)   
            + jsMath.HTML.Rule(w,left.h)  
            + this.AddClass(lmid.tclass,lmid.c+rmid.c,lmid.font)  
            + jsMath.HTML.Rule(w,right.h)  
            + this.AddClass(right.tclass,right.c,right.font);  
     } else { //arrows  
       font = jsMath.TeX.fam[leader.rep[0]];  
       var left = this.GetCharCode(leader.left? leader.left: leader.rep);  
       var rep = this.GetCharCode(leader.rep);  
       var right = this.GetCharCode(leader.right? leader.right: leader.rep);  
       var n = Math.ceil((W - left.w - right.w + .4)/(rep.w - .3));  
       w = (W - left.w - right.w + .4 - n*(rep.w - .3));  
       if (leader.left) {h = left.h; d = left.d} else {h = right.h; d = right.d}  
       if (d == null) {d = 0}; if (h == null) {h = 0}  
       var html = this.AddClass(left.tclass,left.c,left.font); var m = Math.floor(n/2);  
       var ext = jsMath.HTML.Place(rep.c,-.3,0);  
       var ehtml = ''; for (var i = 0; i < m; i++) {ehtml += ext};  
       html += this.AddClass(rep.tclass,ehtml,rep.font) + jsMath.HTML.Spacer(w);  
       ehtml = ''; for (var i = m; i < n; i++) {ehtml += ext};  
       html += this.AddClass(rep.tclass,ehtml,rep.font);  
       if (jsMath.Browser.msieFontBug) {html += '<SPAN STYLE="display: none">x</SPAN>'}  
       html += jsMath.HTML.Place(this.AddClass(right.tclass,right.c,right.font),-.4,0);  
     }  
     w = jsMath.EmBoxFor(html).w;  
     if (w != W) {  
       w = jsMath.HTML.Spacer((W-w)/2);  
       html = w + html + w;  
     }  
     var box = new jsMath.Box('html',html,W,h,d);  
     box.bh = jsMath.TeX[font].h; box.bd = jsMath.TeX[font].d;  
     return box;  
   },  
     
   /*  
    *  Create the HTML for an alignment (e.g., array or matrix)  
    *  Since the widths are not really accurate (they are based on pixel  
    *  widths not the sub-pixel widths of the actual characters), there  
    *  is some drift involved.  We lay out the table column by column  
    *  to help reduce the problem.  
    *    
    *  ###  still need to allow users to specify row and column attributes,  
    *       and do things like \span and \multispan  ###  
    */  
   LayoutRelative: function (size,table,align,cspacing) {  
     if (align == null) {align = []}  
     if (cspacing == null) {cspacing = []}  
       
     // get row and column maximum dimensions  
     var scale = jsMath.sizes[size]/100;  
     var W = []; var H = []; var D = [];  
     var unset = -1000; var bh = unset; var bd = unset;  
     var i; var j; var row;  
     for (i = 0; i < table.length; i++) {  
       row = table[i]; H[i] = jsMath.h*scale; D[i] = jsMath.d*scale;  
       for (j = 0; j < row.length; j++) {  
         row[j] = row[j].Remeasured();  
         if (row[j].h > H[i]) {H[i] = row[j].h}  
         if (row[j].d > D[i]) {D[i] = row[j].d}  
         if (j >= W.length) {W[j] = row[j].w}  
         else if (row[j].w > W[j]) {W[j] = row[j].w}  
         if (row[j].bh > bh) {bh = row[j].bh}  
         if (row[j].bd > bd) {bd = row[j].bd}  
       }  
     }  
     if (bh == unset) {bh = 0}; if (bd == unset) {bd = 0}  
   
     // lay out the columns  
     var HD = (jsMath.hd-.01)*scale;  
     var html = ''; var pW = 0; var cW = 0;  
     var w; var h; var y;  
     var box; var mlist; var entry;  
     for (j = 0; j < W.length; j++) {  
       mlist = []; y = -H[0]; pW = 0;  
       for (i = 0; i < table.length; i++) {  
         entry = table[i][j];  
         if (entry && entry.format != 'null') {  
           if (align[j] == 'l') {w = 0} else  
           if (align[j] == 'r') {w = W[j] - entry.w} else  
             {w = (W[j] - entry.w)/2}  
           entry.x = w - pW; pW = entry.w + w; entry.y = y;  
           mlist[mlist.length] = entry;  
         }  
         if (i == table.length-1) {y -= D[i]}  
         else {y -= Math.max(HD,D[i]+H[i+1]) + scale/10}  
       }  
       if (cspacing[j] == null) cspacing[j] = scale;  
       if (mlist.length > 0) {  
         box = jsMath.Box.SetList(mlist,'T',size);  
         html += jsMath.HTML.Place(box.html,cW,0);  
         cW = W[j] - box.w + cspacing[j];  
       } else {cW += cspacing[j]}  
     }  
       
     // get the full width and height  
     w = -cspacing[W.length-1]; y = (H.length-1)*scale/10;  
     for (i = 0; i < W.length; i++) {w += W[i] + cspacing[i]}  
     for (i = 0; i < H.length; i++) {y += Math.max(HD,H[i]+D[i])}  
     h = y/2 + jsMath.TeX.axis_height; var d = y-h;  
       
     // adjust the final row width, and vcenter the table  
     //   (add 1/6em at each side for the \,)  
     html += jsMath.HTML.Spacer(cW-cspacing[W.length-1] + scale/6);  
     html = jsMath.HTML.Place(html,scale/6,h);  
     box = new jsMath.Box('html',html,w+scale/3,h,d);  
     box.bh = bh; box.bd = bd;  
     return box;  
   },  
   
   /*  
    *  Create the HTML for an alignment (e.g., array or matrix)  
    *  Use absolute position for elements in the array.  
    *    
    *  ###  still need to allow users to specify row and column attributes,  
    *       and do things like \span and \multispan  ###  
    */  
   LayoutAbsolute: function (size,table,align,cspacing) {  
     if (align == null) {align = []}  
     if (cspacing == null) {cspacing = []}  
       
     // get row and column maximum dimensions  
     var scale = jsMath.sizes[size]/100;  
     var HD = (jsMath.hd-.01)*scale;  
     var W = []; var H = []; var D = [];  
     var w = 0; var h; var x; var y;  
     var i; var j; var row;  
     for (i = 0; i < table.length; i++) {  
       row = table[i];  
       H[i] = jsMath.h*scale; D[i] = jsMath.d*scale;  
       for (j = 0; j < row.length; j++) {  
         row[j] = row[j].Remeasured();  
         if (row[j].h > H[i]) {H[i] = row[j].h}  
         if (row[j].d > D[i]) {D[i] = row[j].d}  
         if (j >= W.length) {W[j] = row[j].w}  
         else if (row[j].w > W[j]) {W[j] = row[j].w}  
       }  
     }  
   
     // get the height and depth of the centered table  
     y = (H.length-1)*scale/6;  
     for (i = 0; i < H.length; i++) {y += Math.max(HD,H[i]+D[i])}  
     h = y/2 + jsMath.TeX.axis_height; var d = y - h;  
   
     // lay out the columns  
     var html = ''; var entry; w = scale/6;  
     for (j = 0; j < W.length; j++) {  
       y = H[0]-h;  
       for (i = 0; i < table.length; i++) {  
         entry = table[i][j];  
         if (entry && entry.format != 'null') {  
           if (align[j] == 'l') {x = 0} else  
           if (align[j] == 'r') {x = W[j] - entry.w} else  
             {x = (W[j] - entry.w)/2}  
           html += jsMath.HTML.PlaceAbsolute(entry.html,w+x,  
                     y-Math.max(0,entry.bh-jsMath.h*scale));  
         }  
         if (i == table.length-1) {y += D[i]}  
         else {y += Math.max(HD,D[i]+H[i+1]) + scale/6}  
       }  
       if (cspacing[j] == null) cspacing[j] = scale;  
       w += W[j] + cspacing[j];  
     }  
       
     // get the full width  
     w = -cspacing[W.length-1]+scale/3;  
     for (i = 0; i < W.length; i++) {w += W[i] + cspacing[i]}  
   
     html = jsMath.HTML.Spacer(scale/6)+html+jsMath.HTML.Spacer(scale/6);  
     if (jsMath.Browser.spanHeightVaries) {y = h-jsMath.h} else {y = 0}  
     html = jsMath.HTML.Absolute(html,w,h+d,d,y,H[0]);  
     var box = new jsMath.Box('html',html,w+scale/3,h,d);  
     return box;  
   },  
   
   /*  
    *  Look for math within \hbox and other non-math text  
    */  
   InternalMath: function (text,size) {  
     if (!text.match(/\$|\\\(/)) {return this.Text(text,'normal','T',size).Styled()}  
       
     var i = 0; var k = 0; var c; var match = '';  
     var mlist = []; var parse; var html; var box;  
     while (i < text.length) {  
       c = text.charAt(i++);  
       if (c == '$') {  
         if (match == '$') {  
           parse = jsMath.Parse(text.slice(k,i-1),null,size);  
           if (parse.error) {  
             mlist[mlist.length] = this.Text(parse.error,'error','T',size,1,1);  
           } else {  
             parse.Atomize();  
             mlist[mlist.length] = parse.mlist.Typeset('T',size).Styled();  
           }  
           match = ''; k = i;  
         } else {  
           mlist[mlist.length] = this.Text(text.slice(k,i-1),'normal','T',size,1,1);  
           match = '$'; k = i;  
         }  
       } else if (c == '\\') {  
         c = text.charAt(i++);  
         if (c == '(' && match == '') {  
           mlist[mlist.length] = this.Text(text.slice(k,i-2),'normal','T',size,1,1);  
           match = ')'; k = i;  
         } else if (c == ')' && match == ')') {  
           parse = jsMath.Parse(text.slice(k,i-2),null,size);  
           if (parse.error) {  
             mlist[mlist.length] = this.Text(parse.error,'error','T',size,1,1);  
           } else {  
             parse.Atomize();  
             mlist[mlist.length] = parse.mlist.Typeset('T',size).Styled();  
           }  
           match = ''; k = i;  
         }  
       }  
     }  
     mlist[mlist.length] = this.Text(text.slice(k),'normal','T',size,1,1);  
     return this.SetList(mlist,'T',size);  
   },  
     
   /*  
    *  Convert an abitrary box to a typeset box.  I.e., make an  
    *  HTML version of the contents of the box, at its desired (x,y)  
    *  position.  
    */  
   Set: function (box,style,size,addstyle) {  
     if (box) {  
       if (box.type == 'typeset') {return box}  
       if (box.type == 'mlist') {  
         box.mlist.Atomize(style,size);  
         return box.mlist.Typeset(style,size);  
       }  
       if (box.type == 'text') {  
         box = this.Text(box.text,box.tclass,style,size,box.ascend,box.descend);  
         if (addstyle != 0) {box.Styled()}  
         return box;  
       }  
       box = this.TeX(box.c,box.font,style,size);  
       if (addstyle != 0) {box.Styled()}  
       return box;  
     }  
     return jsMath.Box.Null;  
   },  
   
   /*  
    *  Convert a list of boxes to a single typeset box.  I.e., finalize  
    *  the HTML for the list of boxes, properly spaced and positioned.  
    */  
   SetList: function (boxes,style,size) {  
     var mlist = []; var box;  
     for (var i = 0; i < boxes.length; i++) {  
       box = boxes[i];  
       if (box.type == 'typeset') {box = jsMath.mItem.Typeset(box)}  
       mlist[mlist.length] = box;  
     }  
     var typeset = new jsMath.Typeset(mlist);  
     return typeset.Typeset(style,size);  
   }  
   
 });  
   
   
 jsMath.Package(jsMath.Box,{  
   
   /*  
    *  Add the class and style to a text box (i.e., finalize the  
    *  unpositioned HTML for the box).  
    */  
   Styled: function () {  
     if (this.format == 'text') {  
       this.html = jsMath.Typeset.AddClass(this.tclass,this.html);  
       this.html = jsMath.Typeset.AddStyle(this.style,this.size,this.html);  
       delete this.tclass; delete this.style;  
       this.format = 'html';  
     }  
     return this;  
   },  
     
   /*  
    *  Recompute the box width to make it more accurate.  
    */  
   Remeasured: function () {  
     if (this.w > 0 && !this.html.match(/position: ?absolute/))  
       {this.w = jsMath.EmBoxFor(this.html).w}  
     return this;  
   }  
   
 });  
   
   
 /***************************************************************************/  
   
 /*  
  *  mItems are the building blocks of mLists (math lists) used to  
  *  store the information about a mathematical expression.  These are  
  *  basically the items listed in the TeXbook in Appendix G (plus some  
  *  minor extensions).  
  */  
 jsMath.mItem = function (type,def) {  
   this.type = type;  
   jsMath.Add(this,def);  
 }  
   
 jsMath.Add(jsMath.mItem,{  
   
   /*  
    *  a general atom (given a nucleus for the atom)  
    */  
   Atom: function (type,nucleus) {  
     return new jsMath.mItem(type,{atom: 1, nuc: nucleus});  
   },  
   
   /*  
    *  An atom whose nucleus is a piece of text, in a given  
    *  class, with a given additional height and depth  
    */  
   TextAtom: function (type,text,tclass,a,d) {  
     var atom = new jsMath.mItem(type,{  
       atom: 1,  
       nuc: {  
         type: 'text',  
         text: text,  
         tclass: tclass  
       }  
     });  
     if (a != null) {atom.nuc.ascend = a}  
     if (d != null) {atom.nuc.descend = d}  
     return atom;  
   },  
     
   /*  
    *  An atom whose nucleus is a TeX character in a specific font  
    */  
   TeXAtom: function (type,c,font) {  
     return new jsMath.mItem(type,{  
       atom: 1,  
       nuc: {  
         type: 'TeX',  
         c: c,  
         font: font  
       }  
     });  
   },  
   
   /*  
    *  A generalized fraction atom, with given delimiters, rule  
    *  thickness, and a numerator and denominator.  
    */  
   Fraction: function (name,num,den,thickness,left,right) {  
     return new jsMath.mItem('fraction',{  
       from: name, num: num, den: den,  
       thickness: thickness, left: left, right: right  
     });  
   },  
   
   /*  
    *  An atom that inserts some glue  
    */  
   Space: function (w) {return new jsMath.mItem('space',{w: w})},  
   
   /*  
    *  An atom that contains a typeset box (like an hbox or vbox)  
    */  
   Typeset: function (box) {return new jsMath.mItem('box',{nuc: box})},  
     
   /*  
    *  An atom that contains some finished HTML (acts like a typeset box)  
    */  
   HTML: function (html) {return new jsMath.mItem('html',{html: html})}  
   
 });  
   
 /***************************************************************************/  
   
 /*  
  *  mLists are lists of mItems, and encode the contents of  
  *  mathematical expressions and sub-expressions.  They act as  
  *  the expression "stack" as the mathematics is parsed, and  
  *  contain some state information, like the position of the  
  *  most recent open paren and \over command, and the current font.  
  */  
 jsMath.mList = function (list,font,size,style) {  
   if (list) {this.mlist = list} else {this.mlist = []}  
   if (style == null) {style = 'T'}; if (size == null) {size = 4}  
   this.data = {openI: null, overI: null, overF: null,  
                font: font, size: size, style: style};  
   this.init = {size: size, style: style};  
 }  
   
 jsMath.Package(jsMath.mList,{  
   
   /*  
    *  Add an mItem to the list  
    */  
   Add: function (box) {return (this.mlist[this.mlist.length] = box)},  
     
   /*  
    *  Get the i-th mItem from the list  
    */  
   Get: function (i) {return this.mlist[i]},  
     
   /*  
    *  Get the length of the list  
    */  
   Length: function() {return this.mlist.length},  
   
   /*  
    *  Get the tail mItem of the list  
    */  
   Last: function () {  
     if (this.mlist.length == 0) {return null}  
     return this.mlist[this.mlist.length-1]  
   },  
   
   /*  
    *  Get a sublist of an mList  
    */  
   Range: function (i,j) {  
     if (j == null) {j = this.mlist.length}  
     return new jsMath.mList(this.mlist.slice(i,j+1));  
   },  
   
   /*  
    *  Remove a range of mItems from the list.  
    */  
   Delete: function (i,j) {  
     if (j == null) {j = i}  
     if (this.mlist.splice) {this.mlist.splice(i,j-i+1)} else {  
       var mlist = [];  
       for (var k = 0; k < this.mlist.length; k++)  
         {if (k < i || k > j) {mlist[mlist.length] = this.mlist[k]}}  
       this.mlist = mlist;  
     }  
   },  
   
   /*  
    *  Add an open brace and maintain the stack information  
    *  about the previous open brace so we can recover it  
    *  when this one os closed.  
    */  
   Open: function (left) {  
     var box = this.Add(new jsMath.mItem('boundary',{data: this.data}));  
     var olddata = this.data;  
     this.data = {}; for (var i in olddata) {this.data[i] = olddata[i]}  
     delete this.data.overI; delete this.data.overF;  
     this.data.openI = this.mlist.length-1;  
     if (left != null) {box.left = left}  
     return box;  
   },  
   
   /*  
    *  Attempt to close a brace.  Recover the stack information  
    *  about previous open braces and \over commands.  If there was an  
    *  \over (or \above, etc) in this set of braces, create a fraction  
    *  atom from the two halves, otherwise create an inner or ord  
    *  from the contents of the braces.  
    *  Remove the braced material from the list and add the newly  
    *  created atom (the fraction, inner or ord).  
    */  
   Close: function (right) {  
     if (right != null) {right = new jsMath.mItem('boundary',{right: right})}  
     var atom; var open = this.data.openI;  
     var over = this.data.overI; var from = this.data.overF;  
     this.data  = this.mlist[open].data;  
     if (over) {  
       atom = jsMath.mItem.Fraction(from.name,  
         {type: 'mlist', mlist: this.Range(open+1,over-1)},  
         {type: 'mlist', mlist: this.Range(over)},  
         from.thickness,from.left,from.right);  
       if (right) {  
         var mlist = new jsMath.mList([this.mlist[open],atom,right]);  
         atom = jsMath.mItem.Atom('inner',{type: 'mlist', mlist: mlist});  
       }  
     } else {  
       var openI = open+1; if (right) {this.Add(right); openI--}  
       atom = jsMath.mItem.Atom((right)?'inner':'ord',  
                   {type: 'mlist', mlist: this.Range(openI)});  
     }  
     this.Delete(open,this.Length());  
     return this.Add(atom);  
   },  
   
   /*  
    *  Create a generalized fraction from an mlist that  
    *  contains an \over (or \above, etc).  
    */  
   Over: function () {  
     var over = this.data.overI; var from = this.data.overF  
     var atom = jsMath.mItem.Fraction(from.name,  
       {type: 'mlist', mlist: this.Range(open+1,over-1)},  
       {type: 'mlist', mlist: this.Range(over)},  
       from.thickness,from.left,from.right);  
     this.mlist = [atom];  
   },  
   
   /*  
    *  Take a raw mList (that has been produced by parsing some TeX  
    *  expression), and perform the modifications outlined in  
    *  Appendix G of the TeXbook.    
    */  
   Atomize: function (style,size) {  
     var mitem; var prev = '';  
     this.style = style; this.size = size;  
     for (var i = 0; i < this.mlist.length; i++) {  
       mitem = this.mlist[i]; mitem.delta = 0;  
       if (mitem.type == 'choice')   
         {this.mlist = this.Atomize.choice(this.style,mitem,i,this.mlist); i--}  
       else if (this.Atomize[mitem.type]) {  
         var f = this.Atomize[mitem.type]; // Opera needs separate name  
         f(this.style,this.size,mitem,prev,this,i);  
       }  
       prev = mitem;  
     }  
     if (mitem && mitem.type == 'bin') {mitem.type = 'ord'}  
     if (this.mlist.length >= 2 && mitem.type == 'boundary' &&  
         this.mlist[0].type == 'boundary') {this.AddDelimiters(style,size)}  
   },  
   
   /*  
    *  For a list that has boundary delimiters as its first and last  
    *  entries, we replace the boundary atoms by open and close  
    *  atoms whose nuclii are the specified delimiters properly sized  
    *  for the contents of the list.  (Rule 19)  
    */  
   AddDelimiters: function(style,size) {  
     var unset = -10000; var h = unset; var d = unset;  
     for (var i = 0; i < this.mlist.length; i++) {  
       mitem = this.mlist[i];  
       if (mitem.atom || mitem.type == 'box') {  
         h = Math.max(h,mitem.nuc.h+mitem.nuc.y);  
         d = Math.max(d,mitem.nuc.d-mitem.nuc.y);  
       }  
     }  
     var TeX = jsMath.TeX; var a = jsMath.Typeset.TeX(style,size).axis_height;  
     var delta = Math.max(h-a,d+a);  
     var H =  Math.max(Math.floor(TeX.integer*delta/500)*TeX.delimiterfactor,  
                       TeX.integer*(2*delta-TeX.delimitershortfall))/TeX.integer;  
     var left = this.mlist[0]; var right = this.mlist[this.mlist.length-1];  
     left.nuc = jsMath.Box.Delimiter(H,left.left,style);  
     right.nuc = jsMath.Box.Delimiter(H,right.right,style);  
     left.type = 'open'; left.atom = 1; delete left.left;  
     right.type = 'close'; right.atom = 1; delete right.right;  
   },  
     
   /*  
    *  Typeset a math list to produce final HTML for the list.  
    */  
   Typeset: function (style,size) {  
     var typeset = new jsMath.Typeset(this.mlist);  
     return typeset.Typeset(style,size);  
   }  
   
 });  
   
   
 /*  
  *  These routines implement the main rules given in Appendix G of the  
  *  TeXbook  
  */  
   
 jsMath.Add(jsMath.mList.prototype.Atomize,{  
   
   /*  
    *  Handle a 4-way choice atom.  (Rule 4)  
    */  
   choice: function (style,mitem,i,mlist) {  
     if (style.charAt(style.length-1) == "'") {style = style.slice(0,style.length-1)}  
     var nlist = []; var M = mitem[style]; if (!M) {M = {type: 'mlist', mlist: []}}  
     if (M.type == 'mlist') {  
       M = M.mlist.mlist;  
       for (var k = 0; k < i; k++) {nlist[k] = mlist[k]}  
       for (k = 0; k < M.length; k++) {nlist[i+k] = M[k]}  
       for (k = i+1; k < mlist.length; k++) {nlist[nlist.length] = mlist[k]}  
       return nlist;  
     } else {  
       mlist[i] = jsMath.mItem.Atom('ord',M);  
       return mlist;  
     }  
   },  
     
   /*  
    *  Handle \displaystyle, \textstyle, etc.  
    */  
   style: function (style,size,mitem,prev,mlist) {  
     mlist.style = mitem.style;  
   },  
     
   /*  
    *  Handle \tiny, \small, etc.  
    */  
   size: function (style,size,mitem,prev,mlist) {  
     mlist.size = mitem.size;  
   },  
     
   /*  
    *  Create empty boxes of the proper sizes for the various  
    *  phantom-type commands  
    */  
   phantom: function (style,size,mitem) {  
     var box = mitem.nuc = jsMath.Box.Set(mitem.phantom,style,size);  
     if (mitem.h) {box.Remeasured(); box.html = jsMath.HTML.Spacer(box.w)}  
       else {box.html = '', box.w = 0}  
     if (!mitem.v) {box.h = box.d = 0}  
     box.bd = box.bh = 0;  
     delete mitem.phantom;  
     mitem.type = 'box';  
   },  
     
   /*  
    *  Create a box of zero height and depth containing the  
    *  contents of the atom  
    */  
   smash: function (style,size,mitem) {  
     var box = mitem.nuc = jsMath.Box.Set(mitem.smash,style,size).Remeasured();  
     box.h = box.d = box.bd = box.bh = 0;  
     delete mitem.smash;  
     mitem.type = 'box';  
   },  
   
   /*  
    *  Move a box up or down vertically  
    */  
   raise: function (style,size,mitem) {  
     mitem.nuc = jsMath.Box.Set(mitem.nuc,style,size);  
     var y = mitem.raise;  
     mitem.nuc.html = jsMath.HTML.Place(mitem.nuc.html,0,y);  
     mitem.nuc.h += y; mitem.nuc.d -= y;  
     mitem.type = 'ord'; mitem.atom = 1;  
   },  
   
   /*  
    *  Hide the size of a box so that it laps to the left or right, or  
    *  up or down.  
    */  
   lap: function (style,size,mitem) {  
     var box = jsMath.Box.Set(mitem.nuc,style,size).Remeasured();  
     var mlist = [box];  
     if (mitem.lap == 'llap') {box.x = -box.w} else  
     if (mitem.lap == 'rlap') {mlist[1] = jsMath.mItem.Space(-box.w)} else  
     if (mitem.lap == 'ulap') {box.y = box.d; box.h = box.d = 0} else  
     if (mitem.lap == 'dlap') {box.y = -box.h; box.h = box.d = 0}  
     mitem.nuc = jsMath.Box.SetList(mlist,style,size);  
     if (mitem.lap == 'ulap' || mitem.lap == 'dlap') {mitem.nuc.h = mitem.nuc.d = 0}  
     mitem.type = 'box'; delete mitem.atom;  
   },  
   
   /*  
    *  Handle a Bin atom. (Rule 5)  
    */  
   bin: function (style,size,mitem,prev) {  
     if (prev) {  
       var type  = prev.type;  
       if (type == 'bin' || type == 'op' || type == 'rel' ||  
           type == 'open' || type == 'punct' || type == '' ||  
           (type == 'boundary' && prev.left != '')) {mitem.type = 'ord'}  
     } else {mitem.type = 'ord'}  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle a Rel atom.  (Rule 6)  
    */  
   rel: function (style,size,mitem,prev) {  
     if (prev.type == 'bin') {prev.type = 'ord'}  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle a Close atom.  (Rule 6)  
    */  
   close: function (style,size,mitem,prev) {  
     if (prev.type == 'bin') {prev.type = 'ord'}  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle a Punct atom.  (Rule 6)  
    */  
   punct: function (style,size,mitem,prev) {  
     if (prev.type == 'bin') {prev.type = 'ord'}  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle an Open atom.  (Rule 7)  
    */  
   open: function (style,size,mitem) {  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle an Inner atom.  (Rule 7)  
    */  
   inner: function (style,size,mitem) {  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle a Vcent atom.  (Rule 8)  
    */  
   vcenter: function (style,size,mitem) {  
     var box = jsMath.Box.Set(mitem.nuc,style,size);  
     var TeX = jsMath.Typeset.TeX(style,size);  
     box.y = TeX.axis_height - (box.h-box.d)/2;  
     mitem.nuc = box; mitem.type = 'ord';  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle an Over atom.  (Rule 9)  
    */  
   overline: function (style,size,mitem) {  
     var TeX = jsMath.Typeset.TeX(style,size);  
     var box = jsMath.Box.Set(mitem.nuc,jsMath.Typeset.PrimeStyle(style),size).Remeasured();  
     var t = TeX.default_rule_thickness;  
     var rule = jsMath.Box.Rule(box.w,t);  
     rule.x = -rule.w; rule.y = box.h + 3*t;  
     mitem.nuc = jsMath.Box.SetList([box,rule],style,size);  
     mitem.nuc.h += t;  
     mitem.type = 'ord';  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle an Under atom.  (Rule 10)  
    */  
   underline: function (style,size,mitem) {  
     var TeX = jsMath.Typeset.TeX(style,size);  
     var box = jsMath.Box.Set(mitem.nuc,jsMath.Typeset.PrimeStyle(style),size).Remeasured();  
     var t = TeX.default_rule_thickness;  
     var rule = jsMath.Box.Rule(box.w,t);  
     rule.x = -rule.w; rule.y = -box.d - 3*t - t;  
     mitem.nuc = jsMath.Box.SetList([box,rule],style,size);  
     mitem.nuc.d += t;  
     mitem.type = 'ord';  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle a Rad atom.  (Rule 11 plus stuff for \root..\of)  
    */  
   radical: function (style,size,mitem) {  
     var TeX = jsMath.Typeset.TeX(style,size);  
     var Cp = jsMath.Typeset.PrimeStyle(style);  
     var box = jsMath.Box.Set(mitem.nuc,Cp,size).Remeasured();  
     var t = TeX.default_rule_thickness;  
     var p = t; if (style == 'D' || style == "D'") {p = TeX.x_height}  
     var r = t + p/4;   
     var surd = jsMath.Box.Delimiter(box.h+box.d+r+t,[0,2,0x70,3,0x70],style,1);  
     t = surd.h; // thickness of rule is height of surd character  
     if (surd.d > box.h+box.d+r) {r = (r+surd.d-box.h-box.d)/2}  
     surd.y = box.h+r;  
     var rule = jsMath.Box.Rule(box.w,t);  
     rule.y = surd.y-t/2; rule.h += 3*t/2; box.x = -box.w;  
     var Cr = jsMath.Typeset.UpStyle(jsMath.Typeset.UpStyle(style));  
     var root = jsMath.Box.Set(mitem.root,Cr,size).Remeasured();  
     if (mitem.root) {  
       root.y = .55*(box.h+box.d+3*t+r)-box.d;  
       surd.x = Math.max(root.w-(11/18)*surd.w,0);  
       rule.x = (7/18)*surd.w;  
       root.x = -(root.w+rule.x);  
     }  
     mitem.nuc = jsMath.Box.SetList([surd,root,rule,box],style,size);  
     mitem.type = 'ord';  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle an Acc atom.  (Rule 12)  
    */  
   accent: function (style,size,mitem) {  
     var TeX = jsMath.Typeset.TeX(style,size);  
     var Cp = jsMath.Typeset.PrimeStyle(style);  
     var box = jsMath.Box.Set(mitem.nuc,Cp,size);  
     var u = box.w; var s; var Font;  
     if (mitem.nuc.type == 'TeX') {  
       Font = jsMath.TeX[mitem.nuc.font];  
       if (Font[mitem.nuc.c].krn && Font.skewchar)  
         {s = Font[mitem.nuc.c].krn[Font.skewchar]}  
     }  
     if (s == null) {s = 0}  
       
     var c = mitem.accent[2];  
     var font = jsMath.TeX.fam[mitem.accent[1]]; Font = jsMath.TeX[font];  
     while (Font[c].n && Font[Font[c].n].w <= u) {c = Font[c].n}  
       
     var delta = Math.min(box.h,TeX.x_height);  
     if (mitem.nuc.type == 'TeX') {  
       var nitem = jsMath.mItem.Atom('ord',mitem.nuc);  
       nitem.sup = mitem.sup; nitem.sub = mitem.sub; nitem.delta = 0;  
       jsMath.mList.prototype.Atomize.SupSub(style,size,nitem);  
       delta += (nitem.nuc.h - box.h);  
       box = mitem.nuc = nitem.nuc;  
       delete mitem.sup; delete mitem.sub;  
     }  
     var acc = jsMath.Box.TeX(c,font,style,size);  
     acc.y = box.h - delta; acc.x = -box.w + s + (u-acc.w)/2;  
     if (Font[c].ic) {acc.x -= Font[c].ic * TeX.scale}  
   
     mitem.nuc = jsMath.Box.SetList([box,acc],style,size);  
     if (mitem.nuc.w != box.w) {  
       var space = jsMath.mItem.Space(box.w-mitem.nuc.w);  
       mitem.nuc = jsMath.Box.SetList([mitem.nuc,space],style,size);  
     }  
     mitem.type = 'ord';  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle an Op atom.  (Rules 13 and 13a)  
    */  
   op: function (style,size,mitem) {  
     var TeX = jsMath.Typeset.TeX(style,size); var box;  
     mitem.delta = 0; var isD = (style.charAt(0) == 'D');  
     if (mitem.limits == null && isD) {mitem.limits = 1}  
   
     if (mitem.nuc.type == 'TeX') {  
       var C = jsMath.TeX[mitem.nuc.font][mitem.nuc.c];  
       if (isD && C.n) {mitem.nuc.c = C.n; C = jsMath.TeX[mitem.nuc.font][C.n]}  
       box = jsMath.Box.Set(mitem.nuc,style,size);  
       if (C.ic) {  
         mitem.delta = C.ic * TeX.scale;  
         if (mitem.limits || !mitem.sub || jsMath.Browser.msieIntegralBug)   
           {box = jsMath.Box.SetList([box,jsMath.mItem.Space(mitem.delta)],style,size)}  
       }  
       box.y = -((box.h+box.d)/2 - box.d - TeX.axis_height);  
       if (Math.abs(box.y) < .0001) {box.y = 0}  
     }  
   
     if (!box) {box = jsMath.Box.Set(mitem.nuc,style,size).Remeasured()}  
     if (mitem.limits) {  
       var W = box.w; var x = box.w;  
       var mlist = [box]; var dh = 0; var dd = 0;  
       if (mitem.sup) {  
         var sup = jsMath.Box.Set(mitem.sup,jsMath.Typeset.UpStyle(style),size).Remeasured();  
         sup.x = ((box.w-sup.w)/2 + mitem.delta/2) - x; dh = TeX.big_op_spacing5;  
         W = Math.max(W,sup.w); x += sup.x + sup.w;  
         sup.y = box.h+sup.d + box.y +  
                     Math.max(TeX.big_op_spacing1,TeX.big_op_spacing3-sup.d);  
         mlist[mlist.length] = sup; delete mitem.sup;  
       }  
       if (mitem.sub) {  
         var sub = jsMath.Box.Set(mitem.sub,jsMath.Typeset.DownStyle(style),size).Remeasured();  
         sub.x = ((box.w-sub.w)/2 - mitem.delta/2) - x; dd = TeX.big_op_spacing5;  
         W = Math.max(W,sub.w); x += sub.x + sub.w;  
         sub.y = -box.d-sub.h + box.y -  
                    Math.max(TeX.big_op_spacing2,TeX.big_op_spacing4-sub.h);  
         mlist[mlist.length] = sub; delete mitem.sub;  
       }  
       if (W > box.w) {box.x = (W-box.w)/2; x += box.x}  
       if (x < W) {mlist[mlist.length] = jsMath.mItem.Space(W-x)}  
       mitem.nuc = jsMath.Box.SetList(mlist,style,size);  
       mitem.nuc.h += dh; mitem.nuc.d += dd;  
     } else {  
       if (jsMath.Browser.msieIntegralBug && mitem.sub && C && C.ic)   
         {mitem.nuc = jsMath.Box.SetList([box,jsMath.Box.Space(-C.ic*TeX.scale)],style,size)}  
       else if (box.y) {mitem.nuc = jsMath.Box.SetList([box],style,size)}  
       jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
     }  
   },  
   
   /*  
    *  Handle an Ord atom.  (Rule 14)  
    */  
   ord: function (style,size,mitem,prev,mList,i) {  
     if (mitem.nuc.type == 'TeX' && !mitem.sup && !mitem.sub) {  
       var nitem = mList.mlist[i+1];  
       if (nitem && nitem.atom && nitem.type &&  
           (nitem.type == 'ord' || nitem.type == 'op' || nitem.type == 'bin' ||  
            nitem.type == 'rel' || nitem.type == 'open' ||  
            nitem.type == 'close' || nitem.type == 'punct')) {  
         if (nitem.nuc.type == 'TeX' && nitem.nuc.font == mitem.nuc.font) {  
           mitem.textsymbol = 1;  
           var krn = jsMath.TeX[mitem.nuc.font][mitem.nuc.c].krn;  
           krn *= jsMath.Typeset.TeX(style,size).scale;  
           if (krn && krn[nitem.nuc.c]) {  
             for (var k = mList.mlist.length-1; k > i; k--)  
               {mList.mlist[k+1] = mList.mlist[k]}  
             mList.mlist[i+1] = jsMath.mItem.Space(krn[nitem.nuc.c]);  
           }  
         }  
       }  
     }  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Handle a generalized fraction.  (Rules 15 to 15e)  
    */  
   fraction: function (style,size,mitem) {  
     var TeX = jsMath.Typeset.TeX(style,size); var t = 0;  
     if (mitem.thickness != null) {t = mitem.thickness}  
     else if (mitem.from.match(/over/)) {t = TeX.default_rule_thickness}  
     var isD = (style.charAt(0) == 'D');  
     var Cn = (style == 'D')? 'T': (style == "D'")? "T'": jsMath.Typeset.UpStyle(style);  
     var Cd = (isD)? "T'": jsMath.Typeset.DownStyle(style);  
     var num = jsMath.Box.Set(mitem.num,Cn,size).Remeasured();  
     var den = jsMath.Box.Set(mitem.den,Cd,size).Remeasured();  
   
     var u; var v; var w;  
     var H = (isD)? TeX.delim1 : TeX.delim2;  
     var mlist = [jsMath.Box.Delimiter(H,mitem.left,style)]  
     var right = jsMath.Box.Delimiter(H,mitem.right,style);  
   
     if (num.w < den.w) {  
       num.x = (den.w-num.w)/2;  
       den.x = -(num.w + num.x);  
       w = den.w; mlist[1] = num; mlist[2] = den;  
     } else {  
       den.x = (num.w-den.w)/2;  
       num.x = -(den.w + den.x);  
       w = num.w; mlist[1] = den; mlist[2] = num;  
     }  
     if (isD) {u = TeX.num1; v = TeX.denom1} else {  
       u = (t != 0)? TeX.num2: TeX.num3;  
       v = TeX.denom2;  
     }  
     if (t == 0) {// atop  
       var p = (isD)? 7*TeX.default_rule_thickness: 3*TeX.default_rule_thickness;  
       var r = (u - num.d) - (den.h - v);  
       if (r < p) {u += (p-r)/2; v += (p-r)/2}  
     } else {// over  
       var p = (isD)? 3*t: t; var a = TeX.axis_height;  
       var r = (u-num.d)-(a+t/2); if (r < p) {u += p-r}  
           r = (a-t/2)-(den.h-v); if (r < p) {v += p-r}  
       var rule = jsMath.Box.Rule(w,t); rule.x = -w; rule.y = a - t/2;  
       mlist[mlist.length] = rule;  
     }  
     num.y = u; den.y = -v;  
   
     mlist[mlist.length] = right;  
     mitem.nuc = jsMath.Box.SetList(mlist,style,size);  
     mitem.type = 'ord'; mitem.atom = 1;  
     delete mitem.num; delete mitem.den;  
     jsMath.mList.prototype.Atomize.SupSub(style,size,mitem);  
   },  
   
   /*  
    *  Add subscripts and superscripts.  (Rules 17-18f)  
    */  
   SupSub: function (style,size,mitem) {  
     var TeX = jsMath.Typeset.TeX(style,size);  
     var nuc = mitem.nuc;  
     var box = mitem.nuc = jsMath.Box.Set(mitem.nuc,style,size,0);  
     if (box.format == 'null')   
       {box = mitem.nuc = jsMath.Box.Text('','normal',style,size)}  
   
     if (nuc.type == 'TeX') {  
       if (!mitem.textsymbol) {  
         var C = jsMath.TeX[nuc.font][nuc.c];  
         if (C.ic) {  
           mitem.delta = C.ic * TeX.scale;  
           if (!mitem.sub) {  
             box = mitem.nuc = jsMath.Box.SetList([box,jsMath.Box.Space(mitem.delta)],style,size);  
             mitem.delta = 0;  
           }  
         }  
       } else {mitem.delta = 0}  
     }  
   
     if (!mitem.sup && !mitem.sub) return;  
     mitem.nuc.Styled();  
       
     var Cd = jsMath.Typeset.DownStyle(style);  
     var Cu = jsMath.Typeset.UpStyle(style);  
     var q = jsMath.Typeset.TeX(Cu,size).sup_drop;  
     var r = jsMath.Typeset.TeX(Cd,size).sub_drop;  
     var u = 0; var v = 0; var p;  
     if (nuc.type != 'text' && nuc.type != 'TeX' && nuc.type != 'null')  
       {u = box.h - q; v = box.d + r}  
   
     if (mitem.sub) {  
       var sub = jsMath.Box.Set(mitem.sub,Cd,size);  
       sub = jsMath.Box.SetList([sub,jsMath.mItem.Space(TeX.scriptspace)],style,size);  
     }  
   
     if (!mitem.sup) {  
       sub.y = -Math.max(v,TeX.sub1,sub.h-(4/5)*jsMath.Typeset.TeX(Cd,size).x_height);  
       mitem.nuc = jsMath.Box.SetList([box,sub],style,size).Styled(); delete mitem.sub;  
       return;  
     }  
   
     var sup = jsMath.Box.Set(mitem.sup,Cu,size);  
     sup = jsMath.Box.SetList([sup,jsMath.mItem.Space(TeX.scriptspace)],style,size);  
     if (style == 'D') {p = TeX.sup1}  
     else if (style.charAt(style.length-1) == "'") {p = TeX.sup3}  
     else {p = TeX.sup2}  
     u = Math.max(u,p,sup.d+jsMath.Typeset.TeX(Cu,size).x_height/4);  
   
     if (!mitem.sub) {  
       sup.y = u;  
       mitem.nuc = jsMath.Box.SetList([box,sup],style,size); delete mitem.sup;  
       return;  
     }  
   
     v = Math.max(v,jsMath.Typeset.TeX(Cd,size).sub2);  
     var t = TeX.default_rule_thickness;  
     if ((u-sup.d) - (sub.h -v) < 4*t) {  
       v = 4*t + sub.h - (u-sup.d);  
       p = (4/5)*TeX.x_height - (u-sup.d);  
       if (p > 0) {u += p; v -= p}  
     }  
     sup.Remeasured(); sub.Remeasured();  
     sup.y = u; sub.y = -v; sup.x = mitem.delta;  
     if (sup.w+sup.x > sub.w)  
       {sup.x -= sub.w; mitem.nuc = jsMath.Box.SetList([box,sub,sup],style,size)} else  
       {sub.x -= (sup.w+sup.x); mitem.nuc = jsMath.Box.SetList([box,sup,sub],style,size)}  
   
     delete mitem.sup; delete mitem.sub;  
   }  
   
 });  
   
   
 /***************************************************************************/  
   
 /*  
  *  The Typeset object handles most of the TeX-specific processing  
  */  
   
 jsMath.Typeset = function (mlist) {  
   this.type = 'typeset';  
   this.mlist = mlist;  
 }  
   
 jsMath.Add(jsMath.Typeset,{  
   
   /*  
    *  The "C-uparrow" style table (TeXbook, p. 441)  
    */  
   upStyle: {  
     D: "S", T: "S",  "D'": "S'", "T'": "S'",  
     S: "SS",  SS: "SS",  "S'": "SS'", "SS'": "SS'"  
   },  
   
   /*  
    *  The "C-downarrow" style table (TeXbook, p. 441)  
    */  
   downStyle: {  
     D: "S'", T: "S'",  "D'": "S'", "T'": "S'",  
     S: "SS'",  SS: "SS'",  "S'": "SS'", "SS'": "SS'"  
   },  
   
   /*  
    *  Get the various styles given the current style  
    *  (see TeXbook, p. 441)  
    */  
   UpStyle: function (style) {return this.upStyle[style]},  
   DownStyle: function (style) {return this.downStyle[style]},  
   PrimeStyle: function (style) {  
     if (style.charAt(style.length-1) == "'") {return style}  
     return style + "'"  
   },  
   
   /*  
    *  A value scaled to the appropriate size for scripts  
    */  
   StyleValue: function (style,v) {  
     if (style == "S" || style == "S'")   {return .7*v}  
     if (style == "SS" || style == "SS'") {return .5*v}  
     return v;  
   },  
     
   /*  
    *  Return the size associated with a given style and size  
    */  
   StyleSize: function (style,size) {  
     if      (style == "S" || style == "S'")   {size = Math.max(0,size-2)}  
     else if (style == "SS" || style == "SS'") {size = Math.max(0,size-4)}  
     return size;  
   },  
   
   /*  
    *  Return the font parameter table for the given style  
    */  
   TeX: function (style,size) {  
     if      (style == "S" || style == "S'")   {size = Math.max(0,size-2)}  
     else if (style == "SS" || style == "SS'") {size = Math.max(0,size-4)}  
     return jsMath.TeXparams[size];  
   },  
   
   
   /*  
    *  Add the CSS class for the given TeX style  
    */  
   AddStyle: function (style,size,html) {  
     if      (style == "S" || style == "S'")   {size = Math.max(0,size-2)}  
     else if (style == "SS" || style == "SS'") {size = Math.max(0,size-4)}  
     if (size != 4) {html = '<SPAN CLASS="size'+size+'">' + html + '</SPAN>'}  
     return html;  
   },  
   
   /*  
    *  Add the font class, if needed  
    */  
   AddClass: function (tclass,html) {  
     if (tclass != '' && tclass != 'normal') {html = jsMath.HTML.Class(tclass,html)}  
     return html;  
   }  
   
 });  
   
   
 jsMath.Package(jsMath.Typeset,{  
     
   /*  
    *  The spacing tables for inter-atom spacing  
    *  (See rule 20, and Chapter 18, p 170)  
    */  
   DTsep: {  
     ord: {op: 1, bin: 2, rel: 3, inner: 1},  
     op:  {ord: 1, op: 1, rel: 3, inner: 1},  
     bin: {ord: 2, op: 2, open: 2, inner: 2},  
     rel: {ord: 3, op: 3, open: 3, inner: 3},  
     open: {},  
     close: {op: 1, bin:2, rel: 3, inner: 1},  
     punct: {ord: 1, op: 1, rel: 1, open: 1, close: 1, punct: 1, inner: 1},  
     inner: {ord: 1, op: 1, bin: 2, rel: 3, open: 1, punct: 1, inner: 1}  
   },  
   
   SSsep: {  
     ord: {op: 1},  
     op:  {ord: 1, op: 1},  
     bin: {},  
     rel: {},  
     open: {},  
     close: {op: 1},  
     punct: {},  
     inner: {op: 1}  
   },  
   
   /*  
    *  The sizes used in the tables above  
    */  
   sepW: ['','thinmuskip','medmuskip','thickmuskip'],  
     
     
   /*  
    *  Find the amount of separation to use between two adjacent  
    *  atoms in the given style  
    */  
   GetSeparation: function (l,r,style) {  
     if (l && l.atom && r.atom) {  
       var table = this.DTsep; if (style.charAt(0) == "S") {table = this.SSsep}  
       var row = table[l.type];  
       if (row && row[r.type] != null) {return jsMath.TeX[this.sepW[row[r.type]]]}  
     }  
     return 0;  
   },  
   
   /*  
    *  Typeset an mlist (i.e., turn it into HTML).  
    *  Here, text items of the same class and style are combined  
    *  to reduce the number of <SPAN> tags used (though it is still  
    *  huge).  Spaces are combined, when possible.  
    *  ###  More needs to be done with that.  ###  
    *  The width of the final box is recomputed at the end, since  
    *  the final width is not necessarily the sum of the widths of  
    *  the individual parts (widths are in pixels, but the browsers  
    *  puts pieces together using sub-pixel accuracy).  
    */  
   Typeset: function (style,size) {  
     this.style = style; this.size = size; var unset = -10000  
     this.w = 0; this.h = unset; this.d = unset;  
     this.bh = this.h; this.bd = this.d;  
     this.tbuf = ''; this.tx = 0; this.tclass = '';  
     this.cbuf = ''; this.hbuf = ''; this.hx = 0;  
     var mitem = null; var prev; this.x = 0; this.dx = 0;  
   
     for (var i = 0; i < this.mlist.length; i++) {  
       prev = mitem; mitem = this.mlist[i];  
       switch (mitem.type) {  
   
         case 'size':  
           this.FlushClassed();  
           this.size = mitem.size;  
           mitem = prev; // hide this from TeX  
           break;  
   
         case 'style':  
           this.FlushClassed();  
           if (this.style.charAt(this.style.length-1) == "'")  
             {this.style = mitem.style + "'"} else {this.style = mitem.style}  
           mitem = prev; // hide this from TeX  
           break;  
   
         case 'space':  
           if (typeof(mitem.w) == 'object') {  
             if (this.style.charAt(1) == 'S') {mitem.w = .5*mitem.w[0]/18}  
             else if (this.style.charAt(0) == 'S') {mitem.w = .7*mitem.w[0]/18}  
             else {mitem.w = mitem.w[0]/18}  
           }  
           this.dx += mitem.w-0; // mitem.w is sometimes a string?  
           mitem = prev; // hide this from TeX  
           break;  
             
         case 'html':  
           this.FlushClassed();  
           if (this.hbuf == '') {this.hx = this.x}  
           this.hbuf += mitem.html;  
           mitem = prev; // hide this from TeX  
           break;  
             
         default:   // atom  
           if (!mitem.atom && mitem.type != 'box') break;  
           mitem.nuc.x += this.dx + this.GetSeparation(prev,mitem,this.style);  
           if (mitem.nuc.y || mitem.nuc.x) mitem.nuc.Styled();  
           this.dx = 0; this.x = this.x + this.w;  
           this.w += mitem.nuc.w + mitem.nuc.x;  
           if (mitem.nuc.format == 'text') {  
             if (this.tclass != mitem.nuc.tclass && this.tclass != '') this.FlushText();  
             if (this.tbuf == '' && this.cbuf == '') {this.tx = this.x}  
             this.tbuf += mitem.nuc.html; this.tclass = mitem.nuc.tclass;  
           } else  {  
             this.FlushClassed();  
             if (mitem.nuc.x || mitem.nuc.y) this.Place(mitem.nuc);  
             if (this.hbuf == '') {this.hx = this.x}  
             this.hbuf += mitem.nuc.html;  
           }  
           this.h = Math.max(this.h,mitem.nuc.h+mitem.nuc.y); this.bh = Math.max(this.bh,mitem.nuc.bh);  
           this.d = Math.max(this.d,mitem.nuc.d-mitem.nuc.y); this.bd = Math.max(this.bd,mitem.nuc.bd);  
           break;  
       }  
     }  
       
     this.FlushClassed(); // make sure scaling is included  
     if (this.dx) {this.hbuf += jsMath.HTML.Spacer(this.dx); this.w += this.dx}  
     if (this.hbuf == '') {return jsMath.Box.Null}  
     if (this.h == unset) {this.h = 0}  
     if (this.d == unset) {this.d = 0}  
     var box = new jsMath.Box('html',this.hbuf,this.w,this.h,this.d);  
     box.bh = this.bh; box.bd = this.bd;  
     return box;  
   },  
   
   /*  
    *  Add the font to the buffered text and move it to the  
    *  classed-text buffer.  
    */  
   FlushText: function () {  
     if (this.tbuf == '') return;  
     this.cbuf += jsMath.Typeset.AddClass(this.tclass,this.tbuf);  
     this.tbuf = ''; this.tclass = '';  
   },  
   
   /*  
    *  Add the script or scriptscript style to the text and  
    *  move it to the HTML buffer  
    */  
   FlushClassed: function () {  
     this.FlushText();  
     if (this.cbuf == '') return;  
     if (this.hbuf == '') {this.hx = this.tx}  
     this.hbuf += jsMath.Typeset.AddStyle(this.style,this.size,this.cbuf);  
     this.cbuf = '';  
   },  
   
   /*  
    *  Add a <SPAN> to position an item's HTML, and  
    *  adjust the item's height and depth.  
    *  (This may be replaced buy one of the following browser-specific  
    *   versions by Browser.Init().)  
    */  
   Place: function (item) {  
     var html = '<SPAN STYLE="position: relative;';  
     if (item.x) {html += ' margin-left:'+jsMath.HTML.Em(item.x)+';'}  
     if (item.y) {html += ' top:'+jsMath.HTML.Em(-item.y)+';'}  
     item.html = html + '">' + item.html + '</SPAN>';  
     item.h += item.y; item.d -= item.y;  
     item.x = 0; item.y = 0;  
   },  
     
   /*  
    *  For MSIE on Windows, backspacing must be done in a separate  
    *  <SPAN>, otherwise the contents will be clipped.  Netscape  
    *  also doesn't combine vertical and horizontal spacing well.  
    *  Here, the horizontal and vertical spacing are done separately.  
    */  
   PlaceSeparateSkips: function (item) {  
     if (item.y) {  
       if (item.html.match(/^<IMG[^>]*>(<SPAN STYLE="margin-left: [-0-9.]*em"><\/SPAN>)?$/i) && !item.html.match(/top:/)) {  
         item.html = item.html.replace(/STYLE="/,  
             'STYLE="position:relative; top:'+jsMath.HTML.Em(-item.y)+';');  
       } else {  
         item.html = '<SPAN STYLE="position: relative; '  
                        + 'top:'+jsMath.HTML.Em(-item.y)+';'  
                        + '">' + item.html + '</SPAN>'  
       }  
     }  
     if (item.x)   
       {item.html = jsMath.Browser.msieSpaceFix  
                        + '<SPAN STYLE="margin-left:'  
                        +    jsMath.HTML.Em(item.x-jsMath.Browser.spaceWidth)+';">'  
                        + jsMath.Browser.hiddenSpace + '</SPAN>' + item.html}  
     item.h += item.y; item.d -= item.y;  
     item.x = 0; item.y = 0;  
   }  
     
 });  
   
   
   
 /***************************************************************************/  
   
 /*  
  *  The Parse object handles the parsing of the TeX input string, and creates  
  *  the mList to be typeset by the Typeset object above.  
  */  
   
 jsMath.Parse = function (s,font,size,style) {  
   var parse = new jsMath.Parser(s,font,size,style);  
   parse.Parse();  
   return parse;  
 }  
   
 jsMath.Parser = function (s,font,size,style) {  
   this.string = s; this.i = 0;  
   this.mlist = new jsMath.mList(null,font,size,style);  
 }  
   
 jsMath.Package(jsMath.Parser,{  
     
   // special characters  
   cmd:   '\\',  
   open:  '{',  
   close: '}',  
   
   // patterns for letters and numbers  
   letter:  /[a-z]/i,  
   number:  /[0-9]/,  
     
   //  the \mathchar definitions (see Appendix B of the TeXbook).  
   mathchar: {  
     '!': [5,0,0x21],  
     '(': [4,0,0x28],  
     ')': [5,0,0x29],  
     '*': [2,2,0x03], // \ast  
     '+': [2,0,0x2B],  
     ',': [6,1,0x3B],  
     '-': [2,2,0x00],  
     '.': [0,1,0x3A],  
     '/': [0,1,0x3D],  
     ':': [3,0,0x3A],  
     ';': [6,0,0x3B],  
     '<': [3,1,0x3C],  
     '=': [3,0,0x3D],  
     '>': [3,1,0x3E],  
     '?': [5,0,0x3F],  
     '[': [4,0,0x5B],  
     ']': [5,0,0x5D],  
 //  '{': [4,2,0x66],  
 //  '}': [5,2,0x67],  
     '|': [0,2,0x6A]  
   },  
   
   //  handle special \catcode characters  
   special: {  
     '^':   'HandleSuperscript',  
     '_':   'HandleSubscript',  
     ' ':   'Space',  
     "\t":  'Space',  
     "\r":  'Space',  
     "\n":  'Space',  
     "'":   'Prime',  
     '%':   'HandleComment',  
     '&':   'HandleEntry'  
   },  
   
   // the \mathchardef table (see Appendix B of the TeXbook).  
   mathchardef: {  
   // brace parts  
     braceld:      [0,3,0x7A],  
     bracerd:      [0,3,0x7B],  
     bracelu:      [0,3,0x7C],  
     braceru:      [0,3,0x7D],  
   
   // Greek letters  
     alpha:        [0,1,0x0B],  
     beta:         [0,1,0x0C],  
     gamma:        [0,1,0x0D],  
     delta:        [0,1,0x0E],  
     epsilon:      [0,1,0x0F],  
     zeta:         [0,1,0x10],  
     eta:          [0,1,0x11],  
     theta:        [0,1,0x12],  
     iota:         [0,1,0x13],  
     kappa:        [0,1,0x14],  
     lambda:       [0,1,0x15],  
     mu:           [0,1,0x16],  
     nu:           [0,1,0x17],  
     xi:           [0,1,0x18],  
     pi:           [0,1,0x19],  
     rho:          [0,1,0x1A],  
     sigma:        [0,1,0x1B],  
     tau:          [0,1,0x1C],  
     upsilon:      [0,1,0x1D],  
     phi:          [0,1,0x1E],  
     chi:          [0,1,0x1F],  
     psi:          [0,1,0x20],  
     omega:        [0,1,0x21],  
     varepsilon:   [0,1,0x22],  
     vartheta:     [0,1,0x23],  
     varpi:        [0,1,0x24],  
     varrho:       [0,1,0x25],  
     varsigma:     [0,1,0x26],  
     varphi:       [0,1,0x27],  
       
     Gamma:        [7,0,0x00],  
     Delta:        [7,0,0x01],  
     Theta:        [7,0,0x02],  
     Lambda:       [7,0,0x03],  
     Xi:           [7,0,0x04],  
     Pi:           [7,0,0x05],  
     Sigma:        [7,0,0x06],  
     Upsilon:      [7,0,0x07],  
     Phi:          [7,0,0x08],  
     Psi:          [7,0,0x09],  
     Omega:        [7,0,0x0A],  
   
   // Ord symbols  
     aleph:        [0,2,0x40],  
     imath:        [0,1,0x7B],  
     jmath:        [0,1,0x7C],  
     ell:          [0,1,0x60],  
     wp:           [0,1,0x7D],  
     Re:           [0,2,0x3C],  
     Im:           [0,2,0x3D],  
     partial:      [0,1,0x40],  
     infty:        [0,2,0x31],  
     prime:        [0,2,0x30],  
     emptyset:     [0,2,0x3B],  
     nabla:        [0,2,0x72],  
     surd:         [1,2,0x70],  
     top:          [0,2,0x3E],  
     bot:          [0,2,0x3F],  
     triangle:     [0,2,0x34],  
     forall:       [0,2,0x38],  
     exists:       [0,2,0x39],  
     neg:          [0,2,0x3A],  
     lnot:         [0,2,0x3A],  
     flat:         [0,1,0x5B],  
     natural:      [0,1,0x5C],  
     sharp:        [0,1,0x5D],  
     clubsuit:     [0,2,0x7C],  
     diamondsuit:  [0,2,0x7D],  
     heartsuit:    [0,2,0x7E],  
     spadesuit:    [0,2,0x7F],  
   
   // big ops  
     coprod:      [1,3,0x60],  
     bigvee:      [1,3,0x57],  
     bigwedge:    [1,3,0x56],  
     biguplus:    [1,3,0x55],  
     bigcap:      [1,3,0x54],  
     bigcup:      [1,3,0x53],  
     intop:       [1,3,0x52],   
     prod:        [1,3,0x51],  
     sum:         [1,3,0x50],  
     bigotimes:   [1,3,0x4E],  
     bigoplus:    [1,3,0x4C],  
     bigodot:     [1,3,0x4A],  
     ointop:      [1,3,0x48],  
     bigsqcup:    [1,3,0x46],  
     smallint:    [1,2,0x73],  
   
   // binary operations  
     triangleleft:      [2,1,0x2F],  
     triangleright:     [2,1,0x2E],  
     bigtriangleup:     [2,2,0x34],  
     bigtriangledown:   [2,2,0x35],  
     wedge:       [2,2,0x5E],  
     land:        [2,2,0x5E],  
     vee:         [2,2,0x5F],  
     lor:         [2,2,0x5F],  
     cap:         [2,2,0x5C],  
     cup:         [2,2,0x5B],  
     ddagger:     [2,2,0x7A],  
     dagger:      [2,2,0x79],  
     sqcap:       [2,2,0x75],  
     sqcup:       [2,2,0x74],  
     uplus:       [2,2,0x5D],  
     amalg:       [2,2,0x71],  
     diamond:     [2,2,0x05],  
     bullet:      [2,2,0x0F],  
     wr:          [2,2,0x6F],  
     div:         [2,2,0x04],  
     odot:        [2,2,0x0C],  
     oslash:      [2,2,0x0B],  
     otimes:      [2,2,0x0A],  
     ominus:      [2,2,0x09],  
     oplus:       [2,2,0x08],  
     mp:          [2,2,0x07],  
     pm:          [2,2,0x06],  
     circ:        [2,2,0x0E],  
     bigcirc:     [2,2,0x0D],  
     setminus:    [2,2,0x6E], // for set difference A\setminus B  
     cdot:        [2,2,0x01],  
     ast:         [2,2,0x03],  
     times:       [2,2,0x02],  
     star:        [2,1,0x3F],  
   
   // Relations  
     propto:      [3,2,0x2F],  
     sqsubseteq:  [3,2,0x76],  
     sqsupseteq:  [3,2,0x77],  
     parallel:    [3,2,0x6B],  
     mid:         [3,2,0x6A],  
     dashv:       [3,2,0x61],  
     vdash:       [3,2,0x60],  
     leq:         [3,2,0x14],  
     le:          [3,2,0x14],  
     geq:         [3,2,0x15],  
     ge:          [3,2,0x15],  
     succ:        [3,2,0x1F],  
     prec:        [3,2,0x1E],  
     approx:      [3,2,0x19],  
     succeq:      [3,2,0x17],  
     preceq:      [3,2,0x16],  
     supset:      [3,2,0x1B],  
     subset:      [3,2,0x1A],  
     supseteq:    [3,2,0x13],  
     subseteq:    [3,2,0x12],  
     'in':        [3,2,0x32],  
     ni:          [3,2,0x33],  
     owns:        [3,2,0x33],  
     gg:          [3,2,0x1D],  
     ll:          [3,2,0x1C],  
     not:         [3,2,0x36],  
     sim:         [3,2,0x18],  
     simeq:       [3,2,0x27],  
     perp:        [3,2,0x3F],  
     equiv:       [3,2,0x11],  
     asymp:       [3,2,0x10],  
     smile:       [3,1,0x5E],  
     frown:       [3,1,0x5F],  
   
   // Arrows  
     Leftrightarrow:   [3,2,0x2C],  
     Leftarrow:        [3,2,0x28],  
     Rightarrow:       [3,2,0x29],  
     leftrightarrow:   [3,2,0x24],  
     leftarrow:        [3,2,0x20],  
     gets:             [3,2,0x20],  
     rightarrow:       [3,2,0x21],  
     to:               [3,2,0x21],  
     mapstochar:       [3,2,0x37],  
     leftharpoonup:    [3,1,0x28],  
     leftharpoondown:  [3,1,0x29],  
     rightharpoonup:   [3,1,0x2A],  
     rightharpoondown: [3,1,0x2B],  
     nearrow:          [3,2,0x25],  
     searrow:          [3,2,0x26],  
     nwarrow:          [3,2,0x2D],  
     swarrow:          [3,2,0x2E],  
   
     hbarchar:   [0,0,0x16], // for \hbar  
     lhook:      [3,1,0x2C],  
     rhook:      [3,1,0x2D],  
   
     ldotp:      [6,1,0x3A], // ldot as a punctuation mark  
     cdotp:      [6,2,0x01], // cdot as a punctuation mark  
     colon:      [6,0,0x3A], // colon as a punctuation mark  
   
     '#':        [7,0,0x23],  
     '$':        [7,0,0x24],  
     '%':        [7,0,0x25],  
     '&':        [7,0,0x26]  
   },  
     
   // The delimiter table (see Appendix B of the TeXbook)  
   delimiter: {  
     '(':                [0,0,0x28,3,0x00],  
     ')':                [0,0,0x29,3,0x01],  
     '[':                [0,0,0x5B,3,0x02],  
     ']':                [0,0,0x5D,3,0x03],  
     '<':                [0,2,0x68,3,0x0A],  
     '>':                [0,2,0x69,3,0x0B],  
     '/':                [0,0,0x2F,3,0x0E],  
     '|':                [0,2,0x6A,3,0x0C],  
     '.':                [0,0,0x00,0,0x00],  
     '\\':               [0,2,0x6E,3,0x0F],  
     '\\lmoustache':     [4,3,0x7A,3,0x40],  // top from (, bottom from )  
     '\\rmoustache':     [5,3,0x7B,3,0x41],  // top from ), bottom from (  
     '\\lgroup':         [4,6,0x28,3,0x3A],  // extensible ( with sharper tips  
     '\\rgroup':         [5,6,0x29,3,0x3B],  // extensible ) with sharper tips  
     '\\arrowvert':      [0,2,0x6A,3,0x3C],  // arrow without arrowheads  
     '\\Arrowvert':      [0,2,0x6B,3,0x3D],  // double arrow without arrowheads  
 //  '\\bracevert':      [0,7,0x7C,3,0x3E],  // the vertical bar that extends braces  
     '\\bracevert':      [0,2,0x6A,3,0x3E],  // we don't load tt, so use | instead  
     '\\Vert':           [0,2,0x6B,3,0x0D],  
     '\\|':              [0,2,0x6B,3,0x0D],  
     '\\vert':           [0,2,0x6A,3,0x0C],  
     '\\uparrow':        [3,2,0x22,3,0x78],  
     '\\downarrow':      [3,2,0x23,3,0x79],  
     '\\updownarrow':    [3,2,0x6C,3,0x3F],  
     '\\Uparrow':        [3,2,0x2A,3,0x7E],  
     '\\Downarrow':      [3,2,0x2B,3,0x7F],  
     '\\Updownarrow':    [3,2,0x6D,3,0x77],  
     '\\backslash':      [0,2,0x6E,3,0x0F],  // for double coset G\backslash H  
     '\\rangle':         [5,2,0x69,3,0x0B],  
     '\\langle':         [4,2,0x68,3,0x0A],  
     '\\rbrace':         [5,2,0x67,3,0x09],  
     '\\lbrace':         [4,2,0x66,3,0x08],  
     '\\}':              [5,2,0x67,3,0x09],  
     '\\{':              [4,2,0x66,3,0x08],  
     '\\rceil':          [5,2,0x65,3,0x07],  
     '\\lceil':          [4,2,0x64,3,0x06],  
     '\\rfloor':         [5,2,0x63,3,0x05],  
     '\\lfloor':         [4,2,0x62,3,0x04]  
   },  
   
   /*  
    *  The basic macros for plain TeX.  
    *  
    *  When the control sequence on the left is called, the JavaScript  
    *  funtion on the right is called, with the name of the control sequence  
    *  as its first parameter (this way, the same function can be called by  
    *  several different control sequences to do similar actions, and the  
    *  function can still tell which TeX command was issued).  If the right  
    *  is an array, the first entry is the routine to call, and the  
    *  remaining entries in the array are parameters to pass to the function  
    *  as the second parameter (they are in an array reference).  
    *    
    *  Note:  TeX macros as defined by the user are discussed below.  
    */  
   macros: {  
     displaystyle:      ['HandleStyle','D'],  
     textstyle:         ['HandleStyle','T'],  
     scriptstyle:       ['HandleStyle','S'],  
     scriptscriptstyle: ['HandleStyle','SS'],  
       
     rm:                ['HandleFont',0],  
     mit:               ['HandleFont',1],  
     oldstyle:          ['HandleFont',1],  
     cal:               ['HandleFont',2],  
     it:                ['HandleFont',4],  
     bf:                ['HandleFont',6],  
       
     left:              'HandleLeft',  
     right:             'HandleRight',  
   
     arcsin:       ['NamedOp',0],  
     arccos:       ['NamedOp',0],  
     arctan:       ['NamedOp',0],  
     arg:          ['NamedOp',0],  
     cos:          ['NamedOp',0],  
     cosh:         ['NamedOp',0],  
     cot:          ['NamedOp',0],  
     coth:         ['NamedOp',0],  
     csc:          ['NamedOp',0],  
     deg:          ['NamedOp',0],  
     det:           'NamedOp',  
     dim:          ['NamedOp',0],  
     exp:          ['NamedOp',0],  
     gcd:           'NamedOp',  
     hom:          ['NamedOp',0],  
     inf:           'NamedOp',  
     ker:          ['NamedOp',0],  
     lg:           ['NamedOp',0],  
     lim:           'NamedOp',  
     liminf:       ['NamedOp',null,'lim<SPAN STYLE="margin-left: '+1/6+'em"></SPAN>inf'],  
     limsup:       ['NamedOp',null,'lim<SPAN STYLE="margin-left: '+1/6+'em"></SPAN>sup'],  
     ln:           ['NamedOp',0],  
     log:          ['NamedOp',0],  
     max:           'NamedOp',  
     min:           'NamedOp',  
     Pr:            'NamedOp',  
     sec:          ['NamedOp',0],  
     sin:          ['NamedOp',0],  
     sinh:         ['NamedOp',0],  
     sup:           'NamedOp',  
     tan:          ['NamedOp',0],  
     tanh:         ['NamedOp',0],  
   
     vcenter:        ['HandleAtom','vcenter'],  
     overline:       ['HandleAtom','overline'],  
     underline:      ['HandleAtom','underline'],  
     over:            'HandleOver',  
     overwithdelims:  'HandleOver',  
     atop:            'HandleOver',  
     atopwithdelims:  'HandleOver',  
     above:           'HandleOver',  
     abovewithdelims: 'HandleOver',  
     brace:           ['HandleOver','\\{','\\}'],  
     brack:           ['HandleOver','[',']'],  
     choose:          ['HandleOver','(',')'],  
       
     overbrace:       ['HandleLeaders','downbrace',1],  
     underbrace:      ['HandleLeaders','upbrace',1,1],  
     overrightarrow:  ['HandleLeaders','rightarrow'],  
     overleftarrow:   ['HandleLeaders','leftarrow'],  
   
     llap:            'HandleLap',  
     rlap:            'HandleLap',  
     ulap:            'HandleLap',  
     dlap:            'HandleLap',  
     raise:           'RaiseLower',  
     lower:           'RaiseLower',  
     moveleft:        'MoveLeftRight',  
     moveright:       'MoveLeftRight',  
   
     frac:            'Frac',  
     root:            'Root',  
     sqrt:            'Sqrt',  
   
     //  TeX substitution macros  
     hbar:               ['Macro','\\hbarchar\\kern-.5em h'],  
     ne:                 ['Macro','\\not='],  
     neq:                ['Macro','\\not='],  
     notin:              ['Macro','\\mathrel{\\rlap{\\kern2mu/}}\\in'],  
     cong:               ['Macro','\\mathrel{\\lower2mu{\\mathrel{{\\rlap{=}\\raise6mu\\sim}}}}'],  
     bmod:               ['Macro','\\mathbin{\\rm mod}'],  
     pmod:               ['Macro','\\kern 18mu ({\\rm mod}\\,\\,#1)',1],  
     'int':              ['Macro','\\intop\\nolimits'],  
     oint:               ['Macro','\\ointop\\nolimits'],  
     doteq:              ['Macro','\\buildrel\\textstyle.\\over='],  
     ldots:              ['Macro','\\mathinner{\\ldotp\\ldotp\\ldotp}'],  
     cdots:              ['Macro','\\mathinner{\\cdotp\\cdotp\\cdotp}'],  
     vdots:              ['Macro','\\mathinner{\\rlap{\\raise8pt{.\\rule 0pt 6pt 0pt}}\\rlap{\\raise4pt{.}}.}'],  
     ddots:              ['Macro','\\mathinner{\\kern1mu\\raise7pt{\\rule 0pt 7pt 0pt .}\\kern2mu\\raise4pt{.}\\kern2mu\\raise1pt{.}\\kern1mu}'],  
     joinrel:            ['Macro','\\mathrel{\\kern-4mu}'],  
     relbar:             ['Macro','\\mathrel{\\smash-}'], // \smash, because - has the same height as +  
     Relbar:             ['Macro','\\mathrel='],  
     bowtie:             ['Macro','\\mathrel\\triangleright\\joinrel\\mathrel\\triangleleft'],  
     models:             ['Macro','\\mathrel|\\joinrel='],  
     mapsto:             ['Macro','\\mapstochar\\rightarrow'],  
     rightleftharpoons:  ['Macro','\\vcenter{\\mathrel{\\rlap{\\raise3mu{\\rightharpoonup}}}\\leftharpoondown}'],  
     hookrightarrow:     ['Macro','\\lhook\\joinrel\\rightarrow'],  
     hookleftarrow:      ['Macro','\\leftarrow\\joinrel\\rhook'],  
     Longrightarrow:     ['Macro','\\Relbar\\joinrel\\Rightarrow'],  
     longrightarrow:     ['Macro','\\relbar\\joinrel\\rightarrow'],  
     longleftarrow:      ['Macro','\\leftarrow\\joinrel\\relbar'],  
     Longleftarrow:      ['Macro','\\Leftarrow\\joinrel\\Relbar'],  
     longmapsto:         ['Macro','\\mapstochar\\char{cmsy10}{0}\\joinrel\\rightarrow'],  
     longleftrightarrow: ['Macro','\\leftarrow\\joinrel\\rightarrow'],  
     Longleftrightarrow: ['Macro','\\Leftarrow\\joinrel\\Rightarrow'],  
     iff:                ['Macro','\\;\\Longleftrightarrow\\;'],  
     mathrm:             ['Macro','{\\rm #1}',1],  
     mathbf:             ['Macro','{\\bf #1}',1],  
     mathbb:             ['Macro','{\\bf #1}',1],  
     mathit:             ['Macro','{\\it #1}',1],  
   
     TeX:                ['Macro','T\\kern-.1667em\\lower.5ex{E}\\kern-.125em X'],  
   
     limits:       ['Limits',1],  
     nolimits:     ['Limits',0],  
   
     ',':          ['Spacer',1/6],  
     ':':          ['Spacer',1/6],  // for LaTeX  
     '>':          ['Spacer',2/9],  
     ';':          ['Spacer',5/18],  
     '!':          ['Spacer',-1/6],  
     enspace:      ['Spacer',1/2],  
     quad:         ['Spacer',1],  
     qquad:        ['Spacer',2],  
     thinspace:    ['Spacer',1/6],  
     negthinspace: ['Spacer',-1/6],  
       
     hskip:         'Hskip',  
     kern:          'Hskip',  
     rule:          ['Rule','colored'],  
     space:         ['Rule','blank'],  
       
     big:        ['MakeBig','ord',0.85],  
     Big:        ['MakeBig','ord',1.15],  
     bigg:       ['MakeBig','ord',1.45],  
     Bigg:       ['MakeBig','ord',1.75],  
     bigl:       ['MakeBig','open',0.85],  
     Bigl:       ['MakeBig','open',1.15],  
     biggl:      ['MakeBig','open',1.45],  
     Biggl:      ['MakeBig','open',1.75],  
     bigr:       ['MakeBig','close',0.85],  
     Bigr:       ['MakeBig','close',1.15],  
     biggr:      ['MakeBig','close',1.45],  
     Biggr:      ['MakeBig','close',1.75],  
     bigm:       ['MakeBig','rel',0.85],  
     Bigm:       ['MakeBig','rel',1.15],  
     biggm:      ['MakeBig','rel',1.45],  
     Biggm:      ['MakeBig','rel',1.75],  
       
     mathord:    ['HandleAtom','ord'],  
     mathop:     ['HandleAtom','op'],  
     mathopen:   ['HandleAtom','open'],  
     mathclose:  ['HandleAtom','close'],  
     mathbin:    ['HandleAtom','bin'],  
     mathrel:    ['HandleAtom','rel'],  
     mathpunct:  ['HandleAtom','punct'],  
     mathinner:  ['HandleAtom','inner'],  
       
     mathchoice: 'MathChoice',  
     buildrel:   'BuildRel',  
       
     hbox:       'HBox',  
     text:       'HBox',  
     mbox:       'HBox',  
     fbox:       'FBox',  
   
     strut:      'Strut',  
     mathstrut:  ['Macro','\\vphantom{(}'],  
     phantom:    ['Phantom',1,1],  
     vphantom:   ['Phantom',1,0],  
     hphantom:   ['Phantom',0,1],  
     smash:      'Smash',  
       
     acute:      ['MathAccent', [7,0,0x13]],  
     grave:      ['MathAccent', [7,0,0x12]],  
     ddot:       ['MathAccent', [7,0,0x7F]],  
     tilde:      ['MathAccent', [7,0,0x7E]],  
     bar:        ['MathAccent', [7,0,0x16]],  
     breve:      ['MathAccent', [7,0,0x15]],  
     check:      ['MathAccent', [7,0,0x14]],  
     hat:        ['MathAccent', [7,0,0x5E]],  
     vec:        ['MathAccent', [0,1,0x7E]],  
     dot:        ['MathAccent', [7,0,0x5F]],  
     widetilde:  ['MathAccent', [0,3,0x65]],  
     widehat:    ['MathAccent', [0,3,0x62]],  
   
     '_':        ['Replace','ord','_','normal',-.4,.1],  
     ' ':        ['Replace','ord','&nbsp;','normal'],  
     angle:      ['Replace','ord','&#x2220;','normal'],  
           
     matrix:     'Matrix',  
     array:      'Matrix',  // ### still need to do alignment options ###  
     pmatrix:    ['Matrix','(',')','c'],  
     cases:      ['Matrix','\\{','.',['l','l']],  
     cr:         'HandleRow',  
     '\\':       'HandleRow',  
       
     //  LaTeX  
     begin:      'Begin',  
     end:        'End',  
     tiny:       ['HandleSize',0],  
     Tiny:       ['HandleSize',1],  // non-standard  
     scriptsize: ['HandleSize',2],  
     small:      ['HandleSize',3],  
     normalsize: ['HandleSize',4],  
     large:      ['HandleSize',5],  
     Large:      ['HandleSize',6],  
     LARGE:      ['HandleSize',7],  
     huge:       ['HandleSize',8],  
     Huge:       ['HandleSize',9],  
     dots:       ['Macro','\\ldots'],  
   
     //  Extensions to TeX  
     color:      'Color',  
     href:       'Href',  
     'class':    'Class',  
     style:      'Style',  
     unicode:    'Unicode',  
   
     //  debugging and test routines  
     'char':     'Char'  
   },  
     
   /*  
    *  LaTeX environments  
    */  
   environments: {  
     array:      'Array',  
     matrix:     ['Array',null,null,'c'],  
     pmatrix:    ['Array','(',')','c'],  
     bmatrix:    ['Array','[',']','c'],  
     Bmatrix:    ['Array','\\{','\\}','c'],  
     vmatrix:    ['Array','\\vert','\\vert','c'],  
     Vmatrix:    ['Array','\\Vert','\\Vert','c'],  
     cases:      ['Array','\\{','.','ll'],  
     eqnarray:   ['Array',null,null,'rcl',[5/18,5/18]]  
   },  
   
   /*  
    *  The horizontally stretchable delimiters  
    */  
   leaders: {  
     downbrace:  {left: [3,0x7A], lmid: [3,0x7D], rmid: [3,0x7C], right: [3,0x7B]},  
     upbrace:    {left: [3,0x7C], lmid: [3,0x7B], rmid: [3,0x7A], right: [3,0x7D]},  
     leftarrow:  {left: [2,0x20], rep:  [2,0x00]},  
     rightarrow: {rep:  [2,0x00], right: [2,0x21]}  
   },  
   
   
   /***************************************************************************/  
   
   /*  
    *  Add special characters to list above.  (This makes it possible  
    *  to define them in a variable that the user can change.)  
    */  
   AddSpecial: function (obj) {  
     for (var id in obj) {  
       jsMath.Parser.prototype.special[jsMath.Parser.prototype[id]] = obj[id];  
     }  
   },  
   
   /*  
    *  Throw an error  
    */  
   Error: function (s) {  
    this.i = this.string.length;  
     if (s.error) {this.error = s.error} else {  
       if (!this.error) {this.error = s}  
     }  
   },  
   
   /***************************************************************************/  
   
   /*  
    *  Check if the next character is a space  
    */  
   nextIsSpace: function () {  
     return this.string.charAt(this.i) == ' ';  
   },  
   
   /*  
    *  Parse a substring to get its mList, and return it.  
    *  Check that no errors occured  
    */  
   Process: function (arg) {  
     var data = this.mlist.data;  
     arg = jsMath.Parse(arg,data.font,data.size,data.style);  
       if (arg.error) {this.Error(arg); return}  
     if (arg.mlist.Length() == 0) {return null}  
     if (arg.mlist.Length() == 1) {  
       var atom = arg.mlist.Last();  
       if (atom.atom && atom.type == 'ord' && atom.nuc &&  
          !atom.sub && !atom.sup && (atom.nuc.type == 'text' || atom.nuc.type == 'TeX'))  
              {return atom.nuc}  
     }  
     return {type: 'mlist', mlist: arg.mlist};  
   },  
   
   /*  
    *  Get and return a control-sequence name from the TeX string  
    */  
   GetCommand: function () {  
     var letter = /^([a-z]+|.) ?/i;  
     var cmd = letter.exec(this.string.slice(this.i));  
     if (cmd) {this.i += cmd[1].length; return cmd[1]}  
     this.Error("Missing control sequnece name at end of string or argument"); return  
   },  
   
   /*  
    *  Get and return a TeX argument (either a single character or control sequence,  
    *  or the contents of the next set of braces).  
    */  
   GetArgument: function (name,noneOK) {  
     while (this.nextIsSpace()) {this.i++}  
     if (this.i >= this.string.length) {if (!noneOK) this.Error("Missing argument for "+name); return}  
     if (this.string.charAt(this.i) == this.close) {if (!noneOK) this.Error("Extra close brace"); return}  
     if (this.string.charAt(this.i) == this.cmd) {this.i++; return this.cmd+this.GetCommand()}  
     if (this.string.charAt(this.i) != this.open) {return this.string.charAt(this.i++)}  
     var j = ++this.i; var pcount = 1; var c = '';  
     while (this.i < this.string.length) {  
       c = this.string.charAt(this.i++);  
       if (c == this.cmd) {this.i++}  
       else if (c == this.open) {pcount++}  
       else if (c == this.close) {  
         if (pcount == 0) {this.Error("Extra close brace"); return}  
         if (--pcount == 0) {return this.string.slice(j,this.i-1)}  
       }  
     }  
     this.Error("Missing close brace");  
   },  
   
   /*  
    *  Get an argument and process it into an mList  
    */  
   ProcessArg: function (name) {  
     var arg = this.GetArgument(name); if (this.error) return;  
     return this.Process(arg);  
   },  
   
   /*  
    *  Get the name of a delimiter (check it in the delimiter list).  
    */  
   GetDelimiter: function (name) {  
     while (this.nextIsSpace()) {this.i++}  
     var c = this.string.charAt(this.i);  
     if (this.i < this.string.length) {  
       this.i++;  
       if (c == this.cmd) {c = '\\'+this.GetCommand(name); if (this.error) return}  
       if (this.delimiter[c] != null) {return this.delimiter[c]}  
     }  
     this.Error("Missing or unrecognized delimiter for "+name);  
   },  
     
   /*  
    *  Get a dimension (including its units).  
    *  Convert the dimen to em's, except for mu's, which must be  
    *  converted when typeset.  
    */  
   GetDimen: function (name,nomu) {  
     var rest; var advance = 0;  
     if (this.nextIsSpace()) {this.i++}  
     if (this.string.charAt(this.i) == '{') {  
       rest = this.GetArgument(name);  
     } else {  
       rest = this.string.slice(this.i);  
       advance = 1;  
     }  
     var match = rest.match(/^\s*([-+]?(\.\d+|\d+(\.\d*)?))(pt|em|ex|mu|px)/);  
     if (!match) {this.Error("Missing dimension or its units for "+name); return}  
     if (advance) {  
       this.i += match[0].length;  
       if (this.nextIsSpace()) {this.i++}  
     }  
     var d = match[1]-0;  
     if (match[4] == 'px') {d /= jsMath.em}  
     else if (match[4] == 'pt') {d /= 10}  
     else if (match[4] == 'ex') {d *= jsMath.TeX.x_height}  
     else if (match[4] == 'mu') {if (nomu) {d = d/18} else {d = [d,'mu']}}  
     return d;  
   },  
   
   /*  
    *  Get the next non-space character  
    */  
   GetNext: function () {  
     while (this.nextIsSpace()) {this.i++}  
     return this.string.charAt(this.i);  
   },  
     
   /*  
    *  Get an optional LaTeX argument in brackets  
    */  
   GetBrackets: function (name) {  
     var c = this.GetNext(); if (c != '[') return '';  
     var start = ++this.i; var pcount = 0;  
     while (this.i < this.string.length) {  
       var c = this.string.charAt(this.i++);  
       if (c == '{') {pcount++}  
       else if (c == '}') {  
         if (pcount == 0)  
           {this.Error("Extra close brace while looking for ']'"); return}  
         pcount --;  
       } else if (c == this.cmd) {  
         this.i++;  
       } else if (c == ']') {  
         if (pcount == 0) {return this.string.slice(start,this.i-1)}  
       }  
     }  
     this.Error("Couldn't find closing ']' for argument to "+this.cmd+name);  
   },  
     
   /*  
    *  Get everything up to the given control sequence name (token)  
    */  
   GetUpto: function (name,token) {  
     while (this.nextIsSpace()) {this.i++}  
     var start = this.i; var pcount = 0;  
     while (this.i < this.string.length) {  
       var c = this.string.charAt(this.i++);  
       if (c == '{') {pcount++}  
       else if (c == '}') {  
         if (pcount == 0)  
           {this.Error("Extra close brace while looking for "+this.cmd+token); return}  
         pcount --;  
       } else if (c == this.cmd) {  
         // really need separate counter for begin/end  
         // and it should really be a stack (new pcount for each begin)  
         if (this.string.slice(this.i,this.i+5) == "begin") {pcount++; this.i+=4}  
         else if (this.string.slice(this.i,this.i+3) == "end") {  
           if (pcount > 0) {pcount--; this.i += 2}  
         }  
         if (pcount == 0)  {  
           if (this.string.slice(this.i,this.i+token.length) == token) {  
             c = this.string.charAt(this.i+token.length);  
             if (c.match(/[^a-z]/i) || !token.match(/[a-z]/i)) {  
               var arg = this.string.slice(start,this.i-1);  
               this.i += token.length;  
               return arg;  
             }  
           }  
         }  
         this.i++;  
       }  
     }  
     this.Error("Couldn't find "+this.cmd+token+" for "+name);  
   },  
   
   /*  
    *  Get a parameter delimited by a control sequence, and  
    *  process it to get its mlist  
    */  
   ProcessUpto: function (name,token) {  
     var arg = this.GetUpto(name,token); if (this.error) return;  
     return this.Process(arg);  
   },  
   
   /*  
    *  Get everything up to \end{env}  
    */  
   GetEnd: function (env) {  
     var body = ''; var name = '';  
     while (name != env) {  
       body += this.GetUpto('begin{'+env+'}','end'); if (this.error) return;  
       name = this.GetArgument(this.cmd+'end'); if (this.error) return;  
     }  
     return body;  
   },  
     
   
   /***************************************************************************/  
   
   
   /*  
    *  Ignore spaces  
    */  
   Space: function () {},  
   
   /*  
    *  Collect together any primes and convert them to a superscript  
    */  
   Prime: function (c) {  
     var base = this.mlist.Last();  
     if (base == null || (!base.atom && base.type != 'box' && base.type != 'frac'))  
        {base = this.mlist.Add(jsMath.mItem.Atom('ord',null))}  
     if (base.sup) {this.Error("Prime causes double exponent: use braces to clarify"); return}  
     var sup = '';  
     while (c == "'") {sup += '\\prime'; c = this.GetNext(); if (c == "'") {this.i++}}  
     base.sup = this.Process(sup);  
   },  
   
   /*  
    *  Raise or lower its parameter by a given amount  
    *  @@@ Note that this is different from TeX, which requires an \hbox @@@  
    *  ### make this work with mu's ###  
    */  
   RaiseLower: function (name) {  
     var h = this.GetDimen(this.cmd+name,1); if (this.error) return;  
     var box = this.ProcessArg(this.cmd+name); if (this.error) return;  
     if (name == 'lower') {h = -h}  
     this.mlist.Add(new jsMath.mItem('raise',{nuc: box, raise: h}));  
   },  
     
   /*  
    *  Shift an expression to the right or left  
    *  @@@ Note that this is different from TeX, which requires a \vbox @@@  
    *  ### make this work with mu's ###  
    */  
   MoveLeftRight: function (name) {  
     var x = this.GetDimen(this.cmd+name,1); if (this.error) return;  
     var box = this.ProcessArg(this.cmd+name); if (this.error) return;  
     if (name == 'moveleft') {x = -x}  
     this.mlist.Add(jsMath.mItem.Space(x));  
     this.mlist.Add(jsMath.mItem.Atom('ord',box));  
     this.mlist.Add(jsMath.mItem.Space(-x));  
   },  
   
   /*  
    *  Show the argument in a particular color  
    *  ### doesn't affect horizontal rules; can we fix that? ###  
    */  
   Color: function (name) {  
     var color = this.GetArgument(this.cmd+name); if (this.error) return;  
     // check that it looks like a color?  
     this.AddHTML(name,['<SPAN STYLE="color: '+color+'">','</SPAN>']);  
   },  
     
   /*  
    *  Make the argument be a link  
    */  
   Href: function (name) {  
     var href = this.GetArgument(this.cmd+name); if (this.error) return;  
     this.AddHTML(name,['<A CLASS="mathlink" HREF="'+href+'">','</A>']);  
   },  
     
   /*  
    *  Apply a CSS class to the argument  
    */  
   Class: function (name) {  
     var clss = this.GetArgument(this.cmd+name); if (this.error) return;  
     this.AddHTML(name,['<SPAN CLASS="'+clss+'">','</SPAN>']);  
   },  
     
   /*  
    *  Apply a CSS style to the argument  
    */  
   Style: function (name) {  
     var style = this.GetArgument(this.cmd+name); if (this.error) return;  
     this.AddHTML(name,['<SPAN STYLE="'+style+'">','</SPAN>']);  
   },  
     
   /*  
    *  Insert some raw HTML around the argument (this will not affect  
    *  the spacing or other TeX features)  
    */  
   AddHTML: function (name,params) {  
     var data = this.mlist.data;  
     var arg = this.GetArgument(this.cmd+name); if (this.error) return;  
     arg = jsMath.Parse(arg,data.font,data.size,data.style);  
       if (arg.error) {this.Error(arg); return}  
     this.mlist.Add(jsMath.mItem.HTML(params[0]));  
     for (var i = 0; i < arg.mlist.Length(); i++) {this.mlist.Add(arg.mlist.Get(i))}  
     this.mlist.Add(jsMath.mItem.HTML(params[1]));  
   },  
     
   /*  
    *  Insert a unicode reference as an Ord atom.  Its argument should  
    *  be the unicode code point, e.g. \unicode{8211}, or \unicode{x203F}.  
    *  You can also specify the height and depth in ems, e.g.,  
    *  \unicode{8211,.6,-.3}  
    */  
   Unicode: function (name) {  
     var arg = this.GetArgument(this.cmd+name); if (this.error) return;  
     arg = arg.split(','); arg[0] = '&#'+arg[0]+';';  
     if (!arg[1]) {arg[1] = 'normal'}  
     this.mlist.Add(jsMath.mItem.TextAtom('ord',arg[0],arg[1],arg[2],arg[3]));  
   },  
     
   /*  
    *  Implements \frac{num}{den}  
    */  
   Frac: function (name) {  
     var num = this.ProcessArg(this.cmd+name); if (this.error) return;  
     var den = this.ProcessArg(this.cmd+name); if (this.error) return;  
     this.mlist.Add(jsMath.mItem.Fraction('over',num,den));  
   },  
     
   /*  
    *  Implements \sqrt[n]{...}  
    */  
   Sqrt: function (name) {  
     var n = this.GetBrackets(this.cmd+name); if (this.error) return;  
     var arg = this.ProcessArg(this.cmd+name); if (this.error) return;  
     box = jsMath.mItem.Atom('radical',arg);  
     if (this.n != '') {box.root = this.Process(n); if (this.error) return}  
     this.mlist.Add(box);  
   },  
   
   /*  
    *  Implements \root...\of{...}  
    */  
   Root: function (name) {  
     var n = this.ProcessUpto(this.cmd+name,'of'); if (this.error) return;  
     var arg = this.ProcessArg(this.cmd+name); if (this.error) return;  
     box = jsMath.mItem.Atom('radical',arg);  
     box.root = n; this.mlist.Add(box);  
   },  
     
   
   /*  
    *  Implements \mathchoice{}{}{}{}  
    */  
   MathChoice: function (name) {  
     var D  = this.ProcessArg(this.cmd+name); if (this.error) return;  
     var T  = this.ProcessArg(this.cmd+name); if (this.error) return;  
     var S  = this.ProcessArg(this.cmd+name); if (this.error) return;  
     var SS = this.ProcessArg(this.cmd+name); if (this.error) return;  
     var box = new jsMath.mItem('choice',{D: D, T: T, S: S, SS: SS});  
     this.mlist.Add(new jsMath.mItem('choice',{D: D, T: T, S: S, SS: SS}));  
   },  
     
   /*  
    *  Implements \buildrel...\over{...}  
    */  
   BuildRel: function (name) {  
     var top = this.ProcessUpto(this.cmd+name,'over'); if (this.error) return;  
     var bot = this.ProcessArg(this.cmd+name); if (this.error) return;  
     var op = jsMath.mItem.Atom('op',bot);  
     op.limits = 1; op.sup = top;  
     this.mlist.Add(op);  
   },  
   
   /*  
    *  Create a delimiter of the type and size specified in the parameters  
    */  
   MakeBig: function (name,data) {  
     var type = data[0]; var h = data[1] * jsMath.p_height;  
     var delim = this.GetDelimiter(this.cmd+name); if (this.error) return;  
     this.mlist.Add(jsMath.mItem.Atom(type,jsMath.Box.Delimiter(h,delim,'T')));  
   },  
     
   /*  
    *  Insert the specified character in the given font.  
    */  
   Char: function (name) {  
     var font = this.GetArgument(this.cmd+name); if (this.error) return;  
     var n = this.GetArgument(this.cmd+name); if (this.error) return;  
     this.mlist.Add(jsMath.mItem.Typeset(jsMath.Box.TeX(n-0,font,'T',this.mlist.data.size)));  
     return;  
   },  
     
   /*  
    *  Create an array or matrix.  
    */  
   Matrix: function (name,delim) {  
     var data = this.mlist.data;  
     var arg = this.GetArgument(this.cmd+name); if (this.error) return;  
     var parse = new jsMath.Parser(arg+'\\\\',null,data.size);  
     parse.matrix = name; parse.row = []; parse.table = [];  
     parse.Parse(); if (parse.error) {this.Error(parse); return}  
     parse.HandleRow(name,1);  // be sure the last row is recorded  
     var box = jsMath.Box.Layout(data.size,parse.table,delim[2]);  
     // Add parentheses, if needed  
     if (delim[0] && delim[1]) {  
       var left  = jsMath.Box.Delimiter(box.h+box.d,this.delimiter[delim[0]],'T');  
       var right = jsMath.Box.Delimiter(box.h+box.d,this.delimiter[delim[1]],'T');  
       box = jsMath.Box.SetList([left,box,right],data.style,data.size);  
     }  
     this.mlist.Add(jsMath.mItem.Atom((delim[0]? 'inner': 'ord'),box));  
   },  
     
   /*  
    *  When we see an '&', try to add a matrix entry to the row data.  
    *  (Use all the data in the current mList, and then clear it)  
    */  
   HandleEntry: function (name) {  
     if (!this.matrix)   
       {this.Error(name+" can only appear in a matrix or array"); return}  
     if (this.mlist.data.openI != null) {  
       var open = this.mlist.Get(this.mlist.data.openI);  
       if (open.left) {this.Error("Missing "+this.cmd+"right")}  
         else {this.Error("Missing close brace")}  
     }  
     if (this.mlist.data.overI != null) {this.mlist.Over()}  
     var data = this.mlist.data;  
     this.mlist.Atomize('T',data.size); var box = this.mlist.Typeset('T',data.size);  
     this.row[this.row.length] = box;  
     this.mlist = new jsMath.mList(null,null,data.size);   
   },  
     
   /*  
    *  When we see a \cr or \\, try to add a row to the table  
    */  
   HandleRow: function (name,last) {  
     if (!this.matrix)  
       {this.Error(this.cmd+name+" can only appear in a matrix or array"); return}  
     this.HandleEntry(name);  
     if (!last || this.row.length > 1 || this.row[0].format != 'null')  
       {this.table[this.table.length] = this.row}  
     this.row = [];  
   },  
     
   /*  
    *  LaTeX array environment  
    */  
   Array: function (name,delim) {  
     var columns = delim[2]; var cspacing = delim[3];  
     if (!columns) {  
       columns = this.GetArgument(this.cmd+'begin{'+name+'}');  
       if (this.error) return;  
     }  
     columns = columns.replace(/[^clr]/g,'');  
     columns = columns.split('');  
     var data = this.mlist.data;  
     var arg = this.GetEnd(name); if (this.error) return;  
     var parse = new jsMath.Parser(arg+'\\\\',null,data.size);  
     parse.matrix = name; parse.row = []; parse.table = [];  
     parse.Parse(); if (parse.error) {this.Error(parse); return}  
     parse.HandleRow(name,1);  // be sure the last row is recorded  
     var box = jsMath.Box.Layout(data.size,parse.table,columns,cspacing);  
     // Add parentheses, if needed  
     if (delim[0] && delim[1]) {  
       var left  = jsMath.Box.Delimiter(box.h+box.d,this.delimiter[delim[0]],'T');  
       var right = jsMath.Box.Delimiter(box.h+box.d,this.delimiter[delim[1]],'T');  
       box = jsMath.Box.SetList([left,box,right],data.style,data.size);  
     }  
     this.mlist.Add(jsMath.mItem.Atom((delim[0]? 'inner': 'ord'),box));  
   },  
     
   /*  
    *  LaTeX \begin{env}  
    */  
   Begin: function (name) {  
     var env = this.GetArgument(this.cmd+name); if (this.error) return;  
     if (env.match(/[^a-z*]/i)) {this.Error('Invalid environment name "'+env+'"'); return}  
     if (!this.environments[env]) {this.Error('Unknown environment "'+env+'"'); return}  
     var cmd = this.environments[env];  
     if (typeof(cmd) == "string") {cmd = [cmd]}  
     this[cmd[0]](env,cmd.slice(1));  
   },  
     
   /*  
    *  LaTeX \end{env}  
    */  
   End: function (name) {  
     var env = this.GetArgument(this.cmd+name); if (this.error) return;  
     this.Error(this.cmd+name+'{'+env+'} without matching '+this.cmd+'begin');  
   },  
   
   /*  
    *  Add a fixed amount of horizontal space  
    */  
   Spacer: function (name,w) {  
     this.mlist.Add(jsMath.mItem.Space(w-0));  
   },  
     
   /*  
    *  Add horizontal space given by the argument  
    */  
   Hskip: function (name) {  
     var w = this.GetDimen(this.cmd+name); if (this.error) return;  
     this.mlist.Add(jsMath.mItem.Space(w));  
   },  
   
   /*  
    *  Typeset the argument as plain text rather than math.  
    */  
   HBox: function (name) {  
     var text = this.GetArgument(this.cmd+name); if (this.error) return;  
     var box = jsMath.Box.InternalMath(text,this.mlist.data.size);  
     this.mlist.Add(jsMath.mItem.Typeset(box));  
   },  
     
   /*  
    *  Implement \fbox{...}  
    */  
   FBox: function (name) {  
     var text = this.GetArgument(this.cmd+name); if (this.error) return;  
     var arg = jsMath.Box.InternalMath(text,this.mlist.data.size);  
     var f = 0.25 * jsMath.sizes[this.mlist.data.size]/100;  
     var box = jsMath.Box.Set(arg,this.mlist.data.style,this.mlist.data.size,1).Remeasured();  
     var frame = jsMath.HTML.Frame(-f,-box.d-f,box.w+2*f,box.h+box.d+2*f);  
     box.html = frame + box.html + jsMath.HTML.Spacer(f);  
     box.h += f; box.d += f; box.w +=2*f; box.x += f;  
     box.bh = Math.max(box.bh,box.h); box.bd = Math.max(box.bd,box.d);  
     this.mlist.Add(jsMath.mItem.Atom('ord',box));  
   },  
     
   /*  
    *  Insert a rule of a particular width, height and depth  
    *  This replaces \hrule and \vrule  
    *  @@@ not a standard TeX command, and all three parameters must be given @@@  
    */  
   Rule: function (name,style) {  
     var w = this.GetDimen(this.cmd+name,1); if (this.error) return;  
     var h = this.GetDimen(this.cmd+name,1); if (this.error) return;  
     var d = this.GetDimen(this.cmd+name,1); if (this.error) return;  
     h += d; var html;  
     if (h != 0) {h = Math.max(1.05/jsMath.em,h)}  
     if (h == 0 || w == 0) {style = "blank"}  
     if (w == 0) {  
       html = '<IMG SRC="'+jsMath.blank+'" STYLE="'  
                 + 'border:0px none; width:1px; margin-right:-1px; '  
                 + 'height:'+jsMath.HTML.Em(h*jsMath.Browser.imgScale)+'">';  
     } else if (style == "blank") {  
       html = '<IMG SRC="'+jsMath.blank+'" STYLE="border:0px none; '  
                 + 'height:'+jsMath.HTML.Em(h*jsMath.Browser.imgScale)+'; '  
                 + 'width:' +jsMath.HTML.Em(w*jsMath.Browser.imgScale)+'">';  
     } else {  
       html = '<IMG SRC="'+jsMath.blank+'" STYLE="'  
                 + 'position: relative; top:1px; height:1px; border:0px none; '  
                 + 'border-top:'+jsMath.HTML.Em(h*jsMath.Browser.imgScale)+' solid; '  
                 + 'width:' +jsMath.HTML.Em(w*jsMath.Browser.imgScale)+'">';  
     }  
     if (d) {  
       html = '<SPAN STYLE="vertical-align:'+jsMath.HTML.Em(-d)+'">'  
            +  html + '</SPAN>';  
     }  
     this.mlist.Add(jsMath.mItem.Typeset(new jsMath.Box('html',html,w,h-d,d)));  
   },  
     
   /*  
    *  Inserts an empty box of a specific height and depth  
    */  
   Strut: function () {  
     var size = this.mlist.data.size;  
     var box = jsMath.Box.Text('','normal','T',size).Styled();  
     box.bh = box.bd = 0; box.h = .8; box.d = .3; box.w = 0;  
     this.mlist.Add(jsMath.mItem.Typeset(box));  
   },  
     
   /*  
    *  Handles \phantom, \vphantom and \hphantom  
    */  
   Phantom: function (name,data) {  
     var arg = this.ProcessArg(this.cmd+name); if (this.error) return;  
     this.mlist.Add(new jsMath.mItem('phantom',{phantom: arg, v: data[0], h: data[1]}));  
   },  
     
   /*  
    *  Implements \smash  
    */  
   Smash: function (name,data) {  
     var arg = this.ProcessArg(this.cmd+name); if (this.error) return;  
     this.mlist.Add(new jsMath.mItem('smash',{smash: arg}));  
   },  
     
   /*  
    *  Puts an accent on the following argument  
    */  
   MathAccent: function (name,accent) {  
     var c = this.ProcessArg(this.cmd+name); if (this.error) return;  
     var atom = jsMath.mItem.Atom('accent',c); atom.accent = accent[0];  
     this.mlist.Add(atom);  
   },  
   
   /*  
    *  Handles functions and operators like sin, cos, sum, etc.  
    */  
   NamedOp: function (name,data) {  
     var a = (name.match(/[^acegm-su-z]/)) ? 1: 0;  
     var d = (name.match(/[gjpqy]/)) ? 1: 0;  
     if (data[1]) {name = data[1]}  
     var box = jsMath.mItem.TextAtom('op',name,'cmr10',a,d);  
     if (data[0] != null) {box.limits = data[0]}  
     this.mlist.Add(box);  
   },  
   
   /*  
    *  Implements \limits  
    */  
   Limits: function (name,data) {  
     var atom = this.mlist.Last();  
     if (!atom || atom.type != 'op')   
       {this.Error(this.cmd+name+" is allowed only on operators"); return}  
     atom.limits = data[0];  
   },  
   
   /*  
    *  Implements macros like those created by \def.  The named control  
    *  sequence is replaced by the string given as the first data value.  
    *  If there is a second data value, this specifies how many arguments  
    *  the macro uses, and in this case, those arguments are substituted  
    *  for #1, #2, etc. within the replacement string.  
    *    
    *  See the jsMath.Macro() command below for more details.  
    */  
   Macro: function (name,data) {  
     var text = data[0]  
     if (data[1]) {  
       var args = [];  
       for (var i = 0; i < data[1]; i++)   
         {args[args.length] = this.GetArgument(this.cmd+name); if (this.error) return}  
       text = ''; var c; var i = 0;  
       while (i < data[0].length) {  
         c = data[0].charAt(i++);  
         if (c == '\\') {text += c + data[0].charAt(i++)}  
         else if (c == '#') {  
           c = data[0].charAt(i++);  
           if (c == "#") {text += c} else {  
             if (!c.match(/[1-9]/) || c > args.length)  
               {this.Error("Illegal macro argument reference"); return}  
             text += args[c-1];  
           }  
         } else {text += c}  
       }  
     }  
     this.string = text + this.string.slice(this.i);  
     this.i = 0;  
   },  
     
   /*  
    *  Replace the control sequence with the given text  
    */  
   Replace: function (name,data) {  
     this.mlist.Add(jsMath.mItem.TextAtom(data[0],data[1],data[2],data[3]));  
   },  
   
   /*  
    *  Implements \overbrace, \underbrace, etc.  
    */  
   HandleLeaders: function (name,data) {  
     var box = this.ProcessArg(this.cmd+name); if (this.error) return;  
     box = jsMath.Box.Set(box,'D',this.mlist.data.size).Remeasured();  
     var leader = jsMath.Box.Leaders(box.w,this.leaders[data[0]]);  
     if (data[2]) {leader.y = -leader.h - box.d} else {leader.y = box.h + leader.d}  
     leader.x = -(leader.w + box.w)/2;  
     box = jsMath.mItem.Atom(data[1]? 'op': 'inner',  
       jsMath.Box.SetList([box,leader],'T',this.mlist.data.size));  
     box.limits = (data[1]? 1: 0);  
     this.mlist.Add(box);  
   },  
     
   /*  
    *  Implements \llap, \rlap, etc.  
    */  
   HandleLap: function (name) {  
     var box = this.ProcessArg(); if (this.error) return;  
     box = this.mlist.Add(new jsMath.mItem('lap',{nuc: box, lap: name}));  
   },  
   
   /*  
    *  Adds the argument as a specific type of atom (for commands like  
    *  \overline, etc.)  
    */  
   HandleAtom: function (name,data) {  
     var arg = this.ProcessArg(this.cmd+name); if (this.error) return;  
     this.mlist.Add(jsMath.mItem.Atom(data,arg));  
   },  
   
   
   /*  
    *  Process the character associated with a specific \mathcharcode  
    */  
   HandleMathCode: function (name,code) {  
     this.HandleTeXchar(code[0],code[1],code[2]);  
   },  
     
   /*  
    *  Add a specific character from a TeX font (use the current  
    *  font if the type is 7 (variable) or the font is not specified)  
    */  
   HandleTeXchar: function (type,font,code) {  
     if (type == 7 && this.mlist.data.font != null) {font = this.mlist.data.font}  
     font = jsMath.TeX.fam[font];  
     this.mlist.Add(jsMath.mItem.TeXAtom(jsMath.TeX.atom[type],code,font));  
   },  
   
   /*  
    *  Add a TeX variable character or number  
    */  
   HandleVariable: function (c) {this.HandleTeXchar(7,1,c.charCodeAt(0))},  
   HandleNumber: function (c) {this.HandleTeXchar(7,0,c.charCodeAt(0))},  
   
   /*  
    *  For unmapped characters, just add them in as normal  
    *  (non-TeX) characters  
    */  
   HandleOther: function (c) {  
     this.mlist.Add(jsMath.mItem.TextAtom('ord',c,'normal'));  
   },  
     
   /*  
    *  Ignore comments in TeX data  
    *  ### Some browsers remove the newlines, so this might cause  
    *      extra stuff to be ignored; look into this ###  
    */  
   HandleComment: function () {  
     var c;  
     while (this.i < this.string.length) {  
       c = this.string.charAt(this.i++);  
       if (c == "\r" || c == "\n") return;  
     }  
   },  
   
   /*  
    *  Add a style change (e.g., \displaystyle, etc)  
    */  
   HandleStyle: function (name,style) {  
     this.mlist.data.style = style[0];  
     this.mlist.Add(new jsMath.mItem('style',{style: style[0]}));  
   },  
     
   /*  
    *  Implements \small, \large, etc.  
    */  
   HandleSize: function (name,size) {  
     this.mlist.data.size = size[0];  
     this.mlist.Add(new jsMath.mItem('size',{size: size[0]}));  
   },  
   
   /*  
    *  Set the current font (e.g., \rm, etc)  
    */  
   HandleFont: function (name,font) {  
     this.mlist.data.font = font[0];  
   },  
   
   /*  
    *  Look for and process a control sequence  
    */  
   HandleCS: function () {  
     var cmd = this.GetCommand(); if (this.error) return;  
     if (this.macros[cmd]) {  
       var macro = this.macros[cmd];  
       if (typeof(macro) == "string") {macro = [macro]}  
       this[macro[0]](cmd,macro.slice(1)); return;  
     }  
     if (this.mathchardef[cmd]) {  
       this.HandleMathCode(cmd,this.mathchardef[cmd]);  
       return;  
     }  
     if (this.delimiter[this.cmd+cmd]) {  
       this.HandleMathCode(cmd,this.delimiter[this.cmd+cmd].slice(0,3))  
       return;  
     }  
     this.Error("Unknown control sequence '"+this.cmd+cmd+"'");  
   },  
   
   /*  
    *  Process open and close braces  
    */  
   HandleOpen: function () {this.mlist.Open()},  
   HandleClose: function () {  
     if (this.mlist.data.openI == null) {this.Error("Extra close brace"); return}  
     var open = this.mlist.Get(this.mlist.data.openI);  
     if (!open || open.left == null) {this.mlist.Close()}  
       else {this.Error("Extra close brace or missing "+this.cmd+"right"); return}  
   },  
   
   /*  
    *  Implements \left  
    */  
   HandleLeft: function (name) {  
     var left = this.GetDelimiter(this.cmd+name); if (this.error) return;  
     this.mlist.Open(left);  
   },  
   
   /*  
    *  Implements \right  
    */  
   HandleRight: function (name) {  
     var right = this.GetDelimiter(this.cmd+name); if (this.error) return;  
     var open = this.mlist.Get(this.mlist.data.openI);  
     if (open && open.left != null) {this.mlist.Close(right)}  
       else {this.Error("Extra open brace or missing "+this.cmd+"left");}  
   },  
   
   /*  
    *  Implements generalized fractions (\over, \above, etc.)  
    */  
   HandleOver: function (name,data) {  
     if (this.mlist.data.overI != null)   
       {this.Error('Ambiguous use of '+this.cmd+name); return}  
     this.mlist.data.overI = this.mlist.Length();  
     this.mlist.data.overF = {name: name};  
     if (data.length > 0) {  
       this.mlist.data.overF.left  = this.delimiter[data[0]];  
       this.mlist.data.overF.right = this.delimiter[data[1]];  
     } else if (name.match(/withdelims$/)) {  
       this.mlist.data.overF.left  = this.GetDelimiter(this.cmd+name); if (this.error) return;  
       this.mlist.data.overF.right = this.GetDelimiter(this.cmd+name); if (this.error) return;  
     }  
     if (name.match(/^above/))  
     {  
       this.mlist.data.overF.thickness = this.GetDimen(this.cmd.name,1);  
       if (this.error) return;  
     }  
   },  
   
   /*  
    *  Add a superscript to the preceeding atom  
    */  
   HandleSuperscript: function () {  
     var base = this.mlist.Last();  
     if (base == null || (!base.atom && base.type != 'box' && base.type != 'frac'))  
        {base = this.mlist.Add(jsMath.mItem.Atom('ord',null))}  
     if (base.sup) {this.Error("Double exponent: use braces to clarify"); return}  
     base.sup = this.ProcessArg('superscript'); if (this.error) return;  
   },  
   
   /*  
    *  Adda subscript to the preceeding atom  
    */  
   HandleSubscript: function () {  
     var base = this.mlist.Last();  
     if (base == null || (!base.atom && base.type != 'box' && base.type != 'frac'))  
        {base = this.mlist.Add(jsMath.mItem.Atom('ord',null))}  
     if (base.sub) {this.Error("Double subscripts: use braces to clarify"); return}  
     base.sub = this.ProcessArg('subscript'); if (this.error) return;  
   },  
   
   /*  
    *  Parse a TeX math string, handling macros, etc.  
    */  
   Parse: function () {  
     var c;  
     while (this.i < this.string.length) {  
       c = this.string.charAt(this.i++);  
       if (this.mathchar[c]) {this.HandleMathCode(c,this.mathchar[c])}  
       else if (this.special[c]) {this[this.special[c]](c)}  
       else if (this.letter.test(c)) {this.HandleVariable(c)}  
       else if (this.number.test(c)) {this.HandleNumber(c)}  
       else {this.HandleOther(c)}  
     }  
     if (this.mlist.data.openI != null) {  
       var open = this.mlist.Get(this.mlist.data.openI);  
       if (open.left) {this.Error("Missing "+this.cmd+"right")}  
         else {this.Error("Missing close brace")}  
     }  
     if (this.mlist.data.overI != null) {this.mlist.Over()}  
   },  
   
   /*  
    *  Perform the processing of Appendix G  
    */  
   Atomize: function () {  
     var data = this.mlist.init;  
     if (!this.error) this.mlist.Atomize(data.style,data.size)  
   },  
   
   /*  
    *  Produce the final HTML.  
    *    
    *  We have to wrap the HTML it appropriate <SPAN> tags to hide its  
    *  actual dimensions when these don't match the TeX dimensions of the  
    *  results.  We also include an image to force the results to take up  
    *  the right amount of space.  The results may need to be vertically  
    *  adjusted to make the baseline appear in the correct place.  
    */  
   Typeset: function () {  
     var data = this.mlist.init;  
     var box = this.typeset = this.mlist.Typeset(data.style,data.size);  
     if (this.error) {return '<SPAN CLASS="error">'+this.error+'</SPAN>'}  
     if (box.format == 'null') {return ''};  
   
     box.Styled().Remeasured(); var isSmall = 0; var isBig = 0;  
     if (box.bh > box.h && box.bh > jsMath.h+.001) {isSmall = 1}  
     if (box.bd > box.d && box.bd > jsMath.d+.001) {isSmall = 1}  
     if (box.h > jsMath.h || box.d > jsMath.d) {isBig = 1}  
   
     var html = box.html;  
     if (isSmall) {// hide the extra size  
       if (jsMath.Browser.allowAbsolute) {  
         var y = 0;  
         if (box.bh > jsMath.h+.001) {y = jsMath.h - box.bh}  
         html = jsMath.HTML.Absolute(html,box.w,jsMath.h,0,y,jsMath.h);  
       } else if (!jsMath.Browser.valignBug) {  
         // remove line height and try to hide the depth  
         var dy = jsMath.HTML.Em(Math.max(0,box.bd-jsMath.hd)/3);  
         html = '<SPAN STYLE="line-height: 0;'  
                + ' position:relative; top:'+dy+'; vertical-align:'+dy  
                + '">' + html + '</SPAN>';  
       }  
       isBig = 1;  
     }  
     if (isBig) {// add height and depth to the line (force a little  
                 //    extra to separate lines if needed)  
       html += '<IMG SRC="'+jsMath.blank+'" CLASS="mathHD" STYLE="'  
                + 'height:'+jsMath.HTML.Em((box.h+box.d+.1)*jsMath.Browser.imgScale)+'; '  
                + 'vertical-align:'+jsMath.HTML.Em(-box.d-.05)+';">'  
     }  
     return '<NOBR><SPAN CLASS="jsM_scale">'+html+'</SPAN></NOBR>';  
   }  
   
 });  
   
 /*  
  *  Make these characters special (and call the given routines)  
  */  
 jsMath.Parser.prototype.AddSpecial({  
   cmd:   'HandleCS',  
   open:  'HandleOpen',  
   close: 'HandleClose'  
 });  
   
   
 /*  
  *  The web-page author can call jsMath.Macro to create additional  
  *  TeX macros for use within his or her mathematics.  jsMath.Macro  
  *  has two required and one optional parameter.  The first parameter  
  *  is the control sequence name that will trigger the macro, and the  
  *  second is the replacement string for that control sequence.  
  *  NOTE:  since the backslash (\) has special meaning in JavaScript,  
  *  you must double the backslash in order to include control sequences  
  *  within your replacement string.  E.g.,   
  *    
  *      <SCRIPT> jsMath.Macro('R','{\\rm R}') </SCRIPT>  
  *    * 
  *  would make \R produce a bold-faced R.   *  Licensed under the Apache License, Version 2.0 (the "License");
  *     *  you may not use this file except in compliance with the License.
  *  The optional parameter tells how many arguments the macro   *  You may obtain a copy of the License at
  *  requires.  These are substituted for #1, #2, etc. within the    * 
  *  replacement string of the macro.  For example   *      http://www.apache.org/licenses/LICENSE-2.0
  *     * 
  *      <SCRIPT> jsMath.Macro('x','{\\vec x}_{#1}',1) </SCRIPT>   *  Unless required by applicable law or agreed to in writing, software
  *     *  distributed under the License is distributed on an "AS IS" BASIS,
  *  would make \x1 produce {\vec x}_{1} and \x{i+1} produce {\vec x}_{i+1}.   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  *   *  See the License for the specific language governing permissions and
  *  You can put several jsMath.Macro calls together into one .js file, and   *  limitations under the License.
  *  then include that into your web page using a command of the form  
  *    
  *      <SCRIPT SRC="..."></SCRIPT>  
  *    
  *  in your main HTML page.  This way you can include the same macros  
  *  into several web pages, for example.  
  */  
   
 jsMath.Add(jsMath,{  
   Macro: function (name) {  
     var macro = jsMath.Parser.prototype.macros;  
     macro[name] = ['Macro'];  
     for (var i = 1; i < arguments.length; i++)   
       {macro[name][macro[name].length] = arguments[i]}  
   }  
 });  
   
   
 /***************************************************************************/  
   
 /*  
  *  These routines look through the web page for math elements to process.  
  *  There are two main entry points you can call:  
  *     *  
  *      <SCRIPT> jsMath.Process() </SCRIPT>   *****************************************************************************/
  *  or  
  *      <SCRIPT> jsMath.ProcessBeforeShowing() </SCRIPT>  
  *  
  *  The first will process the page asynchronously (so the user can start  
  *  reading the top of the file while jsMath is still processing the bottom)  
  *  while the second does not update until all the mathematics is typeset.  
  */  
   
 jsMath.Add(jsMath,{  
   
   /*  
    *  Typeset a string in \textstyle and return the HTML for it  
    */  
   TextMode: function (s) {  
     var parse = jsMath.Parse(s,null,null,'T');  
     parse.Atomize();  
     var html = parse.Typeset();  
     return html;  
   },  
   
   /*  
    *  Typeset a string in \displaystyle and return the HTML for it  
    */  
   DisplayMode: function (s) {  
     var parse = jsMath.Parse(s,null,null,'D');  
     parse.Atomize();  
     var html = parse.Typeset();  
     return html;  
   },  
     
   /*  
    *  Return the text of a given DOM element  
    */  
   GetElementText: function (element) {  
     var text = element.innerText;  
     if (text == null || text == "") {  
       try {text = element.textContent} catch (err) {}  
       if (text == null || text == "") {text = element.innerHTML}  
     }  
     if (text.search('&') >= 0) {  
       text = text.replace(/&lt;/g,'<');  
       text = text.replace(/&gt;/g,'>');  
       text = text.replace(/&quot;/g,'"');  
       text = text.replace(/&amp;/g,'&');  
     }  
     return text;  
   },  
     
   /*  
    *  Move hidden to the location of the math element to be  
    *  processed and reinitialize sizes for that location.  
    */  
   ResetHidden: function (element) {  
     element.innerHTML =  
       '<SPAN CLASS="normal" STYLE="position:absolute; top:0px;left:0px;"></SPAN>'  
         + jsMath.Browser.operaHiddenFix; // needed by Opera in tables  
     element.className='';  
     jsMath.hidden = element.firstChild;  
     jsMath.ReInit();  
   },  
   
     
   /*  
    *  Typeset the contents of an element in \textstyle  
    */  
   ConvertText: function (element) {  
     var text = this.GetElementText(element);  
     this.ResetHidden(element);  
     element.innerHTML = this.TextMode(text);  
     element.className = 'typeset';  
     element.alt = text;  
   },  
     
   /*  
    *  Typeset the contents of an element in \displaystyle  
    */  
   ConvertDisplay: function (element) {  
     var text = this.GetElementText(element);  
     this.ResetHidden(element);  
     element.innerHTML = this.DisplayMode(text);  
     element.className = 'typeset';  
     element.alt = text;  
   },  
     
   /*  
    *  Process a math element  
    */  
   ProcessElement: function (element) {  
     try {  
       if (element.tagName == 'DIV') {  
         this.ConvertDisplay(element);  
       } else if (element.tagName == 'SPAN') {  
         this.ConvertText(element);  
         //  
         // Overcome a bug in MSIE where were tex2math can't insert DIV's inside  
         // some elements, so fake it with SPANs, but can't fake the centering,  
         // so do that here.  
         //  
         if (element.parentNode.className == 'jsMath.recenter') {  
           element.parentNode.style.marginLeft =  
             Math.floor((element.parentNode.offsetWidth - element.offsetWidth)/2)+"px";  
         }  
       }  
       element.onclick = jsMath.Click.CheckClick;  
       element.ondblclick = jsMath.Click.CheckDblClick;  
     } catch (err) {}  
   },  
   
   /*  
    *  Asynchronously process all the math elements starting with  
    *  the k-th one  
    */  
   ProcessElements: function (k) {  
     if (k >= this.element.length) {  
       this.ProcessComplete();  
     } else {  
       this.ProcessElement(this.element[k])  
       setTimeout('jsMath.ProcessElements('+(k+1)+')',jsMath.Browser.delay);  
     }  
   },  
   
   /*  
    *  Call this at the bottom of your HTML page to have the  
    *  mathematics typeset asynchronously.  This lets the user  
    *  start reading the mathematics while the rest of the page  
    *  is being processed.  
    */  
   Process: function (obj) {  
     if (!jsMath.initialized) {jsMath.Init()}  
     this.element = this.GetMathElements(obj);  
     window.status = 'Processing Math...';  
     setTimeout('jsMath.ProcessElements(0)',jsMath.Browser.delay);  
   },  
     
   /*  
    *  Call this at the bottom of your HTML page to have the  
    *  mathematics typeset before the page is displayed.  
    *  This can take a long time, so the user could cancel the  
    *  page before it is complete; use it with caution, and only  
    *  when there is a relatively small amount of math on the page.  
    */  
   ProcessBeforeShowing: function (obj) {  
     if (!jsMath.initialized) {jsMath.Init()}  
     var element = jsMath.GetMathElements(obj);  
     window.status = 'Processing Math...';  
     for (var i = 0; i < element.length; i++)  
       {jsMath.ProcessElement(element[i])}  
     jsMath.ProcessComplete();  
   },  
     
   element: [],  // the list of math elements on the page  
   
   /*  
    *  Look up all the math elements on the page and  
    *  put them in a list sorted from top to bottom of the page  
    */  
   GetMathElements: function (obj) {  
     var element = [];  
     if (!obj) {obj = document}  
     if (typeof(obj) == 'string') {obj = document.getElementById(obj)}  
     if (!obj.getElementsByTagName) return  
     var math = obj.getElementsByTagName('DIV');  
     for (var k = 0; k < math.length; k++) {  
       if (math[k].className == 'math') {  
         if (jsMath.Browser.renameOK && obj.getElementsByName)   
                {math[k].setAttribute('NAME','_jsMath_')}  
           else {element[element.length] = math[k]}  
       }  
     }  
     math = obj.getElementsByTagName('SPAN');  
     for (var k = 0; k < math.length; k++) {  
       if (math[k].className == 'math') {  
         if (jsMath.Browser.renameOK && obj.getElementsByName)   
                {math[k].setAttribute('NAME','_jsMath_')}  
           else {element[element.length] = math[k]}  
       }  
     }  
     // this gets the SPAN and DIV elements interleaved in order  
     if (jsMath.Browser.renameOK && obj.getElementsByName) {  
       element = obj.getElementsByName('_jsMath_');  
     } else if (jsMath.hidden.sourceIndex) {  
       element.sort(function (a,b) {return a.sourceIndex - b.sourceIndex});  
     }  
     return element;  
   },  
   
   /*  
    *  Remove the window message about processing math  
    *  and clean up any marked <SPAN> or <DIV> tags  
    */  
   ProcessComplete: function () {  
     if (jsMath.Browser.renameOK) {  
       var element = document.getElementsByName('_jsMath_');  
       for (var i = element.length-1; i >= 0; i--) {  
         element[i].removeAttribute('NAME');  
       }  
     }  
     jsMath.hidden = jsMath.hiddenTop;  
     jsMath.element = [];  
     window.status = 'Done';  
     if (jsMath.Browser.safariImgBug &&  
         (jsMath.Controls.cookie.font == 'symbol' ||  
          jsMath.Controls.cookie.font == 'image')) {  
       //  
       //  For Safari, the images don't always finish  
       //  updating, so nudge the window to cause a  
       //  redraw.  (Hack!)  
       //  
       setTimeout("window.resizeBy(-1,0); window.resizeBy(1,0);",2000);  
     }  
   },  
     
   Element: function (name) {return document.getElementById('jsMath.'+name)}  
     
 });  
   
   
 /***************************************************************************/  
   
 /*  if (!window.jsMath) {jsMath = {}}
  *  Initialize everything  if (!jsMath.Script) {jsMath.Script = {}}
  */  
 jsMath.Loaded();  
 jsMath.Controls.GetCookie();  
 if (document.body) {jsMath.Setup.Body()}  
   
 }}  jsMath.Script.Uncompress = function (data) {
     for (var k = 0; k <  data.length; k++) {
       var d = data[k]; var n = d.length;
       for (var i = 0; i < n; i++) {if (typeof(d[i]) == 'number') {d[i] = d[d[i]]}}
       data[k] = d.join('');
     }
     eval(data.join(''));
   }
   
   //start = new Date().getTime();
   jsMath.Script.Uncompress([
     ['if(!','window','.jsMath','||!',1,'.','jsMath.','loaded','){var ','jsMath_old','=',1,2,';',0,'document.','getElementById','||!',15,'childNodes||!',15,'createElement','){','alert("','The',' mathematics ','on this page requires W3C DOM support in its JavaScript. "+"Unfortunately, your ','browser',' doesn\'t seem to have this.")}','else{',1,2,'={version:"3.4e",document:document,',1,':',1,',','platform',':(','navigator.',37,'.match(/','Mac/)?"mac":',39,37,41,'Win/)?"pc":"unix"),','sizes',':[50,60,70,85,100,120,144,173,207,249],','styles',':{".math','":"font-family:serif; font-style:normal; font-weight:normal','",".typeset',51,'; ','line-height:normal','","div.','typeset','":"text-align',':center; margin:1em 0px;","span.',57,58,':left',52,' span',58,62,'; border:','0px; margin:0px; ','padding:0px','",".typeset .','normal',51,70,'size0','":"font-size:','50','%",".typeset .','size1',75,'60',77,'size2',75,'70',77,'size3',75,'85',77,'size4',75,'100',77,'size5',75,'120',77,'size6',75,'144',77,'size7',75,'173',77,'size8',75,'207',77,'size9',75,'249',77,'cmr10','":"font-family:jsMath-',114,', serif',70,'cmbx10',115,119,', ','jsMath-cmr10',70,'cmti10',115,125,', ',123,70,'cmmi10',115,131,70,'cmsy10',115,135,70,'cmex10',115,139,70,'textit','":"font-family',':serif; ','font-style:italic',70,'textbf',144,':serif; font-weight:bold',70,'link":"','text-decoration:none',70,'error',75,'10pt; ',146,'; "+"','background-color',':#FFFFCC; padding:1px',159,'border:','1px solid',' #CC0000',70,'blank":"','display:inline-block','; ','overflow:hidden',67,'0px none; width:0px','; height:','0px;",".','typeset .','spacer','":"',168,'","#jsMath_hiddenSpan":"','visibility',':','hidden','; ','position:absolute','; top:0px',';left:0px',159,55,'; text-indent:0px","#','jsMath_message','":"','position:fixed','; bottom:1px; ','left:2px; ',160,':#E6E6E6','; "+"border:solid 1px #959595; margin:0px; padding:','1px 8px','; "+"z-index:102; color',': black','; font-size:','small; ','width:auto',';","#','jsMath_panel','":"',192,'; bottom:1.5em; right:1.5em','; padding:.8em 1.6em',159,160,':#DDDDDD',67,'outset 2px',159,'z-index:103; ',203,'; color:black',201,'10pt; font-style:normal","#',205,' .disabled":"color:#888888","#',205,' .infoLink',75,'85%","#',205,' *":"','font-size:inherit; font-style:inherit; font-family:inherit','; ',55,'","#',205,' div":"',160,':inherit; color:inherit;","#',205,' span":"',160,236,205,' td','":"border:0px; padding:0px; margin:0px; background-color:inherit; color:inherit;","#',205,' tr',243,205,' table',243,'jsMath_button','":"',192,193,'right:2px; ',160,':white',197,'0px 3px 1px 3px',199,':black; ',153,201,'x-small',159,203,'; cursor:hand;","#',250,228,69,67,68,55,159,229,'","#jsMath_global":"',146,';","#jsMath_float','":"',184,185,'; left:0px; max-width:80%; "+"z-index:101; ',203,'; height:auto',277,' .drag":"',160,':#DDDDDD',67,'outset 1px',173,'12px',201,'1px',277,' .close":"',160,196,67,'inset 1px; width:8px',173,'8px; margin:1px 2px',277,' .source":"',160,':#E2E2E2',67,289,159,203,283,'; padding:8px 15px',159,'font-family:courier, fixed',201,'90%","#jsMath_noFont .message',58,': center',209,67,'3px solid #DD0000',159,160,':#FFF8F8; color: #AA0000',201,202,203,204,'jsMath_noFont .link','":"',69,' 5px 2px 5px',67,'2px outset; ',160,':#E8E8E8',159,'color:black',201,'80%; ',203,266,'jsMath_PrintWarning',' .message',58,':center',209,67,'3px solid #DD0000',159,160,': #FFF8F8; color: #AA0000',201,'x-',202,203,';","@media print":"#',250,' {display:none','}\\n"+"#jsMath_Warning',358,'}","@media screen":"#',342,358,'}"},Element',':function(','A){return ',6,15,16,'("jsMath_"+A)},','BBoxFor',365,'A','){this.','hidden.innerHTML','="<nobr><','span class=\\"',57,'\\"><',377,'scale\\">"+A+"</span></span></nobr>";var B={w:this.',182,'.offsetWidth',',h:this.',182,'.offsetHeight','};this.',375,'="";return B},EmBoxFor',365,'B){var A=',6,'Global.cache.R;if(!A[this.em]){A[this.em]={}}if(!A[this.em][B]){var C=this.BBoxFor(B);','A[this.em][B]={w:C.w/this.em,h:C.h/this.em}}return A[this.em][B]},','EmBoxForItalics',365,391,6,393,'if(B.match(/<i>|class=\\"(icm|italic|igreek|iaccent)/i)){C.w=C.Mw','=this.BBoxFor','(B+',6,'Browser.','italicString',').w-',6,404,'italicCorrection','}',394,'Init',':function(){','if(',6,'Setup.inited','!=1){',0,6,416,'){',6,'Setup.','Body()}if(',6,416,'!=1){if(',6,416,'==-100','){return }',23,'It looks like jsMath failed to set up properly (error code "+',6,416,'+").  "+"I will try to keep going, but it could get ugly.");',6,416,'=1}}this.em',401,'("<span style=\\""+',6,404,'block+";','width:13em;height:1em','\\"></span','>").w/13;','if(this.','em==0',374,'em',401,'("<img src=\\""+',6,'blank+"\\" style=\\"',445,'\\"/>").w/13}','var A=',6,'Global.cache','.B;',0,'A[this.em]){A[this.em]={};','A[this.em].','bb',401,'("x");','var C=',464,'bb.h;',464,'d',401,'("x"+',6,'HTML.Rule(1,','C/',6,'em)).h-C;if(',6,404,405,'){',464,'ic=',6,371,'(',6,404,405,').w}}',6,404,409,'=',464,'ic;var F=',464,'bb;var D=F.h;var E=',464,'d;this.h=(D-E)/this.em;this.d=E/this.em;this.hd=this.h+this.d;this.xWidth=F.w;this.',423,'TeXfonts','();var B=this.EmBoxFor("<',377,114,'\\">M</span>").w/2;this.TeX.M_height=B*(26/14);this.TeX.h=this.h;this.TeX.d=this.d;this.TeX.hd=this.hd;this.Img.Scale();',0,'this.initialized',374,423,'Sizes','();this.','Img.UpdateFonts()}this.p_height=(','this.TeX.cmex10[0].','h+',516,'d)/0.85;',510,'=1},ReInit',413,'var A',401,'("x").w;if(A!=this.xWidth',374,'Init()}},Loaded',413,'if(',9,8,'B=["Process","ProcessBeforeShowing","ConvertTeX","ConvertTeX2","ConvertLaTeX","ConvertCustom","CustomSearch","Synchronize","Macro","document"];','for(var A=0;A<','B','.length;A++){','if(',9,'[B[A]]){','delete ',9,'[B[A]]}}}if(',9,'){this.Insert(','jsMath,',9,')}',9,'=null;',6,7,'=1},Add',365,'C,A){for(var B in A){','C[B]=A[B]}},Insert',365,553,'if(C[B]&&typeof (A[B])=="object"&&(','typeof (C[B])=="','object"||',558,'function")){this.Insert(C[B],A[B])}',29,'C[B]=A[B]}}},Package',365,'B,A',543,'B.prototype,A)}};',6,'Global={isLocal:1,cache:{','T:{},D:{},R:{},B',':{}},ClearCache',413,6,460,'={',570,':{}}},GoGlobal',365,391,'String(',6,1,'.','location);var C','=(',6,'isCHMmode','?"#":"?");if(B){A=A.replace(/\\?.*/,"")+"?"+B}',6,'Controls.','Reload(',6,'root+"jsMath-','global.html"+C+escape(A))},Init',413,'if(',6,'Controls.cookie.','global=="always"&&!',6,'noGoGlobal','){','if(navigator.','accentColorName',431,0,6,1,'){',6,1,'=',1,'}',6,590,7,'=1;',6,590,'defaults.hiddenGlobal',548,'this.GoGlobal(',6,590,'SetCookie(2))}},Register',413,458,6,1,'.parent;',0,6,'isCHMode){',6,587,'=(',6,1,'.','location.','protocol=="mk:")}try{',0,6,587,374,'Domain()}if(A',2,'&&A.',6,'isGlobal){A.',6,'Register(',6,1,')}}catch(B){',6,601,'=1}},Domain',413,603,'appName=="Microsoft Internet Explorer"&&',6,37,'=="mac"&&',39,'userProfile','!=null',431,'if(',1,'==parent',431,'var B=',6,15,'domain;try{while(true){try{if(parent.',15,'title',668,'){return }}','catch(A){}',0,15,'domain.match(/\\..*\\./)){break}',6,15,'domain=',6,15,'domain.replace(/^[^.]*\\./,"")}}',682,6,15,688,'B}};',6,'Script={request:null,Init',413,'if(!(',6,598,'asynch&&',6,598,'progress',')){if(',1,'.XMLHttpRequest','&&!(',6,15,'URL&&',6,15,'URL.match(/^file:\\/\\/.*\\\\/))){try{','this.request','=new XMLHttpRequest}catch(C){}}',0,717,'&&',1,'.','ActiveXObject',8,'A=["MSXML2.XMLHTTP.5','.0","MSXML2.XMLHTTP','.4',727,'.3',727,'","Microsoft.XMLHTTP"];','for(var B=0;B<','A.length&&!',717,';B++){try{',717,'=new ',724,'(A[B])}catch(C){}}}}',0,717,'||',6,423,'domainChanged',374,'Load=this.delayedLoad;this.needsBody=1}},Load',365,'B,A){','if(A){',6,'Message.Set("Loading "+','B);',6,'Script.','Delay(1);',6,'Script.Push(','this,"xmlRequest",B',');',6,759,6,'Message',',"Clear")}',29,6,759,760,')}},xmlRequest',365,'url){','this.blocking','=1;try{',717,'.open("GET",url,false);',717,'.send(null)}catch(err){',774,'=0;if(',6,'Translate.','restart&&',6,'Translate.asynchronous){return""}throw"jsMath can\'t load the file \'"+url+"\'\\n"+"',765,': "+err.message}if(',717,'.status','&&',717,790,'>=400){',774,781,6,783,'restart&&',6,786,'Error status: "+',717,790,'}',0,'url','.match(/\\.js$/)){','return(',717,'.responseText',')}var tmpQueue','=this.queue;this.queue','=[];',6,1,'.eval(',717,811,');',774,'=0;','this.queue=this.queue.concat(','tmpQueue);this.Process();return""},cancelTimeout:30*1000,iframe:null,blocking:0,cancelTimer:null,needsBody:0,queue:[],Synchronize',365,'A,B){','if(typeof (','A)!="string"){',6,759,'null,A,B)}',29,6,759,6,1,',"eval",A)}},Push',365,'A,C,B){','this.queue','[',840,'.length]=[A,C,B];if(!(',774,'||(this.needsBody&&!',6,15,'body))){this.Process()}},Process',413,'while(',840,'.length&&!',774,8,'C=',840,'[0];',840,'=',840,'.slice(1);',458,'this.SaveQueue();var B=C[0];var E=C[1];var D=C[2];if(B){B[E](D)}',29,'if(E){E(D)}}this.','RestoreQueue','(A)}},SaveQueue',413,'var A',813,'=[];return A},',866,365,'A){',823,'A)},delayedLoad',365,'A',374,'Push(this,"startLoad",A)},startLoad',365,'A){','this.iframe','=',6,15,21,'("iframe");','this.iframe.style.',180,'="',182,'";',889,'position="absolute";',889,'width="0px";',889,'height="0px','";if(',6,15,'body.firstChild','){',6,15,'body.insertBefore(',883,',',6,15,903,')}',29,6,15,'body','.appendChild(',883,')}',774,'=1;this.','url=A;',0,'A',808,883,'.src=A}',29,883,'.src=',6,593,'loader.html"}if(A.substr(0,',6,'root.length',')==',6,'root){A=A.substr(',6,936,')}',6,753,'A);','this.cancelTimer','=setTimeout("',6,756,'cancelLoad','()",this.cancelTimeout)},endLoad',365,'A){if(',946,'){clearTimeout(',946,');',946,'=null}',6,765,'.Clear();if(A!="cancel"){',774,'=0;this.Process','()}},Start',413,'this.tmpQueue',813,'=[]},End',413,823,967,');',539,967,'},',950,413,946,548,6,765,'.Set("Can\'t load file");this.endLoad("cancel")},Delay',365,'A){',774,'=1;setTimeout("',6,756,'endDelay','()",A)},',990,413,774,964,'()},','imageCount',':0,WaitForImage',365,'B){',774,922,997,'++;',448,'img==null',374,'img=[]}',458,'new Image',514,'img[this.img.length]=A;A.onload=function(){if(--',6,756,997,'==0){',6,756,990,'()}};A.onerror=A.onload;A.onabort=A.onload;A.src=B},Uncompress',365,'data){for(var k=0;k<data.length;k++){var d=data[k];var n=d.length;for(var i=0;i<n;i++){',827,'d[i])=="number"){d[i]=d[d[i]]}}data[k]=d.join("")}',1,817,'data.join(""))}};',6,765,'={blank:null,message:null,text:null,clear:null,Init',413,0,6,15,'body||!',6,598,706,431,'if(',6,423,'stylesReady){','this.message','=',6,'Setup.DIV("message",{visibility:"hidden','"})}',29,1044,'=',6,1047,'",position:"absolute",','bottom:"1px",left:"2px",','backgroundColor',':"#E6E6E6",border:"solid 1px #959595",margin:"0px",padding:"1px 8px",zIndex:102,color:"black",fontSize:"small",width:"auto"})}','this.text','=',6,15,'createTextNode','("");',1044,918,1058,');',1044,'.onmousedown=',6,783,'Cancel},Set',365,750,'if(this.clear){clearTimeout(this.clear',');this.clear=null}if(',6,598,706,'){',0,1058,374,'Init();',0,1058,681,'if(',6,404,'textNodeBug','){',1044,'.innerHTML','=B}',29,1058,'.nodeValue','=B}','this.message.style.',180,'="visible";',751,1100,'cursor="pointer";',0,1100,'cursor){',1100,'cursor="hand"}',1044,'.title=" Cancel Processing of Math "}',29,1100,'cursor="";',1044,'.title=""}}',29,'if(B.substr(0,8)!="Loading "){',6,1,790,'=B}}},Clear',413,1075,')}this.clear=setTimeout("',6,765,'.doClear()",1000)},doClear',413,448,'clear',374,'clear',548,6,1,790,'="";if(',1058,'){',1058,1098,'=""}if(',1044,'){',1100,180,'="',182,'"}}},Blank',413,'if(','this.blank','||!',6,15,'body',431,1154,'=',6,423,'DIV("blank",{position:(',6,404,'msiePositionFixedBug','?"absolute":"fixed"),top:"0px",left:"0px",bottom:"0px",right:"0px",zIndex:101,',1056,':"white"});if(',6,404,'msieBlankBug){',1154,1094,'="&nbsp;";',1154,'.style.width="110%";',1154,'.style.height="110%"}},UnBlank',413,'if(',1154,'){',6,15,'body.removeChild(',1154,')}',1154,'=null}};',6,'Setup={',7,':[],DIV',365,'D,B',8,'C=',6,15,21,'("div");C.id="jsMath_"+D;','for(var A in ','B){C.style[A]=B[A]}',0,6,15,'body.hasChildNodes){',6,15,'body',918,'C)}',29,6,15,907,'C,',6,15,903,')}return C},Script',365,750,448,7,'[B]){return }',29,'this.',7,'[B]=1}',0,'B.match("^([a-zA-Z]+:/?)?/")){B=',6,'root+B}',6,756,'Load(B,A)},Hidden',413,6,182,'=this.DIV("Hidden",{',180,':"',182,1054,'top:0,left:0,border:0,padding:0,margin:0});',6,'hiddenTop=',6,182,';return },Source',413,'if(',6,'Autoload','&&',6,1257,'.root){',6,'root=',6,1257,'.','root}',29,6,'root="";',458,6,15,'getElementsByTagName("','script");',751,733,'A.','length;B++){','var D=A[B].src;if(D&&D.match("(^|/|\\\\\\\\)',6,'js$")){',6,1263,'D.','replace(/',6,'js$/,"");break}}}}if(',6,'root.charAt(','0)=="\\\\"){',6,1263,6,'root.replace','(/\\\\/g,"/")}if(',6,1290,'0)=="/"){if(',6,1290,'1)!="/"){if(',6,15,641,'port){',6,'root=":"+',6,15,641,'port+',6,1267,6,'root="//"+',6,15,641,'host+',6,1267,6,1263,6,15,641,'protocol+',6,1267,29,0,6,'root.match','(/^[a-z]+:/i)){var D=','new String(',6,15,584,'=new RegExp("/[^/]*/\\\\.\\\\./");',6,1263,'D.replace(new RegExp("[^/]*$"),"")+',6,'root;while(',6,1334,'(C)){',6,1263,6,1295,'(C,"/")}}}',6,'Img.',1263,6,'root+"fonts/";',6,'blank=',6,'root+"blank.gif";this.Domain()},Domain',413,'try{',6,15,'domain}catch(D',431,'var C="";',458,6,15,'domain;if(',6,1334,'("://([^/]*)/")){C=RegExp.$1}C=C.replace(/:\\d+$/,"");if(C==""||C==A',431,603,'appName=="Microsoft Internet Explorer"&&',6,37,'=="mac"&&',39,'onLine&&',39,667,'&&',6,15,'all',431,'C=C.split(/\\./);A=A.split(/\\./);if(C.length<2||A.length<2||','C[C.length-','1',']!=A[A.length-','1]||',1393,'2',1395,'2]){this.','DomainWarning','();return }var E=',1393,'2]+"."+',1393,'1];for(var B=3;B<=C.length&&B<=A.',1279,'if(',1393,'B',1395,'B]){break}E=',1393,'B]+"."+E}',6,15,688,'E;this.',746,'=1},',1401,413,23,'In order for jsMath to be able to load the additional "+"components that it may need, the ',6,'js file must be "+"',7,' from a server in the same domain as the page that "+"contains it.  Because that is not the case for this page, "+"the',25,'displayed here may not appear correctly.")},','EncodeFont',365,'C',8,'B=',6,'TeX[C];if(B','[0].c',668,431,533,'128;A++){var D=B[A];B[A]=D[3];if(B[A]==null){B[A]={}}B[A].w=D[0];B[A].h=D[1];if(D[2]!=null){B[A].d=D[2]}B[A].c=',6,'TeX.encoding[A]}},Fonts',413,733,6,'TeX.fam.length;','B++){',458,6,'TeX.fam[','B];if(A',374,1431,'(A)}}},TeXfont',365,'C',8,'B=',6,1437,'==null',431,458,6,'EmBoxFor("<span class=\\""+C+"\\">"+B[65].c','+"</span>");B.hd=A.h;B.dh=0.05;B.d=',6,1467,'+',6,476,'B.hd)+"</span>").h-B.hd;B.h=B.hd-B.d;','if(C=="',131,'"){B.skewchar=','127}',29,1475,135,1477,'48}}},',504,413,533,6,1448,'A++){if(',6,1452,'A]){this.TeXfont(',6,1452,'A])}}},Sizes',413,6,'TeXparams','=[];var B;var A;for(A=0;A<',6,47,535,6,1498,'[A]={}}for(B in ',6,'TeX){',827,6,'TeX[B])!="object"){for(A=0;A<',6,47,535,6,1498,'[A][B]=',6,47,'[A]*',6,'TeX[B]/100}}}},Styles',365,'A){',0,'A){A=',6,49,';A[".',175,'scale"]="font-size:"+',6,598,'scale+"%";this.stylesReady=1}',6,759,'this,"','AddStyleSheet','",A);if(',6,404,'styleChangeDelay','){',6,759,6,'Script,"Delay",1)}},',1537,365,'D',8,'B=',6,15,1274,'head")[0];var A="";for(var E in D){A+=E+" {"+D[E]+"}\\n"}if(',6,15,'createStyleSheet){B.insertAdjacentHTML("beforeEnd","<','span style=\\"','display:none\\">x</span>"+"<style type=\\"text/css\\">"+A+"</style>")}',29,468,6,15,21,'("style");C.type="text/css";C',918,6,15,1062,'(A));B',918,'C)}},Body',413,448,'inited',431,'this.inited=-','1;',6,423,'Hidden();',1578,'2;',6,404,1084,1578,'3;if(',6,598,'blank){',6,765,'.Blank()}',1578,'4;',6,423,'Styles();',1578,'5;',6,590,1084,1578,'6;',6,759,6,'Setup,"User","pre-font");',1578,'7;',6,759,6,'Font,"Check");if(',6,'Font.register.length){',6,759,6,'Font,"LoadRegistered")}this.inited=1},User',365,953,6,'Setup.UserEvent[A',']){(',6,1627,'])()}},UserEvent:{"pre-font":null,"onload":null}};',6,'Update={',504,365,'D){',1204,'D){for(var B in D[A]){for(var C in D[A][B]){',6,'TeX[A][B][C]=D[A][B][C]}}}},TeXfontCodes',365,'C){',1204,'C){',733,'C[A].',1279,6,'TeX[A][B].c=C[A][B]}}}};',6,'Browser={allowAbsolute:1,allowAbsoluteDelim:0,separateSkips:0,valignBug:0,operaHiddenFix:"",','msieCenterBugFix',':"",','msieInlineBlockFix',':"",','msieSpaceFix',':"",imgScale:1,renameOK:1,',1541,':0,delay:1,version:0,','TestSpanHeight',413,6,375,'="<span','><','span style=\\""+this.block+";','height:2em;width:','1px',446,'></span>";var B=',6,'hidden.firstChild;',458,'B.firstChild;','this.spanHeightVaries','=(B',386,'>=A',386,'&&B',386,'>0);','this.spanHeightTooBig','=(B',386,'>A',386,');',6,375,'=""},','TestInlineBlock',413,'this.block','="display:-moz-inline-box";','this.hasInlineBlock','=',6,'BBoxFor("<span style=\\""+this.block+";','width:10px;height:5px\\"></span>").w>0;if','(',1696,'){',6,'styles[".typeset .','blank"]=',6,1705,'blank','"].replace(/',168,'/,',1694,');',6,1705,176,'"]=',6,1705,176,1710,168,'/,"")}',29,1694,'="',168,'";',1696,'=',6,1699,1700,'(!',1696,681,1694,'+=";',170,'";',458,6,371,'("x").h;this.mozInlineBlockBug=',6,1699,'height:"+A+"px;width:1px',446,'>x"+"<',1666,1748,';vertical-align:-"+A+"px',446,'>").h>2*A;this.widthAddsBorder=',6,1699,170,';height:1px;width:10px',';border-left:','10px solid',446,'>").w>10;','this.msieBorderBug','=',6,1699,1748,446,'>x").h!=',6,1699,1748,1760,164,446,'>x").h;this.blankWidthBug=',1764,'||',6,1699,1667,'0px',446,'>").h==0},','TestRenameOK',413,6,375,1664,'></span>";',458,6,1672,'A.setAttribute("name","','jsMath_test','");this.renameOK=(',6,15,'getElementsByName("',1796,'").length>0);',6,375,1691,'TestStyleChange',413,6,375,1664,' ID=\\"',1796,'\\">x</span>";var B=',6,1672,458,'B',383,';',6,423,1537,'({"#',1796,75,'200%"});this.',1541,'=(B',383,'==A);',6,375,1691,'VersionAtLeast',365,391,1336,'this.version',').split(".");','B=',1336,'B',1839,'if(B[1]==null){B[1]="0"}return A[0]>B[0]||(A[0]==B[0]&&A[1]>=B[1])},Init',413,6,27,'="unknown";this.',1692,514,1660,514,1786,514,1806,514,'MSIE',514,'Mozilla',514,'Opera',514,'OmniWeb',514,'Safari',514,'Konqueror','();if(','this.allowAbsoluteDelim','){',6,'Box.DelimExtend=',6,'Box.DelimExtendAbsolute;',6,'Box.Layout=',6,'Box.LayoutAbsolute}',29,6,'Box.DelimExtend=',6,'Box.DelimExtendRelative;',6,'Box.Layout=',6,'Box.LayoutRelative}if(','this.separateSkips','){',6,'HTML.Place=',6,'HTML.','PlaceSeparateSkips',';',6,'Typeset.prototype.','Place=',6,1897,1894,'}},MSIE',413,'if(',1675,'&&!',1683,'){',6,27,'="MSIE',900,6,37,'=="pc"){this.','IE7=(',1,709,668,');this.quirks=(',6,15,'compatMode=="BackCompat");this.msieStandard6=!this.quirks&&!','this.IE7',';',1869,'=1;',1888,'=1',';this.buttonCheck=1;this.','msieBlankBug=1;this.','msieAccentBug',922,'msieRelativeClipBug','=1;this.msieDivWidthBug=1;this.',1167,922,'msieIntegralBug',922,'waitForImages',922,'msieAlphaBug=!',1924,';this.','alphaPrintBug','=!',1924,';this.',1652,'="position:relative; ";this.',1654,'=" ',168,';";this.msieTeXfontBaselineBug=!',6,404,'quirks;',0,1924,374,1656,'="<',1559,168,446,'>"}',6,'Macro("joinrel","\\\\mathrel{\\\\kern-5mu}"),',6,'Parser.prototype.mathchardef.','mapstocharOrig','=',6,1970,'mapstochar;',539,6,1970,1975,6,'Macro("mapstochar","\\\\rlap{\\\\',1971,'\\\\,}\\\\kern1mu"),',6,1705,'arial"]="font-family: \'Arial unicode MS\'";',0,1924,'||this.quirks){',6,'styles["#',190,'"]=',6,1991,190,1710,192,'/,"',184,'").',1286,203,'/,"");',6,1991,205,'"]=',6,1991,205,1710,192,'/,"',184,'").',1286,203,'/,"");',6,1991,250,'"]="width:','1px; "+',6,1991,250,1710,192,'/,"',184,'").',1286,203,'/,"");',6,1,'.attachEvent("','onscroll",',6,590,'MoveButton',');',448,'IE7){',6,1,2038,'onresize",',6,590,2042,')}this.msieMoveButtonHack=',1924,'}',6,1991,328,'"]+=" ','display: inline-block',';";',6,1705,176,'"]=',6,1705,176,1710,168,'/,"");',6,49,'[".tex2math_div"]=',6,49,'["div.',57,'"]+"; width: 100%; ',2060,900,'screen.deviceXDPI','&&','screen.logicalXDPI','&&',2082,'!=',2084,374,'imgScale*=',2084,'/',2082,';',6,598,'alpha=0}this.',405,'="<i>x</i>";',6,'EmBoxFor=',6,395,'}',29,'if(',6,37,'=="mac"){this.msieAbsoluteBug',922,'msieButtonBug',1935,1931,'quirks=1;',6,423,'Script("jsMath-msie-mac.js");',6,'Parser.prototype.macros.angle=["Replace","ord","<font face=\\"Symbol\\">&#x8B;</font>","normal"];',6,1991,205,2023,'42em; "+',6,1991,205,1710,203,'/,"");',6,598,'printwarn=0}}',6,'Macro("not","\\\\mathrel{\\\\rlap{\\\\kern3mu','/}}")}},',1859,413,'if(',6,182,'.ATTRIBUTE_NODE){',6,27,'="',1859,900,6,37,1915,1945,'=1}',1869,'=1;',6,1991,250,'"]=',6,1991,250,1710,'cursor:hand','/,"cursor:pointer");',6,1991,328,'"]=',6,1991,328,1710,2163,'/,"cursor:pointer");',6,2135,'/}}");',603,'vendor=="Firefox"){',1838,'=',39,'vendorSub}',29,603,'userAgent.match','(" Firefox/([0-9.]+)( |$)")){',1838,'=RegExp.$1}}}},',1863,413,603,'accentColorName){',6,27,'="',1863,'";','this.allowAbsolute','=',1696,';',1869,'=',2199,';this.valignBug=!',2199,1930,1091,'=1;',6,'noChangeGlobal=1;',0,1696,'){',6,'Setup.Script("jsMath-old-browsers.js','")}}},Opera',413,'if(',1683,'){',6,27,'="Opera";',458,39,2186,'("Opera 7");',2199,'=0;this.delay=10;this.operaHiddenFix="[Processing]";',751,6,2217,'")}}},Safari',413,603,'appVersion',41,'Safari\\//)){',6,27,'="Safari";',458,39,2186,'("Safari/([0-9]+)");A=(A)?A[1]:400;',733,6,1448,'B++){if(',6,1452,'B]&&',6,'TeX[',6,1452,'B]]){',6,'TeX[',6,1452,'B]].dh=0.1}}',6,'TeX.axis_height+=0.05;',6,'TeX.default_rule_thickness+=0.025;',1869,'=A>=125;this.safariIFRAMEbug=A>=312&&A<412;this.safariButtonBug=A<412;this.safariImgBug',922,1091,'=1',1930,1541,'=1}},',1867,413,603,'product&&',39,'product.match("',1867,'")){',6,27,'="',1867,'";',2199,'=0;',1869,'=0;',603,2186,'(/',1867,'\\/(\\d+)\\.(\\d+)/)){if(RegExp.$1<3||(RegExp.$1==3&&RegExp.$2<3)){',1888,922,'valignBug=1;',6,2217,'")}}',6,'Add(',6,49,',{".',175,114,144,': ',123,', jsMath ',114,', serif',70,119,144,': jsMath-',119,2315,119,''],
     [', ','jsMath','-','cmr10',', ',1,' ',3,'",".typeset .','cmti10":"','font-family: ',1,'-cmti10, ',1,' cmti10, ',1,'-',3,', ',1,' ',3,8,'cmmi10','":"',10,1,'-',23,', ',1,' ',23,8,'cmsy10','":"',10,1,'-',34,', ',1,' ',34,8,'cmex10','":"',10,1,'-','cmex10, ',1,' cmex10','"});',1,'.Font.testFont','="',1,'-',50,1,52,'"}}};',1,'.Font={testFont:"',1,'-',45,'",fallback:"symbol",register:[],message:"<b>No ',1,' TeX fonts ','found</b> -- using',' image fonts instead','.<br/>\\n"+"','These may be slow and might not print well',73,'Use the ',1,' control panel to get additional information.",','extra_message',':"Extra',70,'not found: <b><span id=\\"jsMath_ExtraFonts\\"></span></b><br/>"+"Using',72,'.  This may be slow and might not print well',73,'Use the ',1,78,'print_message',':"To print higher-resolution math symbols, click the<br/>\\n"+"<b>Hi-Res Fonts for Printing</b> button on the ',1,' control panel.<br/>\\n",','alpha_message',':"If the math symbols print as black boxes, turn off <b>image alpha channels</b><br/>\\n"+"using the <B>Options</B> pane of the ',1,92,'Test1',':function(','C',',F,D,E){if(F==null){F=124}if(D==null){D=2}if(E==null){E=""}var B=jsMath.BBoxFor("<span style=\\"font-family: "+E+C+", serif\\">"+jsMath.TeX[C][F].c+"</span>");var A=jsMath.BBoxFor("<span style=\\"font-family: serif\\">"+jsMath.TeX[C][F].c+"</span>");return','(B.w>D*A.w&&B.h!=0)},Test2',98,'C',100,'(A.w>D*B.w&&B.h!=0)},CheckTeX',':function(){var A=',1,'.BBoxFor("<','span style=\\"','font-family: "+',1,55,'+", serif\\">"+',1,'.TeX.',45,'[1','].c+"</span>");',1,'.nofonts=((A.w*3>A.h||A.h==0)&&!this.Test1("cmr10','",null,null,"',1,'-"));if(',1,'.nofonts','&&(',1,'.platform','!="mac"||',1,'.browser!="Mozilla"||!',1,'.Browser.','VersionAtLeast(1.5))){A=',1,'.BBoxFor("<',109,10,50,'serif\\">"+',1,115,45,'[1',118,1,120,'"));if(!',1,125,'){',1,'.Setup.','Script','("',1,'-BaKoMa-fonts.js")}}},Check',106,1,'.Controls','.cookie',';this.CheckTeX();if(',1,125,'){if(A.autofont||A','.font=="tex"){','A.font=this.fallback;if(A.warn){',1,'.nofontMessage=1;A.warn=0;',1,160,'.SetCookie(0);if','(',1,'.window.NoFontMessage','){',1,175,'()}else{','this.Message(this.','message)}}}}else{if(A.autofont){A.font="tex"}if(A',166,'return }}if(',1,'.noImgFonts){','A.font="unicode"}if(A','.font=="unicode','"){',1,153,154,'("',1,'-fallback','-"+',1,128,'+".js");',1,'.Box.TeXnonfallback=',1,'.Box.TeX',';',1,202,'=',1,'.Box.TeXfallback;return }','if(!A.print&&A.printwarn){this.','PrintMessage','((',1,133,'alphaPrintBug&&',1,160,161,'.alpha)?this.',89,'+this.',93,':this.',89,')}if(',1,133,'waitForImages){',1,'.Script.','Push(',1,'.',154,',"WaitForImage",',1,'.blank)}if(A.font=="symbol"){',1,153,154,'("',1,194,'-symbols.js");',1,'.Box.TeXnonfallback=',1,202,';',1,202,'=',1,208,1,'.Img.SetFont','({',3,':["all"],',23,258,34,258,45,258,'cmbx10',258,'cmti10:["all"]});',1,'.Img.LoadFont','("cm-fonts")},Message',98,'A){if(',1,'.Element("','Warning")){','return }var ','B=',1,153,'DIV("Warning','",{});B.innerHTML="<center><table><tr><td>"+"<div ','id=\\"jsMath_noFont\\"><div ','class=\\"message\\">"+A','+"<div style=\\"text-align:left\\"><',109,'float:left; ','margin: 8px ','0px 0px 20px\\">"+"<span onclick=\\"',1,160,'.Panel()\\" ','title=\\" Open ','the ',1,' Control Panel',' \\" class=\\"link\\">',1,295,'</span>"+"</span','><',109,287,'20px 0px 0px; float:right\\">"+"<span onclick=\\"',1,'.Font.','HideMessage','()\\" title=\\" Remove this font warning message',296,'Hide this Message',299,'></div><div style=\\"height:6px\\"></div><br clear=\\"all\\"/></div></','div>"+"<div style=\\"width:22em; height:1px\\"></div>"+"</td></tr></table></center><hr/>"},',306,106,1,274,'Warning");if(A','){A.style.display="none"}},',210,98,272,1,274,'PrintWarning','")){',276,'B=',1,153,'DIV("',324,281,283,'+"</',312,'Register',98,'H,B){if(typeof (H)=="string"){H={name:H}}if(!',1,153,'inited&&!B){','this.register','[',342,'.length]=H;',276,'I=H.name;var A=I.replace(/10$/,"");var F=',1,115,'fam.length;if(H.prefix==null){H.prefix=""}if(!H.style){H.style="',110,'H.prefix+I+", serif"}if(!H.styles){H.styles={}}if(!H.macros){H.macros={}}',1,115,'fam[F]=I;',1,115,'famName[I]=F;H.macros[A]=["HandleFont",F];',1,'.Add(',1,'.Parser.prototype.macros,H.macros);H.styles[".typeset ."+I]=H.style;',1,153,'Styles(H.styles);if(',1,'.initialized){',1,229,'Push(',1,'.Setup,"TeXfont",I)}var C=',1,160,161,';var E=!',1,125,'&&H.test(I,H.testChar,H.testFactor,H.prefix);if(E&&C',166,'if(H.tex){H.tex(I,F,H)}return }if(!E&&C.warn&&C.font=="tex"&&!',1,125,'){if(!C.fonts.match("/"+I+"/")){C.fonts+=I+"/";',1,160,172,'(!',1,274,275,180,79,')}var G=',1,274,'ExtraFonts");if(G){if(G','.innerHTML','!=""){G',398,'+=","}G',398,'+=" "+H.prefix+I}}}if(C',187,'"||',1,185,'if(H.fallback){H.fallback(I,F,H)}',276,'D={};D[I]=["all"];',1,255,'(D);',1,269,'(I);if(',1,'.initialized){',1,229,'Push(',1,'.Img,"Scale");',1,229,'Push(',1,'.Img,"UpdateFonts")}},LoadRegistered',106,'0;while(A<',342,'.length){this.Register(',342,'[A++],1)}',342,'=[]},Load',98,'A){',1,153,154,'(this.URL(A))},URL',98,'A){','return ',1,'.Img.root+A+"/def.js"}};',1,160,'={cookie:{scale:100,font:"tex",autofont:1,scaleImg:0,alpha:1,warn:1,fonts:"/",printwarn:1,stayhires:0,button:1,progress:1,asynch:0,blank:0,print:0,keep:"0D",global:"auto",hiddenGlobal:1},cookiePath:"/",','noCookiePattern',':/^(file|mk):$/,Init',':function(){','this.panel=',1,153,'DIV("panel",{display:"none"});if(!',1,133,'msieButtonBug){this.Button',179,'setTimeout("',1,160,'.Button()",500)}},Panel',453,1,'.Translate.Cancel();if(this.loaded){this.Main',179,1,229,'delayedLoad(',1,'.root+"',1,'-controls.html")}},Button',106,1,153,'DIV("button",{});A.title=" Open ',1,295,' ";A',398,'="<span onclick=\\"',1,160,'.Panel()\\">',1,'</span>";if(!',1,'.Global.','isLocal&&!',1,'.noShowGlobal){A',398,'+="<span id=\\"jsMath_global\\" ',292,1,' Global Panel \\" "+"onclick=\\"',1,492,'Show(1)\\">Global&nbsp;</span>"}if(A.offsetWidth<30){A.style.width="auto"}if(!','this.cookie','.button',318,'MoveButton',453,'var C=',1,160,';if(!C.button){C.button=',1,274,'button")}if(C.button','){C.MoveElement(C.','button,3,2)}var B=20;var A=20;if(C.button){A=C.button.offsetHeight+6;B=A+5}if(C.panel',516,'panel,B,A)}},MoveElement',98,'D,C,B){if(',1,133,'IE7){var A=document.body;D.style.right','="auto";D.style.','bottom',525,'left=A.clientWidth+A.scrollLeft-D.offsetWidth-C+"px";D.style.top=A.clientHeight+A.scrollTop-D.offsetHeight-B+"px"}else{','D.style.visibility="','hidden";',529,'visible"}},GetCookie',453,'if(','this.defaults','==null){',535,'={}}',1,360,535,',',504,');this.userSet={};var C=',1,'.document.cookie',';if(',1,'.window.location','.protocol.match(this.',451,')){C=this.','localGetCookie','();','this.isLocalCookie','=1}if(C.match(/',1,'=([^;]+)/)){var D=unescape(RegExp.$1).split(/,/);for(var B=0;B<D.length;B++){var A=D[B].match(/(.*):(.*)/);if(A[2].match(/^\\d+$/)){A[2]=1*A[2]}',504,'[A[1]]=A[2];this.userSet[A[1]]=1}}},',553,453,445,1,549,'.search.substr(1)},SetCookie',98,'F){var B=[];for(var E in ',504,'){if(',535,'[E]==null||',504,'[E]!=',535,'[E]){B[B.length]=E+":"+',504,'[E]}}B=B.join(",");if(',555,'){if(F==2){return"',1,'="+escape(B)}','this.','localSetCookie','(B,F)}else{B=escape(B);if(B==""){F=0}if(','this.cookiePath','){B+="; path="+',586,'}if(','this.cookieDomain','){B+="; domain="+',590,'}if(',504,'.keep!="0D"){var A={D',':1000*60*60*24',',W',596,'*7,M',596,'*30,Y',596,'*365};var D=new Date;D.setTime(D.getTime()+',504,'.keep.substr(','0,1)*A[',504,605,'1,1)]);B+="; expires="+D.toGMTString()}if(B!=""){',1,546,'="',1,'="+B;var C=',1,546,';if(F&&!C.match(/',1,'=/)){alert("Cookies must be enabled in order to save ',1,' options")}}}',445,'null},',584,98,'B,C){if(!C){',276,'A=String(',1,549,').replace(/\\?.*/,"");if(B!=""){A+="?',1,582,'if(A!=',1,549,'.href){this.Reload(A)}},Reload',98,'A){if(!this.loaded){return }this.loaded=0;',1,153,'inited=-100;',1,492,'ClearCache();if(A){',1,549,'.replace(A)}else{',1,549,'.reload()}}};',1,'.Click={CheckClick',98,'A){if(!A){A=',1,'.window.event}if','(A.altKey){',1,160,'.Panel()}},CheckDblClick',98,'B){if(!B){B=',1,657,'(!',1,'.Click.DblClick){',1,'.Extension.Require("double-click",1);var A=B;B={};for(var C in A){B[C]=A[C]}}',1,229,'Push(',1,'.Click,"DblClick",[B,this.alt])}};',1,'.TeX={thinmuskip:3/18,medmuskip:4/18,thickmuskip:5/18,x_height:0.430554,quad:1,num1:0.676508,num2:0.393732,num3:0.44373,denom1:0.685951,denom2:0.344841,sup1:0.412892,sup2:0.362892,sup3:0.288888,sub1:0.15,sub2:0.247217,sup_drop:0.386108,sub_drop:0.05,delim1:2.39,delim2:1,axis_height:0.25,default_rule_thickness:0.06,big_op_spacing1:0.111111,big_op_spacing2:0.166666,big_op_spacing3:0.2,big_op_spacing4:0.6,big_op_spacing5:0.1,integer:6553.6,scriptspace:0.05,nulldelimiterspace:0.12,delimiterfactor:901,delimitershortfall:0.5,scale:1,atom:["ord","op","bin","rel","open","close","punct","ord"],fam:["',3,'","',23,'","',34,'","',45,'","cmti10","","cmbx10",""],famName:{',3,':0,',23,':1,',34,':2,',45,':3,cmti10:4,cmbx10:6},encoding:["&#xC0;","&#xC1;","&#xC2;","&#xC3;","&#xC4;","&#xC5;","&#xC6;","&#xC7;","&#xC8;","&#xC9;","&#xCA;","&#xCB;","&#xCC;","&#xCD;","&#xCE;","&#xCF;","&#xB0;","&#xD1;","&#xD2;","&#xD3;","&#xD4;","&#xD5;","&#xD6;","&#xB7;","&#xD8;","&#xD9;","&#xDA;","&#xDB;","&#xDC;","&#xB5;","&#xB6;","&#xDF;","&#xEF;","!","&#x22;","#","$","%","&#x26;","&#x27;","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","&#x3C;","=","&#x3E;","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","&#x5C;","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","&#x7E;","&#xFF;"],',3,':[[0.625',',0.683],[0.','833',696,'778',696,'694',696,'667',696,'75',696,'722',696,'778',696,'722',696,'778',696,'722',696,'583',',0.694,0,{ic:0.0778,krn:{"39":0.0778,"63":0.0778,"33":0.0778,"41":0.0778,"93":0.0778},lig:{"105":','14,"108":15}}],[0.556',',0.694],[0.','556',720,'833',720,'833',720,'278',',0.431],[0.','306',',0.431,0.194],[0.','5',720,'5',720,'5,0.628],[0.5',720,'5,0.568],[0.75',720,'444,0,0.17],[0.5',720,'722',728,'778',728,'5,0.528,0.0972],[0.903,0.683],[1.01',696,'778,0.732,0.0486],[0.278',',0.431,0,{','krn:{"108":-0.278,"76":-0.319}}],[0.278',',0.694,0,{','lig:{"96":','60}}],[0.5',720,'833',',0.694,0.194],[','0.5',',0.75,0.0556],[0.','833',757,'778',720,'278',750,'krn:{"63":0.111,"33":0.111},lig:{"39":34}}],[0.389',',0.75,0.25],[0.','389',765,'5,0.75],[','0.778,0.583,0.0833],[','0.278,0.106',',0.194],[0.','333',748,'lig:{"45":','123}}],[',770,'],[0.5',765,'5,0.644','],[0.5,0.644],[0.5,0.','644',780,'644',780,'644',780,'644],[0.5,0.644],[0.278',728,'278',730,'278,0.5',771,'778',',0.367,-0.133],[','0.472,0.5',771,'472',750,751,'62}}],[0.778',720,'75',',0.683,0,{krn:{"','116','":-0.0278,"','67',805,'79',805,'71',805,'85',805,'81',805,'84":-0.0833,"89":-0.0833,"86":-0.111,"87":-0.111}}],[0.','708',696,'722',696,'764',803,'88',805,'87',805,'65',805,'86',805,'89":-','0.0278}}],[0.','681',696,'653',',0.683,0,{','krn:{"111":-0.0833,"101":-0.0833,"117":-0.0833,"114":-0.0833,"97":-0.0833,"65":-0.111,"79":-0.0278,"67":-0.0278,"71":-0.0278,"81":-0.0278}}],[','0.785',696,'75',696,'361',803,'73":',832,'514',696,'778',803,'79',805,'67',805,'71',805,'81":-',832,'625',803,816,'917',696,'75',696,'778',803,'88',805,'87',805,'65',805,'86',805,'89":-',832,'681',803,'65','":-0.0833,"','111',805,'101',805,'97',805,'46',880,'44":-0.','0833}}],[0.','778,0.683',771,'736',803,'116',805,'67',805,'79',805,'71',805,'85',805,'81',805,816,'556',696,'722',803,'121',805,'101',880,'111',880,'114',880,'97',880,'65',880,'117":-0.',890,'75',696,'75',',0.683,0,{ic:0.','0139,',837,'1.03',929,'0139,',837,'0.75',803,'79',805,'67',805,'71',805,'81":-',832,'75',929,'025,krn:{"101',880,'111',880,'114',880,'97',880,'65',880,924,890,'611',696,'278',765,'5',720,'278',765,'5',720,'278,0.668],[0.','278',750,751,'92}}],[0.5',748,'krn:{"118',805,'106":0.0556,"121',805,'119":-',832,'556,0.','694,0',',{krn:{"101":0.0278,"111":0.0278,"120":-0.0278,"100":0.0278,"99":0.0278,"113":0.0278,"118":-0.0278,"106":0.0556,"121":-0.0278,"119":-0.0278}}],[0.','444',748,'krn:{"104',805,'107":-',832,'556',720,'444',728,'306',718,'12,"102":11,"108":13}}],[0.5',',0.431,0.194,{','ic:0.','0139,krn:{"','106":',832,'556',750,'krn:{"116',805,'117',805,'98',805,'121',805,'118',805,'119":-',832,970,'306,0.668',771,'528',750,'krn:{"97','":-0.0556,"','101',805,'97',805,'111',805,'99":-',832,'278',720,'833',748,'krn:{"116',805,'117',805,'98',805,'121',805,'118',805,'119":-',832,'556',748,'krn:{"116',805,'117',805,'98',805,'121',805,'118',805,'119":-',832,'5,0.431,0',984,982,'431,0.194',984,'528',730,'392',728,'394',728,'389,0.615,0,{krn:{"121',805,'119":-',832,'556',748,'krn:{"119":-',832,'528',',0.431,0,{ic:0.',1000,'97',1023,'101',805,'97',805,'111',805,'99":-',832,'722',1082,1000,'101',805,'97',805,'111',805,'99":-',832,'528',728,'528',998,'ic:0.',1000,'111',805,'101',805,'97',805,'46',880,'44":-0.',890,'444',728,'5',1082,'0278,',774,'124}}],[1',1082,'0278}],[0.','5',720,'5,0.668],[0.5,0.668]],',23,':[[0.615',929,'139',',krn:{"61":-0.0556,"59":-0.111,"58":-0.111,"127":0.',890,'833',803,'127":0.167}}],[0.','763',929,1125,'krn:{"127":0.0833}}],[0.','694',803,1141,'742',929,'0757,',1145,'831',929,'0812,krn:{"61',1023,'59":-0.0556,"58":-0.0556,"127":0.','0556}}],[0.','78',929,'0576,',1145,'583',929,'139',1137,1158,'667',836,1145,'612',929,'11,krn:{"61',1023,1157,1158,'772',929,'0502,',1145,'64',1082,'0037,','krn:{"127":',832,'566',',0.694,0.194,{ic:0.','0528,',1145,'518',998,'ic:0.0556','}],[0.444',750,'ic:0.0378,krn:{"',1157,1158,'406',748,'krn:{"127":0.0556}}],[0.','438',1187,'0738,',1145,'497',998,'ic:0.0359',',',1200,'469',750,'ic:0.',1125,1145,'354',748,1200,'576',728,'583',720,'603',998,1184,832,'494',1082,'0637,krn:{"',1157,'0278}}],[0.','438',1187,'046,',1184,'0.111}}],[0.','57',1082,'0359}],[0.','517',998,1145,'571',1082,'0359,krn:{"59',1023,'58":-0.',1158,'437',1082,'113,krn:{"',1157,1230,'54',1082,'0359,',1184,832,'596,0.694,0.194,{',1145,'626',998,1200,'651',1187,'0359,',1184,1235,'622',1082,1238,'466',748,1145,'591',750,1145,'828',1082,1129,'517',998,1145,'363,0.431,0.0972,{ic:0.0799,',1145,'654',998,1184,'0.0833}}],[1',794,'1',794,'1',794,'1',794,'0.278',',0.464,-0.0363],[','0.278',1297,'0.5,0.465,-0.0347],[',1300,'0.5',728,'5',728,'5',728,'5',730,'5',730,'5,0.',1065,780,1065,780,'431',771,'278,0.106],[',770,771,'778',',0.539,0.0391],[','0.5,0.75,0.25,{krn:{"1',1023,'65',1023,'77',1023,'78',1023,'89":0.0556,"90":-0.',1158,'778',1323,1300,'0.531',750,1192,',',1145,'75',803,'127":','0.','139}}],[0.','759',929,'0502,',1145,'715',929,'0715,krn:{"61',805,1157,890,'828',929,1125,1200,'738',929,'0576,',1145,'643',929,'139',1137,890,'786',836,1145,'831',929,'0812,krn:{"61',1023,1157,1158,'44',929,'0785,',1184,1235,'555',929,'0962',1137,'167}}],[0.','849',929,'0715,krn:{"61',1023,1157,1158,'681',803,1344,832,'97',929,'109,krn:{"','61',1023,1157,890,'803',929,1401,'61',880,'61',805,1157,890,'763',929,1125,1145,'642',929,'139',1137,890,'791,0.683,0.194,{',1145,'759',929,'00773,',1145,'613',929,'0576,krn:{"61',1023,1157,890,'584',929,'139,krn:{"61',805,1157,890,'683',929,1401,'59":-0.111,"',1246,'111,"61',1023,1344,832,'583',929,'222',',krn:{"59":-0.167,"58":-0.167,"61":-0.111}}],[0.','944',929,'139',1454,'828',929,'0785,krn:{"61',880,'61',805,1157,890,'581',929,'222',1454,'683',929,'0715,krn:{"61',1023,1157,890,'389,0.75],[0.389',755,'0.389',755,'1,0.358,-0.142],[',1481,'0.417',750,1184,1235,'529',728,'429',720,'433',748,1200,'52',750,'krn:{"89":0.0556,"90',1023,'106":-0.111,"102":-0.167,"',1141,'466',748,1200,'49',1187,'108,krn:{"',1157,1388,'477',998,1207,',',1184,832,'576',750,'krn:{"127":-',832,'345,0.66],[0.412,0.66,0.194,{ic:0.0572,krn:{"59',1023,1246,1158,'521',750,'ic:0.0315}],[0.298',750,'ic:0.0197,',1145,'878',728,'6',728,'485',748,1200,'503',998,1145,'446',998,1207,',',1145,'451',1082,1125,'krn:{"',1157,1158,'469',748,1200,'361,0.615,0,{',1145,'572',748,1184,832,'485',1082,'0359,',1184,832,'716',1082,'0269,',1145,'572',748,1184,832,'49',998,1207,',',1200,'465',1082,'044,',1200,'322',748,1184,832,'384',998,1145,'636',998,1184,1235,'5,0.714,0,{ic:0.154}],[0.278',750,'ic:0.399}]],',34,':[[',769,'0.278,0.444,-0.0556],[',769,1300,769,'0.5,0.444,-0.0556],[',769,769,769,769,769,769,769,'1',755,1601,1601,'0.778',1297,'0.778,0.464,-0.0363','],[0.778,0.636,0.136',1616,1616,1616,1616,1616,'],[0.778',794,'0.778,0.483,-0.0169],[0.778',1323,'0.778',1323,'1',1323,'1',1323,'0.778',1323,'0.778',1323,'1',794,'1',794,'0.5',755,'0.5',755,'1',794,'1',755,'1',755,'0.778',1297,'1',794,'1',794,'0.611',755,'0.611',755,'1',794,'1',755,'1',755,'0.778',728,'275,0.556],[1',728,'667',1323,'0.667',1323,'0.889',755,'0.889',755,'0',755,'0',794,'0.556',720,'556',720,'667',728,'5',757,'722',720,'722',720,'778',720,'778',720,'611',720,'798',803,'48":0.','194}}],[0.657',929,'0304',',krn:{"48":0.',1346,'527',929,'0583',1706,1346,'771',929,'0278',1706,890,'528',929,'0894',1706,'111}}],[0.','719',929,'0993',1706,1722,'595',',0.683,0.0972,{ic:0.','0593',1706,1722,'845',929,'00965',1706,1722,'545',929,'0738,krn:{"48":',832,'678',1729,'185',1706,1388,'762',929,'0144',1706,1158,'69',803,1702,'139}}],[1.2',803,1702,1346,'82',929,'147',1706,890,'796',929,1715,1706,1722,'696',929,'0822',1706,890,'817,0.683,0.0972,{krn:{"48":',1235,'848',803,1702,890,'606',929,'075',1706,1346,'545',929,'254,krn:{"48":',832,'626',929,'0993',1706,890,'613',929,'0822,krn:{"48":',832,'988',929,'0822',1706,890,'713',929,'146',1706,1346,'668',1729,'0822',1706,890,'725',929,'0794',1706,1346,'667,0.556],[0.',1818,1818,1818,1818,'611',720,'611',720,'444',765,'444',765,'444',765,'444',765,'5',765,'5',765,'389',765,'389',765,'278',765,'5',765,'5',765,'611',765,'5',765,'278',755,'0.833,0.04,0.96],[0.75',696,'833',696,'417',1187,'111}],[0.',1818,'667,0.556',1616,1616,'],[0.444',755,'0.444',755,'0.444',755,'0.611',755,'0.778,0.694,0.13','],[',1874,'],[',1874,'],[',1874,']],',45,':[[0.458',',0.04,1.16,{n:','16}],[0.458',1884,'17}],[0.417',1884,'104}],[0.417',1884,'105','}],[0.472,0.04,1.16,{n:','106',1892,'107',1892,'108',1892,'109}],[0.583',1884,'110}],[0.583',1884,'111',1892,'68',1892,'69}],[0.333',',0,0.6,{delim:{','rep:12}}],[0.556',1908,'rep:13}}],[0.578',1884,'46}],[0.578',1884,'47}],[0.597',',0.04,1.76,{n:','18}],[0.597',1916,'19}],[0.736',',0.04,2.36,{n:','32}],[0.736',1920,'33}],[0.528',1920,'34}],[0.528',1920,'35}],[0.583',1920,'36}],[0.583',1920,'37}],[0.583',1920,'38}],[0.583',1920,'39}],[0.75',1920,'40}],[0.75',1920,'41}],[0.75',1920,'42}],[0.75',1920,'43}],[1.04',1920,'44}],[1.04',1920,'45}],[0.792',',0.04,2.96,{n:','48}],[0.792',1948,'49}],[0.583',1948,'50}],[0.583',1948,'51}],[0.639',1948,'52}],[0.639',1948,'53}],[0.639',1948,'54}],[0.639',1948,'55}],[0.806',1948,'56}],[0.806',1948,'57}],[0.806',',0.04,2.96],[','0.806',1968,'1.28',1968,'1.28',1968,'0.811',1916,'30}],[0.811',1916,'31}],[0.875',',0.04,1.76,{delim:{top:','48,bot:64,rep:66}}],[0.875',1980,'49,bot:65,','rep:67}}],[0.','667',1980,'50,bot:52,rep:54}}],[0.667',1980,'51,bot:53,rep:55','}}],[0.667,0.04,1.76,{delim:{bot:','52,rep:54',1990,'53,rep:55}}],[0.667',1908,'top:50,rep:54}}],[0.667',1908,'top:51,rep:55','}}],[0.889,0,0.9,{delim:{top:','56,mid:60,bot:58,rep:62',1998,'57,mid:61,bot:59,rep:62',1998,'56,bot:58,rep:62',1998,'57,bot:59,rep:62','}}],[0.889,0,1.8,{delim:{rep:','63',2006,'119}}],[0.889,0,0.3,{delim:{','rep:62}}],[0.','667',1908,'top:120,bot:121,rep:63}}],[0.875',1980,'56,bot:59,',2010,'875',1980,'57,bot:58,',2010,'875',1908,'rep:66}}],[0.875',1908,1984,'611',1916,'28}],[0.611',1916,'29','}],[0.833,0,1,{n:','71}],[1.11',',0.1,1.5],[','0.472,0,1.11,{ic:0.194,n:','73}],[','0.556,0,2.22,{ic:0.444}],[1.11,0',',1,{n:75}],[1.51,0','.1,1.5],[1.11,0',',1,{n:77}],[1.51,0',2038,',1,{n:79}],[1.51',2033,'1.06,0,1,{n:88}],[0.944,0,1,{n:89}],[',2034,'90',2031,'91',2031,'92',2031,'93',2031,'94',2031,'95}],[1.44',2033,'1.28',2033,2036,2038,2038,2038,2038,'.1,1.5],[0.944,0,1,{n:97}],[1.28',2033,'0.556,0.722,0,{n:','99','}],[1,0.75,0,{n:','100}],[1.44,0.75],[',2066,'102',2068,'103}],[1.44,0.75],[0.472',1916,'20}],[0.472',1916,'21}],[0.528',1916,'22}],[0.528',1916,'23}],[0.528',1916,'24}],[0.528',1916,'25}],[0.667',1916,'26}],[0.667',1916,'27}],[1',1884,'113}],[1',1916,'114}],[1',1920,'115}],[1',1948,'116}],[1.06,0,1.8,{delim:{top:118,bot:116,rep:117}}],[1.06,0,0.6],[1.06,0.04,0.56],[0.778',1908,'top:126,bot:127,rep:119}}],'],
     ['[0.667',',0,0.6,{delim:{','top:120,rep:63','}}],[0.','667',1,'bot:121,rep:63',3,'45,0.12],[0.',8,8,8,'778',1,'top:126,rep:119',3,'778',1,'bot:127,rep:119}}]],cmti10:[[0.627',',0.683,0,{ic:0.','133}],[0.818,0.683],[0.767',19,'094}],[0.','692,0.683],[0.664',19,'153}],[0.743',19,'164}],[0.','716',19,'12}],[0.','767',19,'111}],[0.716',19,'0599}],[0.767',19,'111}],[0.716',19,'103}],[0.','613',',0.694',',0.194,{ic:0.','212,krn:{"39":0.104,"63":0.104,"33":0.104,"41":0.104,"93":0.104},lig:{"105":','14,"108":15',3,'562',41,42,39,'588',41,42,39,'882',41,42,39,'894',41,42,39,'307',',0.431,0,{ic:0.','0767}],[0.','332,0.431',42,'0374}],[0.511',',0.694],[0.','511',',0.694,0,{ic:0.','0969','}],[0.511,0.','628',',0,{ic:0.','083}],[0.511',70,'108',72,'562',74,39,'831',68,'46,0,0.17],[0.537',41,42,'105}],[0.','716',63,'0751','}],[0.716',63,90,72,'528,0.0972,{ic:0.0919}],[0.883',19,30,'985',19,30,'767,0.732,0.0486,{ic:0.',22,'256,0.431,0,{krn:{"108":-0.256,"76":-0.321',3,'307',70,'124,lig:{"96":','60',3,'514',70,'0696}],[0.818',41,42,'0662}],[0.769',68,'818',',0.75,0.0556',',{ic:0.136}],[0.','767',70,'0969}],[0.307',70,'124',',krn:{"','63":0.102,"33":0.102},lig:{"39":34',3,'409',',0.75,0.25,{ic:0.','162}],[0.409',129,'0369',72,'75',74,'149}],[0.767,0.562,0.0567,{ic:0.0369','}],[0.307,0.','106',',0.194],[0.','358',63,'0283,lig:{"45":123',3,'307,0.106],[0.511',129,'162',72,'644,0',',{ic:0.136}],[0.511,0.644,0',149,149,149,'.194',149,149,149,153,149,149,119,'307',63,'0582',137,'431',42,'0582',137,'5',42,'0756}],[0.767,0.367,-0.133,{ic:0.0662',72,'5',139,'511',70,'122,lig:{"96":62',3,'767',70,'096}],[0.743,0.683,0,{','krn:{"110":-0.0256,"108":-0.0256,"114":-0.0256,"117":-0.0256,"109":-0.0256,"116":-0.0256,"105":-0.0256,"67":-0.0256,"79":-0.0256,"71":-0.0256,"104":-0.0256,"98":-0.0256,"85":-0.0256,"107":-0.0256,"118":-0.0256,"119":-0.0256,"81":-','0.0256,"84','":-0.0767,"','89',184,'86','":-0.102,"','87',188,'101":-0.0511,"97":-0.0511,"111":-0.0511,"100":-0.0511,"99":-0.0511,"103":-0.0511,"113":-0.0511}}],[0.','704',19,39,'716',19,'145}],[0.','755',19,'094',125,'88','":-0.0256,"','87',203,'65',203,'86',203,'89','":-0.0256',3,'678',19,30,'653',19,'133',125,'111',184,'101',184,'117','":-0.0767,"114":-0.0767,"97":-0.0767,"','65',188,'79":-0.0256,"67":-0.0256,"71":-0.0256,"81":-0.0256}}],[0.','774',19,'0872}],[0.743',19,27,'386',19,'158}],[0.525',19,'14}],[0.769',19,'145',125,228,'627,0.683,0,{krn:{"84',184,'89',184,'86',188,'87',188,191,'897',19,27,'743',19,27,'767',19,'094',125,'88',203,'87',203,'65',203,'86',203,'89',211,3,'678',19,'103',125,'65":-0.0767}}],[0.','767,0.683',42,22,'729',19,'0387,',182,'0.0256,"84',184,'89',184,'86',188,'87',188,191,'562',19,30,'716',19,'133',125,'121',184,'101',184,'111',225,'117',184,277,'743',19,27,'743',19,'184',125,'111',184,'101',184,'117',225,'65',188,228,'999',19,'184',125,277,'743',19,'158',125,228,'743',19,'194',125,'101',184,'111',225,'117',184,277,'613',19,197,'307',129,'188}],[0.514',70,'169}],[0.307',129,87,'511',70,'0665',137,'668',74,'118}],[0.307',70,107,'92',3,'511',63,64,'46',70,'0631',125,191,'46',63,'0565',125,191,'511',70,'103',',krn:{"108":0.0511}}],[0.','46',63,90,125,191,'307',41,42,43,'12,"102":11,"108":13}}],[0.','46,0.431',42,'0885}],[0.','511',70,64,'307,0.655',74,'102',137,'655',42,197,'46',70,'108}],[0.','256',70,'103',384,'818',63,64,'562',63,'0767',125,'39":-0.102',3,'511',63,'0631',125,191,'511,0.431',42,'0631',125,191,'46,0.431',42,397,'422',63,'108',125,191,'409',63,'0821}],[0.332,0.615',74,'0949}],[0.537',63,64,'46',63,410,'664',63,'108',384,'464',63,30,'486,0.431',42,397,'409',63,'123}],[0.511',63,'0921',',lig:{"45":124}}],[1.','02',63,'0921}],[0.511',70,'122',72,'668',74,'116',72,'668',74,'105}]],cmbx10:[[0.692',',0.686],[0.','958',481,'894',481,'806',481,'767',481,'9',481,'831',481,'894',481,'831',481,'894',481,'831',481,'671',70,'109,krn:{"39":0.109,"63":0.109,"33":0.109,"41":0.109,"93":0.109},lig:{"105":','14,"108":15',3,'639',68,'639',68,'958',68,'958',68,'319',',0.444],[0.','351,0.444',139,'575',68,'575',68,'575,0.','632],[0.575',68,523,'596],[0.869',68,'511,0,0.17],[0.597',68,'831',516,'894',516,523,'542,0.0972],[1.04,0.686],[1.17',481,'894,0.735,0.0486],[0.319',',0.444,0,{krn:{"','108":-0.319,"76":-0.378',3,'35',',0.694,0,{lig:{"96":','60',3,'603',68,'958',41,139,'575',118,'],[0.958',118,'],[0.894',68,'319',',0.694,0,{krn:{"','63":0.128,"33":0.128},lig:{"39":34',3,'447',',0.75,0.25],[0.','447',562,523,'75],[0.894,0.633,0.133],[0.','319,0.156',139,'383,0.444,0,{lig:{"45":123',3,567,'],[0.575',562,523,'644],[','0.575,0.644],[0.575,0.644],[',576,576,576,'0.',523,'644],[0.319',516,'319,0.444',139,'35,0.5',139,'894,0.391,-0.109],[0.543,0.5',139,'543',543,'62',3,'894',68,'869',',0.686,0,{krn:{"','116','":-0.0319,"','67',599,'79',599,'71',599,'85',599,'81',599,'84":-0.0958,"89":-0.0958,"86":-0.128,"87":-0.128}}],[','0.818',481,'831',481,'882',597,'88',599,'87',599,'65',599,'86',599,'89','":-0.0319}}],[0.','756',481,'724,0.686,0,{','krn:{"111":-0.0958,"101":-0.0958,"117":-0.0958,"114":-0.0958,"97":-0.0958,"65":-0.128,"79":-0.0319,"67":-0.0319,"71":-0.0319,"81":-0.0319}}],[','0.904',481,'9',481,'436',597,'73":0.0319',3,'594',481,'901',597,'79',599,'67',599,'71',599,'81',626,'692',597,610,'1.09',481,'9',481,'864',597,'88',599,'87',599,'65',599,'86',599,'89',626,'786',597,'65":-0.0958,"111',599,'101',599,'97',599,'46":-0.0958,"44":-0.0958}}],[0.','864,0.686',139,'862',597,'116',599,'67',599,'79',599,'71',599,'85',599,'81',599,610,'0.639',481,'8',597,'121',599,'101":-0.0958,"111":-0.0958,"114":-0.0958,"97":-0.0958,"65":-0.0958,"117":-0.0958}}],[0.','885',481,'869,0.686',74,'016,',630,'1.19,0.686',74,'016,',630,'0.869',597,'79',599,'67',599,'71',599,'81',626,'869,0.686',74,'0287',125,702,'703',481,'319',562,'603',68,'319',562,'575',68,'319',68,'319',543,'92',3,'559',539,'118',599,'106":0.0639,"121',599,'119',626,'639',41,',0',',{krn:{"101":0.0319,"111":0.0319,"120":-0.0319,"100":0.0319,"99":0.0319,"113":0.0319,"118":-0.0319,"106":0.0639,"121":-0.0319,"119":-0.0319}}],[0.','511',539,'104',599,'107',626,'639',68,'527',516,'351',70,504,394,523,'444',42,'016',125,'106":0.0319',3,'639',558,'116',599,'117',599,'98',599,'121',599,'118',599,'119',626,'319',68,'351',41,139,'607',558,'97":-0.0639,"101',599,'97',599,'111',599,'99',626,'319',68,'958',539,'116',599,'117',599,'98',599,'121',599,'118',599,'119',626,'639',539,'116',599,'117',599,'98',599,'121',599,'118',599,'119',626,523,'444,0',755,'639,0.444,0',153,755,'607,0.444',139,'474',516,'454',516,'447,0.635,0,{krn:{"121',599,'119',626,'639',539,'119',626,842,74,'016',125,'97":-0.0639,"101',599,'97',599,'111',599,'99',626,'831,0.444',74,'016',125,'101',599,'97',599,'111',599,'99',626,'607',516,842,42,'016',125,'111',599,'101',599,'97',599,678,'511',516,523,'444',74,'0319',467,'15,0.444',74,'0319}],[0.575',68,'575',68,'575',41,']]};','jsMath.Img','={fonts:[50,60,70,85,100,120,144,173,207,249,298,358,430],w:{"50":6.9,"60":8.3,"70":9.7,"85":11.8,"100":13.9,"120":16.7,"144":20,"173":24,"207":28.8,"249":34.6,"298":41.4,"358":49.8,"430":59.8},best:4,update:{},factor:1,loaded:0,SetFont',':function(','B){for(var A in B){if(!','this.update[A',']){',913,']=[]}',913,']=',913,'].concat(B[A])}},AddFont',911,'A,B){if(!',909,'[A]){',909,'[A]={}}jsMath.Add(',909,'[A],B)},UpdateFonts',':function(){','var D=this.update;','if(!this.loaded){','return }for(var A in D){for(var B=0;B<D[A].length;B++){var C=D[A][B];if(C=="all"){for(C in ','jsMath.TeX[','A]){',933,'A][C].img','={}}}else{',933,936,'={}}}}this.update={}},BestSize',929,'var B=jsMath.em*this.factor;var A=','this.w[this.fonts[','0]];for(var C=1;C<this.fonts.length;C++){if(B<(',943,'C]]+2*A)/3){return C-1}A=',943,'C]]}return C-1},Scale',929,931,'return }this.best=this.BestSize();this.em=',909,'.w[this.fonts[this.best]];','this.scale','=(jsMath.em/this.em);','if(Math.abs(',954,'-1)<0.12){',954,'=1}},URL',911,'A,B,E){var D=(','jsMath.Controls.cookie.','alpha)?"/alpha/":"/plain/";','if(E==null','){E="def.js"}else{E="char"+E+".png"}if(B!=""){B+="/"}','return this.','root+A+D+B+E},LoadFont',911,'A){',931,'this.Init()}jsMath.Setup.Script(this.URL(A,""))},Init',929,'if(',963,'print||',963,'stayhires','){',963,'print=',963,978,';this.factor*=3;if(!','jsMath.Controls.','isLocalCookie||!jsMath.Global.isLocal){',985,'SetCookie(0)}if(','jsMath.Browser.','alphaPrintBug){',963,'alpha=0}}var B="0123456789ABCDEF";this.HexCode=[];for(var C=0;C<128;C++){var D=Math.floor(C/16);var A=C-16*D;this.HexCode[C]=B.charAt(D)+B.charAt(A)}this.loaded=1}};jsMath.HTML={Em',911,'A){var C=','5;if(A<0){C++}',956,'A)<0.000001){A=0}var B=String(A);B=B.replace(/(\\.\\d\\d\\d).+/,"$1");return B+"em"},Spacer',911,'A){if(A==0){return""}return ',989,'msieSpaceFix+"<','span class=\\"spacer\\" style=\\"margin-','left:"+this.Em(','A)+"\\"></span>"},Blank',911,'B,E,G,F){var A="";var D="";if(F){D+="border-',1003,'B)+" solid;";if(',989,'widthAddsBorder){B=0}}if(B==0){if(',989,'blankWidthBug){D+="width:1px;";A="<',1002,'right:-1px\\"></span>"}}else{D+="width',':"+this.Em','(B)+";"}if(G==null){G=0}if(E){var C=this.Em(E+G);if(F&&E*jsMath.em<1.5){C="1px";E=1/jsMath.em}D+="height:"+C+";"}if(',989,'mozInlineBlockBug){G=-E}if(',989,'msieBorderBug&&!F){G-=jsMath.d}if(G){D+="vertical-align',1015,'(-G)}return A+"<span class=\\"blank\\" ','style=\\""+','D+"\\"></span>"},Rule',911,'A,B){if(B==null){B','=jsMath.TeX.default_rule_thickness}',967,'Blank(A,B,0,1)},Class',911,'A,B){return"<span class=\\""+A+"\\">"+B+"</span>"},Place',911,'B,A,D){',956,'A',')<0.0001){','A=0}',956,'D',1036,'D=0}if(A||D){var C','="<span style=\\"position',': relative;";if(A){C+=" margin-',1003,'A)+";"}if(D){C+=" top',1015,'(-D)+";"}B=C+"\\">"+B','+"</span>"}return ','B},PlaceSeparateSkips',911,'E,G,F,I,A,H){',956,'G',1036,'G=0}',956,'F',1036,'F=0}if(F){var D=0;var C=0;var B="";if(I!=null){C=A-H;D=I;B=" width',1015,'(A-I)+";"}E=','this.Spacer','(D-C)+"<span style=\\"position: relative; "+"top',1015,'(-F)+";"+"',1003,'C)+";"+B+"\\">"+',1062,'(-D)+E+',1062,'(C)+"</span>"}if(G){E=',1062,'(G)+E}return E},PlaceAbsolute',911,'E,B,H,G,D,C){',956,'B',1036,'B=0}',956,'H',1036,'H=0}var F="";var A="";if(',989,'msieRelativeClipBug&&G!=null){F=',1062,'(-G);B+=G;A=',1062,'(D-C)}E',1042,':absolute','; ',1003,'B)+"; "+"top',1015,'(H)+";\\">"+F+E+A','+"&nbsp;"+"</span','>";return E},','Absolute',911,'C,A,D,E,F,B){if(F!="none"){',956,'F',1036,'F=0}C',1042,1091,'; "+"top:"+','jsMath.HTML.','Em(F)+"; left:0em;\\">"+C',1097,'>"}if(E=="none"){E=0}C+=this.Blank(A,D-E,E);if(',989,'msieAbsoluteBug){C',1042,':relative',';\\">"+C+"</span>"}if(',989,'spanHeightVaries){','C',1042,1116,';"+" width:"+',1109,'Em(A)+";"+" height:"+',1109,'Em(B)+";"+',989,'msieInlineBlockFix+"\\">"+C+"</span>"}else{C',1042,1116,'\\">"+C',1048,'C}};','jsMath.Box','=function(C,E,A,B,D){if(D==null){D=jsMath.d}this.type="typeset";this.w=A;this.h=B;this.d=D;this.bh=B;this.bd=D;this.x=0;this.y=0;this.mw=0;this.Mw=A;this.html=E;this.format=C};jsMath.Add(',1135,',{defaultH:0,Null',929,'return new ',1135,'("null","",0,0,0)},Text',911,'J,I,A,K,H,G){var E=','jsMath.Typeset.AddClass(','I,J);E=','jsMath.Typeset.','AddStyle(','A,K,E);var B','=jsMath.EmBoxFor(','E);var C=',1147,'TeX(A,K);var F=((I=="cmsy10"||I=="cmex10")?B.h-C.h:C.d*B.h/C.hd);var D=new ',1135,'("text",J,B.w,B.h-F,F);D.style=A;D.size=K;D.tclass=I;if(G!=null){D.d=G*C.scale}else{D.d=0}if(H==null||H==1){D.h=0.9*C.M_height}else{D.h=1.1*C.x_height+C.scale*H}return D},TeX',911,'H,A,E,B){var I=',933,'A][H];','if(I.d==null){I.d=0}','if(I.h==null){I.h=','0}if(I.img!=null&&I.c!=""){this.TeXIMG(A,H,',1147,'StyleSize(E,B))}var G=',1147,'TeX(E,B).scale;var D=I.h+',933,'A].dh;var F=new ',1135,'("text",I.c,I.w*G,D*G,I.d*G);F.style=E;F.size=B;if(I.tclass){F.tclass=I.tclass;if(I.img){F.bh=I.img.bh;F.bd=I.img.bd}else{F.bh=G*jsMath.h;F.bd=G*jsMath.d}}else{F.tclass=A;F.bh=G*',933,'A].h;F.bd=G*',933,'A].d;if(',989,'msieFontBug&&','F','.html.match(/&#/)){','F','.html+="<span style=\\"display:none\\">x</span','>"}}return F},TeXfallback',911,'A,D,B,L){var J=',933,'D][A];if(!J.tclass){J.tclass=D}if(J.img!=null){',967,'TeXnonfallback(A,D,B,L)}if(J.h!=null&&J.a==null){J.a=J.h-1.1*jsMath.TeX.x_height}var K=J.a;var I=J.d;var H=this.Text(J.c,J.tclass,B,L,K,I);var E=',1147,'TeX(B,L).scale;if(J.bh!=null){H.bh=J.bh*E;H.bd=J.bd*E}else{var G=H.bd+H.bh;var F=',1145,'H.tclass,H.html);F=',1147,1148,'B,L,F);H.bd',1150,'F+',1109,'Blank(1,G)).h-G;H.bh=G-H.bd;if(E==1){J.bh=H.bh;J.bd=H.bd}}if(jsMath.',1176,'H',1178,'H',1180,'>"}return H},TeXIMG',911,'E,A,R){var M=',933,'E][A];if(M.img.size!=null&&M.img.size==R&&M.img.best!=null&&M.img.best==','jsMath.Img.best','){return }var F=(',909,'.scale!=1);var B=',1209,'+R-4;if(B<0){B=0;F=1','}else{if(','B>=','jsMath.Img.fonts','.length){','B=',1217,'.length-1',';F=1}}var Q=',909,'[',1217,'[B]];var I=Q[E][A];var G=1/',909,'.w[',1217,'[B]];if(B!=',1209,'+R-4){if(M.w!=null){G=M.w/I[0]}else{G*=',1217,'[R]/',1217,'[4]*',1217,'[',1209,']/',1217,'[B]}}var N=I[0]*G;var J=I[1]*G;var L=-I[2]*G;var O;var H=(M.w==null||Math.abs(M.w-N)<0.01)?"":" margin-right:"+',1109,'Em(M.w-N)+";";var D="";A=',909,'.HexCode[A];if(!F&&!',963,'scaleImg){if(2*N<J||(',989,'msieAlphaBug&&',963,'alpha)){D="height',':"+(I[1]*',989,'imgScale',')+"px;"}D+=" width:"+(I[0]*',989,1255,')+"px;";O=-I[2]+"px"}else{if(2*N<J||(',989,'msieAlphaBug&&',963,1252,':"+',1109,'Em(J*',989,1255,')+";"}D+=" width:"+',1109,'Em(N*',989,1255,')+";";O=',1109,'Em(L)}var P=(Math.abs(L)<0.01&&!',989,'valignBug)?"":" vertical-align:"+O+";";var K=',909,'.URL(E,',1217,'[B],A);if(',989,'msieAlphaBug&&',963,'alpha){','M.c="<img src=\\""+','jsMath.blank+"\\" "+"',1023,989,'msieCenterBugFix+D+P+H','+" filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="+"\'"+K+"\', sizingMethod=\'scale\'"+");\\" />"}else{',1287,'K+"\\" ',1023,989,1291,'+"\\" />"}M.tclass="normal";M.img.bh=J+L;M.img.bd=-L;M.img.size=R;M.img.best=',1209,'},Space',911,'A){return ','new jsMath.Box("html",',1109,'Spacer(A),A,0,0)},Rule',911,'A,C){if(C','==null){C',1027,'var B=',1109,'Rule(A,C);return ',1303,'B,A,C,0)},GetChar',911,'B,',994,933,'A][B];','if(C.img!=null){this.TeXIMG(A,B',',4)}if(C.tclass',1308,'.tclass=A}if(!C.computedW){C.w',1150,1145,'C.tclass,C.c)).w',';if(C.h',1308,'.h=',1135,'.defaultH}if(C.d',1308,'.d=0}C.computedW=1}return C},DelimBestFit',911,'E,J,D,G){if(J==0&&D==0){return null}var I;var F;D','=jsMath.TeX.fam[','D];var A=(G.charAt(1)=="S");var B=(G.charAt(0)=="S");while(J!=null){I=',933,'D][J];',1161,1135,'.defaultH}',1160,'F=I.h+I.d;if(I.delim){return[J,D,"",E]}if(A&&0.5*F>=E','){return[J,D,"','SS",0.5*F]}if(B&&0.7*F>=E',1345,'S",0.7*F]}if(F>=E||I.n==null',1345,'T",F]}J=I.n}return null},DelimExtendRelative',911,'I,T,O,V,D){var P=',933,'O][T];var N','=this.GetChar(','P.delim.','top?P','.delim.top:','P.delim.rep,O);var ','A',1355,1359,'M',1355,1356,'bot?P','.delim.bot:',1359,'E=',1145,'A.tclass,A.c);','var J=A.w;var S=A.h+A.d;var F;var B;var K;var L;var R;var Q;if(',1356,'mid){var U',1355,1356,'mid,O);Q','=Math.ceil((I-(','N.h+N.d)-(','U.h+U.d)-(M.h+M.d','))/(2*(A.h+A.d',')));I=2*','Q*(A.h+A.d)+(N.h+N.d)+(','U.h+U.d)+(M.h+M.d);if(D){F=0}else{F=I/2+V}B=F;K=',1109,'Place(',1145,'N.tclass,N.c),0,F-N.h',')+',1109,1386,1145,'M.tclass,M.c),-(','N.w+M.w)/2,F-(I-M.d))+',1109,1386,1145,'U.tclass,U.c),-(M.w+U.w)/2,F-(I+U.h-U.d)/2);L=(J-U','.w)/2;if(Math.abs(L)<0.0001){L=0}if(L){K+=jsMath.HTML.Spacer(L)}F-=N.h+N.d+A.h;for(R=0;R<Q;R++){K+=jsMath.HTML.Place(E,-J,F-R*S)}','F-=I/2-A.h/2;for(R=0;R<Q;R++){K+=',1109,1386,'E,-J,F-R*S)}}else{Q',1378,1379,'M.h+M.d))/(A.h+A.d));if(N.h+N.d<0.9*(A.h+A.d)){Q=Math.max(1,Q)}I=',1383,'M.h+M.d);if(D){F=0}else{F=I/2+V}B=F;K=',1109,1386,1145,1388,');L=(J-N',1399,'K+=',1109,1386,1145,1393,'J+M.w)/2,B-(I-M.d))}if(D){S=N.h}else{S=I/2+V}var G=',1303,'K,A.w,S,I-S);G.bh=',933,'O].h;G.bd=',933,'O].d;return G},DelimExtendAbsolute',911,'I,S,M,U,B){var R=',933,'M];var N=R[S];var J;var L',1355,'N.delim.top?N',1358,'N.delim.rep,M);var ','A',1355,1434,'K',1355,'N.delim.bot?N',1367,1434,'O;var Q;var E;var D;var P;if(N.delim.mid){var T',1355,'N.delim.mid,M);O',1378,'L.h+L.d)-(','T.h+T.d-0.05',')-(','K.h+K.d-0.05',1381,'-0.05',1382,'O*(A.h+A.d-0.05)+(L.h+L.d)+(',1448,')+(',1450,');J=','jsMath.HTML.PlaceAbsolute(',1145,'L.tclass,L.c),0,0);Q=A.h+A.d-0.05;E=L.d-0.05+A.h;D=',1145,'M,A.c);for(P=0;P<O;P++){J+=',1459,'D,0,E+P*Q)}J+=',1459,1145,'T.tclass,T.c),0,E+O*Q-A.h+T.h);E+=O*Q+',1448,';for(P=0;P<O;P++){J+=',1459,'D,0,E+P*Q)}J+=',1459,1145,'K.tclass,K.c),0,E+O*Q-A.h+K.h)}','else{O',1378,1447,1450,'))/(A.h+A.d-0.05));I=',1454,1450,');J=',1459,1145,'L.tclass,L.c),0,0);Q=A.h+A.d-0.05;E=L.d-0.05+A.h;D=',1145,1371,'for(P=0;P<O;P++){J+=',1459,'D,0,E+P*Q)}J+=',1459,1145,1475,'var G=L.w;if(B){Q=L.h;E=0}else{Q=I/2+U;E=Q-L.h}J=',1109,1099,'(J,G,R.h,"none",-E,jsMath.h);var F=',1303,'J,A.w,Q,I-Q);F.bh=',933,'M].h;F.bd=',933,'M].d;return F},Delimiter',911,'B,I,C,G){var A=4;var F=',1147,'TeX(C,A);if(!I','){return this.Space(F.nulldelimiterspace)}','var ','E=this.DelimBestFit(B,I[','2],I[1],C);',965,'||E[3]<B){',1511,'4],I[3],C)}',965,1509,'if(E[2]==""){',967,'DelimExtend(B,E[0],E[1],F.axis_height,G)}var D=',1135,'.TeX(E[0],E[1],E[2],A).Styled();if(G){D.y=-',933,'E[1]].dh*F.scale}else{D.y=-((D.h+D.d)/2-D.d-F.axis_height)}',956,'D.y',1036,'D.y=0}if(D.y){D=',1135,'.SetList([D],E[2],A)}return D},GetCharCode',911,'B){var A',1336,'B[0]];var D=',933,'A];var C=D[B[1]];',1320,'[1],4)}if(C.w',1308,'.w',1150,1145,1326,'}if(C.font',1308,'.font=A}return C},AddClass',911,'B,C,A){if(B==null){B=A}return ',1145,'B,C)},LayoutRelative',911,'V,f,Y,I,J,N,c,X){if(Y==null){Y=[]}if(I==null){I=[]}if(J==null){J=[]}if(c==null){c=1}','if(X==null){X=1}','var k=jsMath.sizes[V]/100;var G=[];var T=[];var U=[];var E=-1000;var F=E;var K=E;var a;var Z;var M',';for(a=0;a<f.length;a++){','if(J[a]==null){J[a]=0}M=f[a];T[a]=c*jsMath.h*k;U[a]=c*jsMath.d*k;for(Z=0;Z<M.length;Z++){M[Z]=M[Z','].Remeasured();if(','M[Z].h>T[a]){T[a]=M[Z].h}if(M[Z].d>U[a]){U[a]=M[Z].d}if(Z>=G',1218,'G[Z]=M[Z].w',1215,'M[Z].w>G[Z]){',1561,'}}if(M[Z].bh>F){F=M[Z].bh}if(M[Z].bd>K){K=M[Z].bd}}}if(J[f','.length]==null){','J[f.length]=0}if(F==E){F=0}if(K==E){K=0}var A=c','*(jsMath.hd-0.01)*','k;var S=(N||1)*k/6;var R="";var L=0;var e=0;var Q;var b;var O;var P;var C;var B;for(Z=0;Z<G.length;Z++){C=[];O=-T[0]-J[0];L=0',1556,'B=f[a][Z','];if(B&&B.format!="null"){if(','Y[Z]=="l"){Q=0',1215,'Y[Z]=="r"){Q=G[Z]-B.w}else{Q=(G[Z]-B.w)/2}}B.x=Q-L;L=B.w+Q;B.y=O;C[C.length]=B}if(a+1<f',1218,'O-=Math.max(A,U[a]+T[a+1])+S+J[a+1]}}if(I[Z]==null){I[Z]=k}if(C.length>0){P=',1135,'.SetList(C,"T",V);R+=',1109,1386,'P.html,e,0);e=G[Z]-P.w+I[Z]}else{e+=I[Z]}}Q=-I[G',1221,'];O=(T',1221,')*S+J[0];for(a=0;a<G.length;a++){Q+=G[a]+I[a]}for(a=0;a<T.length;a++){O','+=Math.max(A,','T[a]+U[a])+J[a+1]}b=O','/2+jsMath.TeX.axis_height;var ','g=O-b;R+=',1109,'Spacer(e-I[G',1221,']+X*k/6);R=',1109,1386,'R,X*k/6,b);P=',1303,'R,Q+X*k/3,b,g);P.bh=F;P.bd=K;return P},LayoutAbsolute',911,'R,Z,U,E,F,I,X,S){if(U==null){U=[]}',965,'){E=[]}if(F==null){F=[]}',1554,'if(S==null){S=1}var b=jsMath.sizes[R]/100;var A=X',1568,'b;var N=(I||1)*b/6;var C=[];var O=[];var Q=[];var P=0;var Y;var L;var J;var V;var T;var G;','for(V=0;V<Z.length;V++){','if(F[V]==null){F[V]=0}G=Z[V];O[V]=X*jsMath.h*b;Q[V]=X*jsMath.d*b;for(T=0;T<G.length;T++){G[T]=G[T',1558,'G[T].h>O[V]){O[V]=G[T].h}if(G[T].d>Q[V]){Q[V]=G[T].d}if(T>=C',1218,'C[T]=G[T].w',1215,'G[T].w>C[T]){',1613,'}}}}if(F[Z',1566,'F[Z.length]=0}J=(O',1221,')*N+F[0];for(V=0;V<O.length;V++){J',1587,'O[V]+Q[V])+F[V+1]}Y=J',1589,'a=J-Y;var M="";var B;P=S*b/6;for(T=0;T<C.length;T++){J=O[0]-Y+F[0];',1608,'B=Z[V][T',1572,'U[T]&&U[T]=="','l"){L=0',1215,1629,'r"){L=C[T]-B.w}else{L=(C[T]-B.w)/2}}M+=',1459,'B.html,P+L,J-Math.max(0,B.bh-jsMath.h*b),B.mw,B.Mw,B.w)}if(V+1<Z',1218,'J',1587,'Q[V]+O[V+1])+N+F[V+1]}}if(E[T]==null){E[T]=b}P+=C[T]+E[T]}P=-E[C',1221,']+S*b/3;for(V=0;V<C.length;V++){P+=C[V]+E[V]}M=',1109,'Spacer(S*b/6',')+M+',1109,1643,');if(',989,1119,'J=Y-jsMath.h}else{J=0}M=',1109,1099,'(M,P,Y+a,a,J,Y);var K=',1303,'M,P+S*b/3,Y,a);return K},InternalMath',911,'G,E){G=G.replace(/@\\(([^)]*)\\)/g,"<$1>");if(!G.match(/\\$|\\\\\\(/)){',967,'Text(G,"normal","T",E).Styled()}var D=0;var B=0;var H;var C="";var A=[];var F;while(D<G',1218,'H=G.charAt(D++);if(H','=="$"){if(C=="$"){','F=jsMath.Parse(G.slice(B,D-','1','),null,E);if(F.error){A[A.length]=this.Text(F.error,"error","T",E,1,0.2)}else{F.Atomize();A[A.length]=F.mlist.Typeset("T",E).Styled()}C="";B=D','}else{','A[A.length]=this.Text(G.slice(B',',D-1','),"normal","T",E,1,0.2);','C="$";B=D}}else{if(H=="\\\\"){',1661,'=="("&&C==""){',1667,',D-2',1669,'C=")";B=D',1215,'H==")"&&C==")"){',1663,'2',1665,'}}}}}',1667,1669,967,'SetList(A,"T",E)},Set',911,'C,B,A,D){if(C&&C.type){if(C.type=="typeset"){return C}if(C.type=="mlist"){C.mlist.Atomize(B,A);return C.mlist.Typeset(B,A)}if(C.type=="text"){C=this.Text(C.text,C.tclass,B,A,C.ascend||null,C.descend||null',');if(D!=0){C.Styled()}return C}','C=this.TeX(C.c,C.font,B,A',1689,'return jsMath'],
     ['.Box.Null()},SetList',':function(','D,F,C){var A=[];var G;','for(var B=0;B<','D.length',';B++){','G=D[B];if(G','.type=="','typeset"){G=','jsMath.mItem','.','Typeset','(G)}A[A','.length]=','G}','var E=','new ','jsMath.Typeset','(A);','return ','E.',11,'(F,C)}});','jsMath.','Package(','jsMath.Box',',{Styled',':function(){','if(this.','format=="text"){','this.html','=',17,'.AddClass(','this.tclass',',',30,');',30,'=',17,'.AddStyle(','this.style',',this.size,',30,');delete ',34,';delete ',42,';this.format="html"}',19,'this},','Remeasured',27,28,'w>0){this.w=',23,'EmBoxFor(',30,').w}',19,'this}});',9,'=function(A',',B','){this.type','=A;',23,'Add(','this,B)};',23,68,9,',{Atom',1,'B,A){',19,'new ',9,'(B,{','atom:1,nuc:A})},','TextAtom',1,'C,F,B,A,E){var D=new ',9,'(C',',{atom:1,nuc:{type:"','text",text:F,tclass:B}});if(A','!=null){D.nuc.','ascend=A}if(E',88,'descend=E}',19,'D},TeXAtom',1,'B,','C,A){',19,'new ',9,'(B',86,'TeX",c:C,font:A}})},Fraction',1,'B,A,F,D,E,C){',19,'new ',9,'("fraction",{from:B,num:A,den:F,','thickness',':D,left:E,right:C})},Space',1,'A){',19,'new ',9,'("space",{w:A})},',11,1,'A){',19,'new ',9,'("ord",{',80,'HTML',1,'A){',19,'new ',9,'("html",{html:A})}});',23,'mList','=function(D,A,B,C){','if(D){','this.mlist','=D}else{',136,'=[]}','if(C==null){C','="T"}if(B==null){B=4}','this.data','={openI:null,overI:null,overF:null,font:A,','size:B,style:C','};this.init={',144,'}};',23,'Package(',23,133,',{Add',1,'A){return(',136,'[','this.mlist.length',']=A)},Get',1,'A){',19,136,'[A]},Length',27,19,157,'},Last',27,'if(',157,'==0){',19,'null}',19,136,'[',157,'-1]},Range',1,75,'if(A==null){A=',157,'}',19,'new ',23,133,'(',136,'.slice(B,A+1))},Delete',1,'D,C){',140,'=D}if(',136,'.splice){',136,'.splice(D,C-D+1)}else{var A=[];',3,157,5,'if(B<D||B>C){A[A',13,136,'[B]}}',136,'=A}},Open',1,'D){var C=','this.Add(','new ',9,'("boundary",{','data:',142,'}));','var A=',142,';',142,'={};for(var B in A){',142,'[B]=A[B]}delete ',142,'.overI',47,142,'.overF;',142,'.openI','=',157,'-1;if(D!=null){C.left=D}',19,'C},Close',1,'C){if(C!=null){C=new ',9,213,'right:C})}var E;','var B=',142,230,';var F=',142,'.overI;','var G=',142,228,142,'=',136,'[B].data;if(F){E=',9,'.Fraction(','G.name,{','type:"mlist",mlist:this.Range(','B+1,F-1)},{',257,'F)},G.',109,',G.left,G.right);if(C){',217,'new ',23,133,'([',136,'[B],E,C]);E=',9,'.Atom("inner",{type:"mlist",mlist:A})}}else{var D=B+1;if(C){',210,'C);D--}E=',9,'.Atom((C)?"inner":"ord",{',257,'D)})}this.Delete(B,this.Length());',19,210,'E)},Over',27,241,142,246,'var C=',142,228,217,9,255,'C.name,{',257,'open+1,B-1)},{',257,'B)},C.',109,',C.left,C.right);',136,'=[A]},Atomize',1,192,'var A;var E="";',42,'=D;this.size=C;',3,157,5,'A=',136,'[B];A.delta=0;if(A',7,'choice"){',136,'=this.Atomize.choice(',42,',A,B,',136,');B--}else{',28,'Atomize[A.type',']){var F=this.',320,'];F(',42,43,'A,E,this,B)}}E=A}if(A&&A',7,'bin"){A','.type="ord"}','if(',157,'>=2&&A',7,'boundary"&&',136,'[0].type=="boundary"){this.','AddDelimiters','(D,C)}},',337,1,'A,N){var M=-10000;',15,'M;',247,'M;for(var D=0;D<',157,';D++){var F=',136,'[D];if(F.atom||F',7,'box"){E','=Math.max(','E,F.nuc.h+F.nuc.y);G',352,'G,F.nuc.d-F.nuc.y)}}var C=',23,'TeX;var I=',17,'.TeX(A,N).','axis_height',';var L',352,'E-I,G+I);var K',352,'Math.floor(C.integer*L/500)*C.delimiterfactor,C.integer*(2*L-C.delimitershortfall))/C.integer;',241,136,'[0];var J=',136,'[',157,'-1];B.nuc=',25,'.Delimiter(','K,B.left,A);J.nuc=',25,374,'K,J.right,A);B.type="open";B.atom=1',47,'B.left;J.type="close";J.atom=1',47,'J.right},',11,1,96,241,'new ',17,'(',136,');',19,'B.',11,'(C,A)}});',23,68,23,133,'.prototype.Atomize,{style',1,'D,C,A,E,B){B.','style=A.style},size',1,402,'size=A.size},phantom',1,'C,B,A){var D=','A.nuc=',25,'.Set(','A.phantom',',C,B);if(A.h){D.',52,'();D.html=','jsMath.HTML.Spacer','(D.w)}else{D.html="",D.w=D.Mw=D.mw=0}if(!A.v){','D.h=D.d=0','}D.bd=D.bh=0',47,412,';A.type="box"},','smash',1,408,409,25,'.Set(A.smash,C,B',').Remeasured();',418,47,'A.smash',422,'raise',1,'C,B,A){',409,25,'.Set(A.nuc,','C,B);var D=A.raise;','A.nuc.html','=',23,'HTML.Place(',441,',0,D,A.nuc.mw,A.nuc.Mw,A.nuc.w);A.nuc.h+=D;A.nuc.d-=D;A','.type="ord";','A.atom=1},lap',1,'D,',96,15,25,439,'D,C',429,'var B=[E];if(A.lap=="llap"){E.x=-E.w}','else{if(A.lap=="','rlap"){B[1]=',9,'.Space(-E.w)}',458,'ulap"){E.y=E.d;E.h=E.d=0}',458,'dlap"){E.y=-E.h;E.h=E.d=0}}}}A','.nuc=jsMath.Box.SetList','(B,D,C);if(A.lap=="ulap"||A.lap=="dlap"){A.nuc.h=A.nuc.d=0}A.type="box";delete A.atom},bin',1,'D,B,A,E){if(E&&E.type){var C=E.type;if(C=="bin"||C=="op"||C=="rel"||C=="open"||C=="punct"||C==""||(C=="',334,'E.left!="")){A.type="ord"}}else{A',329,'jsMath.mList.prototype.Atomize.SupSub(','D,B,A)},rel',1,'C,B,A,D){if(D.type&&D',7,'bin"){D',329,473,'C,B,A)},','close',1,'C,B,A,D){if(D.type&&D',7,'bin"){D',329,473,481,'punct',1,'C,B,A,D){if(D.type&&D',7,'bin"){D',329,473,481,'open',1,436,473,481,'inner',1,436,473,481,'vcenter',1,408,25,439,'C,B);',15,17,'.TeX(C,B);D.y=E.',360,'-(D.h-D.d)/2;',409,'D;A',447,473,481,'overline',1,'D,',96,247,17,'.TeX(D,','C);',15,25,439,17,'.PrimeStyle(','D),C',429,241,'G','.default_rule_thickness',244,25,'.Rule(E.w,B);F.x=-F.w;F.y','=E.h+3*B;A',466,'([E,F],D,C);A.nuc.','h+=B;A',447,473,'D,C,A)},','underline',1,'D,',96,247,17,530,'C);',15,25,439,17,536,'D),C',429,241,'G',541,244,25,544,'=-E.d-3*B-B;A',466,547,'d+=B;A',447,473,551,'radical',1,'B,M,G){var D=',17,'.TeX(B,M);var K=',17,536,'B);var F=',25,'.Set(G.nuc,K,M',429,'var L=D',541,';var C=L;if(B=="D"||B=="D\'"){C=D.x_height}',217,'L+C/4;',15,25,374,'F.h+F.d+A+L,[0,2,112,3,112],B,1);if(E.d>F.h+F.d+A){A=(A+E.d-F.h-F.d)/2}E.y=F.h+A;var J=',25,'.Rule(F.w,L);J.y=E.y-L/2;J.h+=3*L/2;F.x=-F.w;var I=',17,'.UpStyle(',17,603,'B));var H=',25,'.Set(G.root||null,I,M',429,'if(G.root){H.y=0.55*(F.h+F.d+3*L+A)-F.d;E.x',352,'H.w-(11/18)*E.w,0);J.x=(7/18)*E.w;H.x=-(H.w+J.x)}G',466,'([E,H,J,F],B,M);G',447,473,'B,M,G)},accent',1,'B,P,I){',15,17,'.TeX(B,P);var L=',17,536,'B);var H=',25,'.Set(I.nuc,L,P);var N=H.w;var O;var J;var C=0;if(I.nuc',7,'TeX"){','J=',23,'TeX[I.nuc.font];if(J[I.nuc.c].krn&&J.skewchar){O=J[I.nuc.c].krn[J.skewchar]}C=J[I.nuc.c].ic;',140,'=0}}if(O==null){O=0}var K=I.accent[2];var D=',23,'TeX.fam[I.accent[1]];J=',23,'TeX[D];while(J[K].n&&J[J[K].n].w<=N){K=J[K].n}var M=Math.min(H.h,E.x_height);if(I.nuc',7,629,247,9,'.Atom("ord",I.nuc);G.sup=I.sup;G.sub=I.sub;G.delta=0;',473,'B,P,G);M+=(G.nuc.h-H.h);H=I.nuc=G.nuc',47,'I.sup',47,'I.sub}var F=',25,'.TeX(K,D,B,P);F.y=H.h-M;F.x=-H.w+O+(N-F.w)/2;if(',23,'Browser.msieAccentBug){F.html+=',416,'(0.1);F.w+=0.1;F.Mw+=0.1}if(J[K].ic||C){F.x+=(C-(J[K].ic||0))*E.scale}I',466,'([H,F],B,P);if(I.nuc.w!=H.w){',217,9,'.Space(','H.w-I.nuc.w);I',466,'([I.nuc,A],B,P)}I',447,473,'B,P,I)},op',1,'D,O,J){',247,17,530,'O);var I;J.delta=0;var N=(D','.charAt(0)=="','D");if(J.limits==null&&N){J.limits=1}if(J.nuc',7,629,241,23,'TeX[J.nuc.font][','J.nuc.c];if(N&&B.n){J.nuc.c=B.n;B=',23,679,'B.n]}I=J.nuc=',25,'.Set(J.nuc,D,O',');if(B.ic){J.delta=B.ic*G.scale;if(J.limits||!J.sub||',23,'Browser.msieIntegralBug','){I=J',466,'([I,',9,660,'J.delta)],D,O)}}I.y=-((I.h+I.d)/2-I.d-G.',360,');if(Math.abs(I.y)<0.0001){I.y=0}}if(!I){I=J.nuc=',25,685,').',52,'()}if(J.limits){var F=I.w;var L=I.w;var E=[I];var K=0;var M=0;if(J.sup){var H=',25,'.Set(J.sup,',17,603,'D),O',429,'H.x=((I.w-H.w)/2+J.delta/2)-L;K=G.big_op_spacing5;F',352,'F,H.w);L+=H.x+H.w;H.y=I.h+H.d+I.y+Math.max(G.big_op_spacing1,G.big_op_spacing3-H.d);E[E',13,'H',47,'J.sup}if(J.sub){',217,25,'.Set(J.sub,',17,'.DownStyle(','D),O',429,'A.x=((I.w-A.w)/2-J.delta/2)-L;M=G.big_op_spacing5;F',352,'F,A.w);L+=A.x+A.w;A.y=-I.d-A.h+I.y-Math.max(G.big_op_spacing2,G.big_op_spacing4-A.h);E[E',13,'A',47,'J.sub}if(F>I.w){I.x=(F-I.w)/2;L+=I.x}if(L<F){E[E',13,9,660,'F-L)}J',466,'(E,D,O);J.nuc.h+=K;J.nuc.d+=M','}else{if(',23,688,'&&J.sub&&B&&B.ic){J',466,'([I,',25,'.Space(-B.ic*G.scale)],D,O)}else{if(I.y){J',466,'([I],D,O)}}',473,'D,O,J)}},ord',1,'A,I,G,B,F,E){if(G.nuc',7,'TeX"&&!G.sup&&!G.sub){var D=F.mlist[E+1];if(D&&D.atom&&D.type&&(D',7,'ord"||D',7,'op"||D',7,'bin"||D',7,'rel"||D',7,'open"||D',7,'close"||D',7,'punct")){if(D.nuc',7,'TeX"&&D.nuc.font==G.nuc.font){G.textsymbol=1;var H=',23,'TeX[G.nuc.font][G.nuc.c].krn;H*=',17,'.TeX(A,I).scale;if(H&&H[D.nuc.c]){for(var C=F.mlist.length-1;C>E;C--){F.mlist[C+1]=F.mlist[C]}F.mlist[E+1]=',9,660,'H[D.nuc.c])}}}}',473,'A,I,G)},fraction',1,'R,N,B){var U=',17,'.TeX(R,N);var L=0;if(B.',109,'!=null){L=B.',109,735,'B.from.match(/over/)){L=U',541,'}}var Q=(R',673,'D");var F=(R=="D")?"T":(R=="D\'")?"T\'":',17,603,'R);var P=(Q)?"T\'":',17,719,'R);',15,25,'.Set(B.num,F,N',429,'var D=',25,'.Set(B.den,P,N',429,'var K;var J;var I;var O;var M;var G=(Q)?U.delim1:U.delim2;var A=[',25,374,'G,B.left,R)];var S=',25,374,'G,B.right,R);if(E.w<D.w){E.x=(D.w-E.w)/2;D.x=-(E.w+E.x);I=D.w;A[1]=E;A[2]=D}else{D.x=(E.w-D.w)/2;E.x=-(D.w+D.x);I=E.w;A[1]=D;A[2]=E}if(Q){K=U.num1;J=U.denom1}else{K=(L!=0)?U.num2:U.num3;J=U.denom2}if(L==0){O=(Q)?7*U',541,':3*U',541,';M=(K-E.d',')-(D.h-J);if(M<O){','K+=(O-M)/2;J+=(O-M)/2}}else{O=(Q)?3*L:L;var T=U.',360,';M=(K-E.d)-(T+L/2);if(M<O){K+=O-M}M=(T-L/2',814,'J+=O-M}var C=',25,'.Rule(I,L);C.x=-I;C.y=T-L/2;A[A',13,'C}E.y=K;D.y=-J;A[A',13,'S;B',466,'(A,R,N);B',447,'B.atom=1',47,'B.num',47,'B.den;',473,'R,N,B)},SupSub',1,'F,R,L){var H=',17,'.TeX(F,R);var P=L.nuc;var K=L.nuc=',25,'.Set(L.','nuc,F,R,0);if(K.format=="null"){K=L.nuc=',25,'.Text("","normal",F,R)}if(P',7,629,'if(!L.textsymbol){',15,23,'TeX[P.font][P.c];if(E.ic){L.delta=E.ic*H.scale;if(!L.sub){K=L',466,'([K,',25,660,'L.delta)],F,R);L.delta=0}}}else{L.delta=0}}if(!L.sup&&!L.sub){return }L.nuc.Styled();var I=',17,719,'F);var M=',17,603,'F);var D=',17,'.TeX(M,R).','sup_drop;',241,17,'.TeX(I,R).','sub_drop;var O=0;var N=0;var G;if(P.type&&P.type!="text"&&P.type!="TeX"&&P.type!="null"){O=K.h-D;N=K.d+B}if(L.sub){',217,25,841,'sub,I,R);A=',25,'.SetList([','A,',9,'.Space(H.scriptspace)],F,R',')}if(!L.sup){A.y=-Math.max(N,H.sub1,A.h-(4/5)*',17,867,'x_height);L',466,'([K,A],F,R).Styled();delete L.sub;return }var J=',25,841,'sup,M,R);J=',25,874,'J,',9,877,');if(F=="D"){G=H.sup1',735,'F','.charAt(','F','.length-1)=="\'"){','G=H.sup3}else{G=H.sup2}}O',352,'O,G,J.d+',17,863,'x_height/4);if(!L.sub){J.y=O;L',466,'([K,J],F,R',45,'L.sup;return }N',352,'N,',17,867,'sub2);var Q=H',541,';if((O-J.d)-(A.h-N)<4*Q){N=4*Q+A.h-(O-J.d);G=(4/5)*H.x_height-(O-J.d);if(G>0){O+=G;N-=G}}J.',52,'();A.',52,'();J.y=O;A.y=-N;J.x=L.delta;if(J.w+J.x>A.w){J.x-=A.w;L',466,'([K,A,J],F,R)}else{A.x-=(J.w+J.x);L',466,'([K,J,A],F,R)}delete L.sup',47,'L.sub}});',17,63,65,'="typeset";',136,'=A};',23,68,17,',{upStyle:{D:"S",T:"S","','D\'":"S\'","T\'":"S\'",S:"SS','",SS:"SS","','S\'":"SS\'","SS\'":"SS\'"},','downStyle:{D:"S\'",T:"S\'","',935,'\'",SS:"SS\'","',937,'UpStyle',1,'A){',19,'this.upStyle[A]},DownStyle',1,'A){',19,'this.downStyle[A]},PrimeStyle',1,'A){if(A',895,'A',897,19,'A}',19,'A+"\'"},StyleValue',1,75,'if(B=="S"||B=="S\'"){',19,'0.7*A}if(B=="SS"||B=="SS\'"){',19,'0.5*A}',19,'A},StyleSize',1,'B,A){if(B=="S"||B=="S\'"){A=Math.max(0,A-2)}else{if(B=="SS"||B=="SS\'"){A=Math.max(0,A-4)}}return ','A},TeX',1,970,23,'TeXparams[A]},AddStyle',1,436,'if(C=="S"||C=="S\'"){B',352,'0,B-2)}else{if(C=="SS"||C=="SS\'"){B',352,'0,B-4)}}if(B!=4){A="<span class=\\"size"+B+"\\">"+A+"</span>"}',19,'A},AddClass',1,'A,B){if(A!=""&&A!="normal"){B=',23,'HTML.Class(A,B)}',19,'B}});',23,'Package(',17,',{DTsep:{ord',':{op:1,bin:2,rel:3,inner:1},','op',':{ord:1,op:1',',rel:3,inner:1},bin:{ord:2,op:2,open:2,inner:2},rel:{ord:3,op:3,open:3,inner:3},open:{},close',995,'punct',997,',rel:1,open:1,close',':1,punct:1,inner:1','},inner',997,',bin:2,rel:3,open',1003,'}},SSsep:{ord:{op:1},op',997,'},bin:{},rel:{},open:{},close:{op:1},punct:{},inner:{op:1}},sepW:["","thinmuskip","medmuskip","thickmuskip"],','GetSeparation',1,'A,D,B){if(A&&A.atom&&D.atom){var C=this.DTsep;if(B',673,'S"){C=this.SSsep}',15,'C[A.type];if(E&&E[D.type]!=null){',19,23,'TeX[this.sepW[E[D.type]]]}}',19,'0},',11,1,192,42,304,'var G=-10000;this.w=0;this.mw=0;this.Mw=0;this.h=G;this.d=G;this.bh=this.h;this.bd=this.d;this.tbuf="";this.tx=0;',34,'="";','this.cbuf','="";this.hbuf="";this.hx=0;',217,'null;var F;this.x=0;this.dx=0;',3,157,5,'F=A;A=',136,'[B];switch(A.type){case"size":','this.FlushClassed();','this.size=A.size;','A=F;break;case"','style":',1041,'if(',42,895,42,897,42,'=A.style+"\'"}else{',42,'=A.style}',1043,'space":if(typeof (A.w)=="object"){if(',42,895,'1)=="S"){A.w=0.5*A.w[0]/18',735,42,673,'S"){A.w=0.7*A.w[0]/18}else{A.w=A.w[0]/18}}}this.dx+=A.w-0;',1043,'html":',1041,'if(this.hbuf==""){this.hx=this.','x}','this.hbuf+=','A.html;A=F;break;default:if(!A.atom&&A.type!="box"){break}A.nuc.x+=this.dx+this.',1011,'(F,A,',42,');','if(A.nuc.x||A.nuc.y){','A.nuc.Styled()}this.dx=0;this.x=this.x+this.w;',28,'x','+A.nuc.x+A.nuc.','mw','<this.mw){this.mw=this.','x',1079,'mw}',28,'w',1079,'Mw','>this.Mw){this.Mw=this.w',1079,'Mw}this.w+=A.nuc.w+A.nuc.x;if(A.nuc.',29,'if(',34,'!=A.nuc.tclass&&',34,'!=""){','this.FlushText','()}',28,'tbuf==""&&',1031,'==""){this.tx=this.x}this.tbuf+=',441,';',34,'=A.nuc.tclass}else{',1041,1075,'this.Place(A.nuc)}',1067,'x}',1069,441,'}this.h',352,'this.h,A.nuc.h+A.nuc.y);this.bh',352,'this.bh,A.nuc.bh);this.d',352,'this.d,A.nuc.d-A.nuc.y);this.bd',352,'this.bd,A.nuc.bd);break}}',1041,28,'dx){',1069,416,'(this.dx);this.w+=this.dx;',28,'w',1089,'}',28,'w',1081,'w}}',28,'hbuf==""){',19,25,'.Null()}',28,'h==G){this.h=0}',28,'d==G){this.d=0}',15,'new ',25,'("html",this.hbuf,this.w,this.h,this.d);E.bh=this.bh;E.bd=this.bd;E.mw=this.mw;E.Mw=this.Mw;',19,'E},FlushText',27,28,'tbuf','==""){return }',1031,'+=',17,'.AddClass(',34,',this.tbuf);this.tbuf="";',34,'=""},FlushClassed',27,1098,'();',28,'cbuf',1156,1067,'tx}',1069,17,'.AddStyle(',42,43,1031,');',1031,'=""},Place',1,'B){var A="<','span style=\\"position: relative',';";if(B.x){A+=" margin-left:"+',23,'HTML.Em','(B.x)+";"}if(B.y){A+=" top:"+',23,1187,'(-B.y)+";"}B.html=A+"\\">"+B.html+"</span>";','B.h+=B.y;B.d-=B.y;B.x=0;B.y=0','},PlaceSeparateSkips',1,'B){if(B.y){var D=B.Mw-B.w;var C=B.mw;',217,'B.Mw-B.mw;B.html=',416,'(C-D)+"<',1184,'; "+"top:"+',23,1187,'(-B.y)+";"+"left:"+',23,1187,'(D)+"; width:"+',23,1187,'(A)+";\\">"+',416,'(-C)+B.html+',416,'(D)+"</span>"}if(B.x){B.html=',416,'(B.x)+B.html}',1192,'}});',23,'Parse',134,15,'new ',23,'Parser','(D,A,B,C);E.Parse();',19,'E};',23,1225,134,'this.string=D;this.i=0;',136,'=new ',23,133,'(null,A,B,C)};',23,'Package(',23,1225,',{cmd:"\\\\",open:"{",close:"}",letter:/[a-z]/i,number:/[0-9]/,scriptargs:/^((math|text)..|mathcal|[hm]box)$/,mathchar:{"!":[5,0,33],"(":[4,0,40],")":[5,0,41],"*":[2,2,3],"+":[2,0,43],",":[6,1,59],"-":[2,2,0],".":[0,1,58],"/":[0,1,61],":":[3,0,58],";":[6,0,59],"<":[3,1,60],"=":[3,0,61],">":[3,1,62],"?":[5,0,63],"[":[4,0,91],"]":[5,0,93],"|":[0,2,106]},special:{"~":"Tilde","^":"HandleSuperscript","_":"HandleSubscript"," ":"Space","\\x01','":"Space","\\','t',1243,'r',1243,'n":"Space","\'":"Prime","%":"HandleComment","&":"HandleEntry","#":"Hash"},mathchardef:{braceld:[0,3,122],bracerd:[0,3,123],bracelu:[0,3,124],braceru:[0,3,125],alpha:[0,1,11],beta:[0,1,12],gamma:[0,1,13],delta:[0,1,14],epsilon:[0,1,15],zeta:[0,1,16],eta:[0,1,17],theta:[0,1,18],iota:[0,1,19],kappa:[0,1,20],lambda:[0,1,21],mu:[0,1,22],nu:[0,1,23],xi:[0,1,24],pi:[0,1,25],rho:[0,1,26],sigma:[0,1,27],tau:[0,1,28],upsilon:[0,1,29],phi:[0,1,30],chi:[0,1,31],psi:[0,1,32],omega:[0,1,33],varepsilon:[0,1,34],vartheta:[0,1,35],varpi:[0,1,36],varrho:[0,1,37],varsigma:[0,1,38],varphi:[0,1,39],Gamma:[7,0,0],Delta:[7,0,1],Theta:[7,0,2],Lambda:[7,0,3],Xi:[7,0,4],Pi:[7,0,5],Sigma:[7,0,6],Upsilon:[7,0,7],Phi:[7,0,8],Psi:[7,0,9],Omega:[7,0,10],aleph:[0,2,64],imath:[0,1,123],jmath:[0,1,124],ell:[0,1,96],wp:[0,1,125],Re:[0,2,60],Im:[0,2,61],partial:[0,1,64],infty:[0,2,49],prime:[0,2,48],emptyset:[0,2,59],nabla:[0,2,114],surd:[1,2,112],top:[0,2,62],bot:[0,2,63],triangle:[0,2,52],forall:[0,2,56],exists:[0,2,57],neg:[0,2,58],lnot:[0,2,58],flat:[0,1,91],natural:[0,1,92],sharp:[0,1,93],clubsuit:[0,2,124],diamondsuit:[0,2,125],heartsuit:[0,2,126],spadesuit:[0,2,127],coprod:[1,3,96],bigvee:[1,3,87],bigwedge:[1,3,86],biguplus:[1,3,85],bigcap:[1,3,84],bigcup:[1,3,83],intop:[1,3,82],prod:[1,3,81],sum:[1,3,80],bigotimes:[1,3,78],bigoplus:[1,3,76],bigodot:[1,3,74],ointop:[1,3,72],bigsqcup:[1,3,70],smallint:[1,2,115],triangleleft:[2,1,47],triangleright:[2,1,46],bigtriangleup:[2,2,52],bigtriangledown:[2,2,53],wedge:[2,2,94],land:[2,2,94],vee:[2,2,95],lor:[2,2,95],cap:[2,2,92],cup:[2,2,91],ddagger:[2,2,122],dagger:[2,2,121],sqcap:[2,2,117],sqcup:[2,2,116],uplus:[2,2,93],amalg:[2,2,113],diamond:[2,2,5],bullet:[2,2,15],wr:[2,2,111],div:[2,2,4],odot:[2,2,12],oslash:[2,2,11],otimes:[2,2,10],ominus:[2,2,9],oplus:[2,2,8],mp:[2,2,7],pm:[2,2,6],circ:[2,2,14],bigcirc:[2,2,13],setminus:[2,2,110],cdot:[2,2,1],ast:[2,2,3],times:[2,2,2],star:[2,1,63],propto:[3,2,47],sqsubseteq:[3,2,118],sqsupseteq:[3,2,119],parallel:[3,2,107],mid:[3,2,106],dashv:[3,2,97],vdash:[3,2,96],leq:[3,2,20],le:[3,2,20],geq:[3,2,21],ge:[3,2,21],lt:[3,1,60],gt:[3,1,62],succ:[3,2,31],prec:[3,2,30],approx:[3,2,25],succeq:[3,2,23],preceq:[3,2,22],supset:[3,2,27],subset:[3,2,26],supseteq:[3,2,19],subseteq:[3,2,18],"in":[3,2,50],ni:[3,2,51],owns:[3,2,51],gg:[3,2,29],ll:[3,2,28],not:[3,2,54],sim:[3,2,24],simeq:[3,2,39],perp:[3,2,63],equiv:[3,2,17],asymp:[3,2,16],smile:[3,1,94],frown:[3,1,95],Leftrightarrow:[3,2,44],Leftarrow:[3,2,40],Rightarrow:[3,2,41],leftrightarrow:[3,2,36],','leftarrow',':[3,2,32],gets:[3,2,32],rightarrow:[3,2,33],to:[3,2,33],','mapstochar',':[3,2,55],leftharpoonup:[3,1,40],','leftharpoondown',':[3,1,41],rightharpoonup:[3,1,42],rightharpoondown:[3,1,43],nearrow:[3,2,37],searrow:[3,2,38],nwarrow:[3,2,45],swarrow:[3,2,46],minuschar:[3,2,0],hbarchar:[0,0,22],lhook:[3,1,44],rhook:[3,1,45],ldotp:[6,1,58],cdotp:[6,2,1],colon:[6,0,58],"#":[7,0,35],"$":[7,0,36],"%":[7,0,37],"&":[7,0,38]},delimiter:{"(":[0,0,40,3,0],")":[0,0,41,3,1],"[":[0,0,91,3,2],"]":[0,0,93,3,3],"<":[0,2,104,3,10],">":[0',',2,105,3,11],"\\\\','lt":[0',',2,104,3,10],"\\\\','gt":[0,2,105,3,11],"/":[0,0,47,3,14],"|":[0,2,106,3,12],".":[0,0,0,0,0],"\\\\":[','0,2,110,3,15],"\\\\','lmoustache":[4,3,122,3,64],"\\\\rmoustache":[5,3,123,3,65],"\\\\lgroup":[4,6,40,3,58],"\\\\rgroup":[5,6,41,3,59],"\\\\arrowvert','":[0,2,106,3,','60],"\\\\Arrowvert":[0,2,107,3,61],"\\\\bracevert',1261,'62],"\\\\Vert":[0,2,107,3,13],"\\\\|":[0,2,107,3,13],"\\\\vert',1261,'12],"\\\\uparrow":[3,2,34,3,120],"\\\\downarrow":[3,2,35,3,121],"\\\\updownarrow":[3,2,108,3,63],"\\\\Uparrow":[3,2,42,3,126],"\\\\Downarrow":[3,2,43,3,127],"\\\\Updownarrow":[3,2,109,3,119],"\\\\backslash":[',1259,'rangle":[5',1255,'langle":[4',1257,'rbrace":[5,2,103,3,9],"\\\\lbrace":[4,2,102,3,8],"\\\\}":[5,2,103,3,9],"\\\\{":[4,2,102,3,8],"\\\\rceil":[5,2,101,3,7],"\\\\lceil":[4,2,100,3,6],"\\\\rfloor":[5,2,99,3,5],"\\\\lfloor":[4,2,98,3,4],"\\\\lbrack":[0,0,91,3,2],"\\\\rbrack":[0,0,93,3,3]},macros:{displaystyle',':["HandleStyle","','D"],textstyle',1273,'T"],scriptstyle',1273,'S"],scriptscriptstyle',1273,'SS"],rm',':["HandleFont",','0],mit',1281,'1],oldstyle',1281,'1],cal',1281,'2],it',1281,'4],bf',1281,'6],font',':["Extension","','font"],left:"HandleLeft",right:"HandleRight",arcsin',':["NamedOp",0],','arccos',1295,'arctan',1295,'arg',1295,'cos',1295,'cosh',1295,'cot',1295,'coth',1295,'csc',1295,'deg',1295,'det',':"NamedOp",','dim',1295,'exp',1295,'gcd',1315,'hom',1295,'inf',1315,'ker',1295,'lg',1295,'lim',1315,'liminf',':["NamedOp",null,"lim<span style=\\"margin-left: "+1/6+"em\\"></span>','inf"],limsup',1333,'sup"],ln',1295,'log',1295,'max',1315,'min',1315,'Pr',1315,'sec',1295,'sin',1295,'sinh',1295,'sup',1315,'tan',1295,'tanh',1295,508,':["HandleAtom","',508,'"],',524,1359,524,'"],',552,1359,552,'"],over',':"HandleOver",','overwithdelims',1370,'atop',1370,'atopwithdelims',1370,'above',1370,'abovewithdelims',1370,'brace',':["HandleOver','","\\\\{","\\\\}"],brack',1382,'","[","]"],choose',1382,'","(",")"],overbrace',':["Extension","leaders"],','underbrace',1388,'overrightarrow',1388,'underrightarrow',1388,'overleftarrow',1388,'underleftarrow',1388,'overleftrightarrow',1388,'underleftrightarrow',1388,'overset',':["Extension","underset-overset"],','underset',1404,'llap',':"HandleLap",','rlap',1408,'ulap',1408,'dlap',1408,'raise:"RaiseLower",lower:"RaiseLower",moveleft',':"MoveLeftRight",','moveright',1416,'frac:"Frac",root:"Root",sqrt:"Sqrt",hbar',':["Macro","\\\\','hbarchar\\\\kern-.5em h"],ne',1420,'not="],neq',1420,'not="],notin',1420,'mathrel{\\\\','rlap{\\\\kern2mu/}}\\\\in"],cong',1420,1427,'lower2mu{\\\\mathrel{{\\\\rlap{=}\\\\raise6mu\\\\sim}}}}"],bmod',1420,'mathbin{\\\\rm mod}"],pmod',1420,'kern 18mu ({\\\\rm mod}\\\\,\\\\,#1)",1],"int":["Macro","\\\\intop\\\\nolimits"],oint',1420,'ointop\\\\nolimits"],doteq',1420,'buildrel\\\\textstyle.\\\\over="],ldots',1420,'mathinner{\\\\','ldotp\\\\ldotp\\\\ldotp}"],cdots',1420,1441,'cdotp\\\\cdotp\\\\cdotp}"],vdots',1420,1441,'rlap{\\\\raise8pt{.\\\\rule 0pt 6pt 0pt}}\\\\rlap{\\\\raise4pt{.}}.}"],ddots',1420,1441,'kern1mu\\\\raise7pt{\\\\rule 0pt 7pt 0pt .}\\\\kern2mu\\\\raise4pt{.}\\\\kern2mu\\\\raise1pt{.}\\\\kern1mu}"],joinrel',1420,1427,'kern-4mu}"],relbar',1420,1427,'smash-}"],Relbar',1420,'mathrel="],bowtie',1420,'mathrel\\\\triangleright\\\\joinrel\\\\mathrel\\\\triangleleft"],models',1420,'mathrel|\\\\joinrel="],mapsto',1420,1427,1251,'\\\\rightarrow}"],rightleftharpoons',1420,508,'{\\\\',1427,'rlap{\\\\raise3mu{\\\\rightharpoonup}}}\\\\',1253,'}"],hookrightarrow',1420,'lhook','\\\\joinrel\\\\rightarrow','"],hookleftarrow',1420,'leftarrow\\\\joinrel\\\\','rhook"],Longrightarrow',1420,'Relbar\\\\joinrel\\\\','Rightarrow"],','longrightarrow',1420,'relbar',1477,'"],longleftarrow',1420,1480,'relbar"],Longleftarrow',1420,'Leftarrow\\\\joinrel\\\\','Relbar"],longmapsto',1420,1427,1251,'\\\\minuschar',1477,'}"],longleftrightarrow',1420,1249,1477,'"],','Longleftrightarrow',1420,1494,1484,'iff:["Macro","\\\\;\\\\',1506,'\\\\;"],mathcal',':["Macro","{\\\\','cal #1}",1],mathrm',1513,'rm #1}",1],mathbf',1513,'bf #1}",1],','mathbb',1513,1518,'mathit',1513,'it #1}",1],textrm',1420,'mathord{\\\\hbox{#1}}",1],textit',1420,'mathord{\\\\class{','textit','}{\\\\hbox{#1}}}",1],','textbf',1420,1528,1531,1530,'pmb',1420,'rlap{#1}\\\\kern1px{#1}",1],TeX:["Macro","T\\\\kern-.1667em\\\\lower.5ex{E}\\\\kern-.125em X"],limits:["Limits",1],nolimits:["Limits",0],",":["Spacer",1/6],":":["Spacer",1/6],">":["Spacer",2/9],";":["Spacer",5/18],"!":["Spacer",-1/6],enspace:["Spacer",1/2],quad:["Spacer",1],qquad:["Spacer",2],thinspace:["Spacer",1/6],negthinspace:["Spacer",-1/6],hskip:"Hskip",kern:"Hskip",rule:["Rule","colored"],space:["Rule","blank"],big',':["MakeBig","','ord",0.85],Big',1539,'ord",1.15],bigg',1539,'ord",1.45],Bigg',1539,'ord",1.75],bigl',1539,'open",0.85],Bigl',1539,'open",1.','15],biggl',1539,1550,'45],Biggl',1539,1550,'75],bigr',1539,'close",0.85],Bigr',1539,'close",1.','15],biggr',1539,1561,'45],Biggr',1539,1561,'75],bigm',1539,'rel",0.85],Bigm',1539,'rel",1.15],biggm',1539,'rel",1.45],Biggm',1539,'rel",1.75],mathord',1359,'ord"],mathop',1359,'op"],mathopen',1359,'open"],mathclose',1359,'close"],mathbin',1359,'bin"],mathrel',1359,'rel"],mathpunct',1359,'punct"],mathinner',1359,'inner"],','mathchoice',1293,1593,'"],buildrel:"BuildRel",hbox:"HBox",text:"HBox",mbox:"HBox",fbox',1293,'fbox"],strut:"Strut",mathstrut',1420,'vphantom{(}"],phantom:["Phantom",1,1],vphantom:["Phantom",1,0],hphantom:["Phantom",0,1],smash:"Smash",acute',':["MathAccent",[7,0,','19]],grave',1601,'18]],ddot',1601,'127]],tilde:["'],
     ['MathAccent','",[','7,0,','126]],bar',':["MathAccent",[',2,'22]],breve',4,2,'21]],check',4,2,'20]],hat',4,2,'94]],vec',4,'0,1,126]],dot',4,2,'95]],widetilde',4,'0,3,101]],widehat',4,'0,3,98]],"_":["','Replace","ord','","_","normal",-0.4,0.1]," ":["Replace","','ord","&nbsp;","normal','"],angle:["',25,'","&#x2220;","normal"],matrix:"Matrix",array:"Matrix",pmatrix:["Matrix','","(",")","c"],','cases:["Matrix","\\\\{",".",["l","l"],null,2],eqalign',':["Matrix",null,null,["','r","l"],[','5/18],3,"D"],','displaylines',33,'c"],null,3,"D"],cr:"','HandleRow','","\\\\":"',39,'",newline:"',39,'",noalign:"','HandleNoAlign','",eqalignno',33,'r","l","r"],[5/8,3],3,"D"],','leqalignno',33,48,'begin:"Begin",end:"End",tiny',':["HandleSize",','0],Tiny',53,'1],scriptsize',53,'2],small',53,'3],normalsize',53,'4],large',53,'5],Large',53,'6],LARGE',53,'7],huge',53,'8],Huge',53,'9],dots:["Macro","\\\\ldots"],newcommand',':["Extension","','newcommand"],','newenvironment',73,74,'def',73,74,'color',73,'HTML"],','href',73,'HTML"],"class":["','Extension','","',83,'style',73,83,'cssId',73,83,'unicode',73,83,'bbox',73,'bbox"],require:"Require","char":"Char"},','environments',':{array:"Array",matrix',':["Array",null,null,"','c"],pmatrix',':["Array',31,'bmatrix',106,'","[","]","c"],Bmatrix',106,'","\\\\{","\\\\}","c"],vmatrix',106,'","\\\\vert","\\\\vert","c"],Vmatrix',106,'","\\\\Vert","\\\\Vert","c"],cases',106,'","\\\\{",".","ll",null,2],eqnarray',104,'rcl",[5/18,',35,'align',73,'AMSmath"],"',122,'*":["Extension","AMSmath','"],','multline',73,124,128,126,'"],split',73,'AMSmath"],','gather',73,124,136,126,'"]},AddSpecial',':function(','A){for(var B in A){','jsMath.Parser.prototype','.special[',144,'[B]]=A[B]}},Error',142,'A){this.i=','this.string.length',';if(A','.error){','this.error','=A.error}else{if(!this',152,153,'=A}}},nextIsSpace',':function(){','return ','this.string.charAt(this.i',')==" "},trimSpaces',142,'A){','if(typeof (','A)!="string"){',159,'A}',159,'A.replace(/^\\s+|\\s','+/g,"")},','Process',142,'A){var ','C=','this.mlist.','data;','A','=jsMath.Parse(','A,C.font,C.size,C.style',');if(A',152,'this.Error(','A);','return null','}if(A.mlist.Length()==','0){',184,185,'1','){var B=','A.mlist.','Last();if(','B.atom&&B.type=="ord"&&B.nuc&&!B.sub&&!B.sup&&(B.nuc.type=="text"||B.nuc.type=="TeX")){',159,'B.nuc}}return{type:"mlist",mlist:A.mlist}},GetCommand',':function(){var ','A=/^([a-z]+|.) ?/i;var B=A.exec(','this.string.slice(','this.i));','if(B){this.i+=B[1].','length;',159,'B[1]}this.i++;return" "},GetArgument',142,'B,C){while','(this.nextIsSpace()){this.i','++}','if(this.','i>=',150,'){','if(!C){','this.Error("','Missing',' argument for "+B)}',184,'}if(',160,')==this.close){',212,213,'Extra close brace','")}',184,'}if(',160,')==','this.cmd','){this.i++;',159,'this.cmd+','this.GetCommand','()}if(',160,')!=','this.open){',159,160,'++)}var A=++','this.i;var ','D=1;var E="";','while(this.i<this.string.length){','E=',160,'++);if(','E','==this.cmd){this.i++}else{if(','E==',236,'D++}else{if(E','==this.close){','if(D==0){',213,222,'");',184,'}if(--D==0){',159,198,'A,this.i-1)}}}}}',213,'Missing close brace','");',184,'},','ProcessArg',142,'B){var ','A=','this.GetArgument(','B);','if(this.error){return',' null}','return this.Process(A)},','ProcessScriptArg',142,'C){var A=',270,'C);',272,273,'if(A.charAt(0)==',228,190,'A.substr(1);if(B=="frac"){A+="{"+',270,'B)+"}";',272,273,'A+="{"+',270,'B)+"}";',272,' null}}else{if(B','=="sqrt"){A+="["+','this.GetBrackets(','B)+"]";',272,273,'A+="{"+',270,'B)+"}";',272,294,'.match(this.scriptargs)){A+="{"+',270,'B)+"}";',272,' null}}}}}',274,'GetDelimiter',142,'A){while',206,'++}var B=',160,');',208,'i<',150,229,'if(B==',228,'){B="\\\\"+',232,'(A);',272,' null}}','if(','this.delimiter[','B]!=null){',159,330,'B]}}',213,214,' or unrecognized delimiter for "+A);',184,'},GetDimen',142,'A,D){var ','B;var C=0;if',206,'++}if(',160,')=="{"){B=',270,'A)}else{B=',198,'this.i);C=1}',159,'this.ParseDimen(','B,A,C,D)},ParseDimen',142,'C,B,D,E){var A=C.match(/^\\s*([-+]?(\\.\\d+|\\d+(\\.\\d*)?))(pt|em|ex|mu|px)/);if(!A){',213,214,' dimension or its units for "+B);',184,'}if(D){this.i+=A[0].',201,'if',206,'++}}var F=A[1]-0;if(A[4]=="px"){F/=jsMath.em','}else{if(A[4]=="','pt"){F/=10',365,'ex"){F*=','jsMath.TeX','.x_height',365,'mu"){if(E){F=F/18}else{F=[F,"mu"]}}}}}',159,'F},GetNext',158,'while',206,'++}',159,160,')},GetBrackets',142,173,'D','=this.GetNext();if(','D!="["){return""}var C=++',240,'B=0;',242,'D=',160,245,'D=="{"){B++}else{if(D=="}"){','if(B==0){',213,222,' while looking for',' \']\'");',184,'}B--}else{if(D',247,'D=="]"){',394,159,198,'C,this.i-1)}}}}}}',213,'Couldn\'t find',' closing \']\' for argument to "+',231,'A);',184,'},GetUpto',142,'B,C){while',206,'++}var F=',240,'D=0;',242,'var E=',160,245,'E=="{"){',250,'=="}"){',252,213,222,397,' "+',231,'C);',184,'}D--}else{if(E==',228,'){if(',198,'this.i,this.i+','5)=="begin"){D++;this.i+=4}else{if(',198,439,'3)=="end"){if(D>0){D--;this.i+=2}}}',252,'if(',198,439,'C.length)==C){E=',160,'+C.length);if(E.match(/[^a-z]/i)||!C.match(/[a-z]/i)){var A=',198,'F,this.i-1);this.i+=C.',201,159,'A}}}this.i++}}}}',213,408,' "+',231,'C+" for "+B);',184,'},','ProcessUpto',142,'B,C){var ','A=this.GetUpto(B,C);',272,273,274,'GetEnd',142,'C){var A="";var B="";while(B!=C){A+=this.GetUpto("begin{"+C+"}","end");',272,273,'B=','this.GetArgument(this.cmd','+"end");',272,328,159,'A},Space',':function(){},','Prime',142,'C',190,175,192,'B==null||(!B.atom&&B','.type!="box"&&','B','.type!="frac")){','B=','this.mlist.Add(jsMath.mItem.','Atom("ord",{type:null}))}','if(B.sup){',213,'Prime causes double exponent',': use braces to clarify");return',' }var A','="";while(C=="\'"){A+=',228,'+"prime";C',385,'C=="\'"){this.i++}}B','.sup=this.',171,'(A);B.sup.isPrime=1},RaiseLower',142,173,'B','=this.GetDimen(this.cmd+','A,1);',272,' }var C=this.',275,'(',231,'A);',272,' }if(A=="lower"){B=-B}',175,'Add(new jsMath.mItem("','raise",{nuc:C,raise:B}))},MoveLeftRight',142,268,'A',512,'B,1);',272,' }var ','C','=this.ProcessArg(this.cmd+','B);',272,' }if(B=="moveleft"){A=-A}',494,'Space(A','));',494,'Atom("ord",C));',494,'Space(-A))},Require',142,173,'B=',476,'+A);',272,' }B=','jsMath.Extension','.URL(B);if(','jsMath.Setup.','loaded[B]){','return }','this.Extension(null,[','B])},',87,142,'A,B){','jsMath.Translate','.restart=1;if(A','!=null){','delete ',144,'[B[1]||"macros"][A]}',551,'.Require(B[0],',561,'.asynchronous',');throw"restart"},Frac',142,268,'A',533,'B);',272,531,'C',533,'B);',272,' }',494,'Fraction("over",A,C))},Sqrt',142,268,'D=',296,231,'B);',272,500,533,'B);',272,' }var C=jsMath.mItem.Atom("','radical",A);','if(D!=""){C.root=this.',171,'(D);',272,' }}',175,'Add(C)},','Root',142,268,'D=this.',463,'(',231,'B,"of");',272,500,533,'B);',272,597,598,'C.root=D;',175,605,'BuildRel',142,173,'B=this.',463,'(',231,'A,"over");',272,531,'D',533,'A);',272,597,'op",D);C.limits=1;C.sup=B;',175,605,'MakeBig',142,341,'C=D[0];var B=D[1]*jsMath.p_height;var E','=this.GetDelimiter(this.cmd+','A);',272,' }',494,'Atom(C,','jsMath.Box.Delimiter(','B,E,"T")))},Char',142,268,'A=',476,'+B);',272,531,'C=',476,'+B);',272,' }if(!',369,'[A]){',369,'[A]=[];',556,'jsMath.Font.URL(A',')])}else{',494,'Typeset(','jsMath.Box.TeX(C-0,A,"T",',175,'data.size',')))}},Matrix',142,'B,H){var E=',175,'data;var A=',476,'+B);',272,531,'G=','new jsMath.','Parser(A+',228,'+"\\\\",null,','E.size,H[5]||"T");G.matrix=B;G.row=[];G.table=[];G.rspacing=[];G.Parse();if(G',152,182,'G);',555,'G.',39,'(',529,'var D','=jsMath.Box.','Layout(E.size,G.table,H[2]||null,H[3]||null,G.rspacing,H[4]||null);if(H[0]&&H[1]){var F=',652,'D.h+D','.d-jsMath.hd/4,this.delimiter[','H[0]],"T");var C=',652,'D.h+D',706,'H[1]],"T");D',702,'SetList([','F,D,C],E.style,E.size)}',494,'Atom((H','[0]?"inner":"ord"),','D))},HandleEntry',142,'B){','if(!this.','matrix){',182,'B','+" can only appear in a matrix or array");return }if(',175,'data.openI',563,'var A=',175,'Get(',175,727,180,'.left){',213,214,' "+this.cmd+"right','")}else{',213,262,'")}}if(',175,'data.overI',563,175,'Over()}var D=',175,176,175,'Atomize(','D.style,D.size);','var C=',175,674,752,'C.entry=D.entry;delete D.entry;if(!C.entry){C.entry={}}this.row[','this.row.length',']=C;this.mlist=',688,'mList(null,null,D.size,D.style)},',39,142,'A,C){var B;',721,'matrix){',182,231,'A',725,'A=="\\\\"){B=',296,231,'A);',272,' }if(B){B=',352,'B,',231,'A,0,1)}}this.HandleEntry(A);if(!C||',758,'>1||this.row[0].format!="null"){this.table[this.table.length]=this.row}if(B){','this.rspacing[this.table.length',']=B}this.row=[]},',45,142,268,'A=',476,'+B);',272,531,'C=A.replace(/^.*(vskip|vspace)([^a-z])/i,"$2");if(C.length==A','.length){',555,'var D=',352,'C,',231,'RegExp.$1,0,1);',272,' }',783,']=(',783,']||0)+D},Array',142,465,'E=C[2];var I=C[3];if(!E){E=',476,'+"begin{"+B+"}");',272,' }}E=E.replace(/[^clr]/g,"");E=E.split("");var G=',175,682,'C[5]||"T";var K=this.GetEnd(B);',272,531,'F=',688,'Parser(K+',228,691,'G.size,A);F.matrix=B;F.row=[];F.table=[];F.rspacing=[];F.Parse();if(F',152,182,'F);',555,'F.',39,'(',529,'var H',702,'Layout(G.size,F.table,E,I,F.rspacing,C[4],C[6],C[7]);if(C[0]&&C[1]){var D=',652,'H.h+H',706,'C[0]],"T");var J=',652,'H.h+H',706,'C[1]],"T");H',702,713,'D,H,J],G.style,G.size)}',494,'Atom((C',717,'H))},Begin',142,173,'B=',476,548,272,' }if(B.match(/[^a-z*]/i)){',213,'Invalid environment name \\""+B+"\\"");',555,721,102,'[B]){',213,'Unknown environment \\""+B+"\\"");return',515,102,'[B];',164,'C',')=="string"){','C=[C]}this[C[0]](B,C.slice(1))},End',142,173,'B=',476,548,272,' }',182,231,'A+"{"+B+"} without matching "+',228,'+"begin")},Spacer',142,'B,A){',494,538,'-0))},Hskip',142,268,'A',512,'B);',272,' }',494,538,'))},HBox',142,173,'C=',476,548,272,531,'B',702,'InternalMath(C,',175,677,');',494,674,'B))},Rule',142,'B,E){var A',512,529,272,531,'D',512,529,272,531,'F',512,529,272,' }D+=F;var C;if(D!=0){D=Math.max(1.05/jsMath.em,D)}if(D==0||A==0||E=="blank"){C=','jsMath.HTML.','Blank(A,D)}else{C=',932,'Rule(A,D)}if(F){C="<span style=\\"','vertical-align:"+',932,'Em(-F)+"\\">"+C','+"</span>"}',494,674,688,'Box("html",C,A,D-F,F)))},Strut',196,'A=',175,677,';var B',702,'Text("","normal","T",A).Styled();B.bh=B.bd=0;B.h=0.8;B.d=0.3;B.w=B.Mw=0;',494,674,'B))},Phantom',142,465,'A',533,'B);',272,' }',175,523,'phantom",{phantom:A,v:C[0],h:C[1]}))},Smash',142,465,'A',533,'B);',272,' }',175,523,'smash",{smash:A}))},',0,142,'B,',173,'D',533,'B);',272,597,'accent",D);C.accent=A[0];',175,605,'NamedOp',142,'B,D){var ','A=(B.match(/[^acegm-su-z]/))?1:0;var E=(B.match(/[gjpqy]/))?0.2:0;if(D[1]){B=D[1]}var C=jsMath.mItem.','TextAtom("','op",B,"cmr10",A,E);if(D[0]!=null){C.limits=D[0]}',175,605,'Limits',142,'A,C',190,175,'Last();if(!B||B.type!="op"){',182,231,'A+" is allowed only on operators");',555,'B.limits=C[0]},Macro',142,988,'E=D[0];if(D[1]){var A=[];for(var C=0;C<D[1];C++){A[A.length]=',476,'+B);',272,' }}E=this.','SubstituteArgs','(A,E)}this.string=','this.AddArgs(','E,',198,199,'this.i=0},',1012,142,'B,',173,'E="";var D="";var F;var C=0;while(C<A',794,'F=A.charAt(C++);if(F','==',228,'){E+=F+A.charAt(C++)}else{if(F=="#"){',1025,'=="#"){E+=F}else{if(!F.match(/[1-9]/)||F>B',794,213,'Illegal ','macro parameter ','reference");',184,'}D=',1014,1014,'D,E),B[F-1]);E=""}}else{E+=F}}}',159,1014,'D,E)},AddArgs',142,'B,A){if(','A.match(/^[a-z]/i)&&B.match(/(^|[^\\\\])(\\\\\\\\)*\\\\[a-z]+$/i)){B+=" "}',159,'B+A},Replace',142,560,494,'TextAtom(','B[0],B[1],B[2','],B[3]))},Hash',142,'A){',213,'You can\'t use \'',1034,'character #\' in math mode")},Tilde',142,'A){',494,990,27,'"))},HandleLap',142,173,627,266,'();',272,550,175,523,'lap",{nuc:B,lap:A}))},HandleAtom',142,465,'A',533,'B);',272,' }',494,'Atom(C[0],A))},HandleMathCode',142,'A,B','){this.HandleTeXchar(',1053,'])},HandleTeXchar',142,'B,A,C){if(B==7&&',175,'data.font',563,'A=',175,1094,'}A=',369,'.fam[A];if(!',369,'[A]){',369,'[A]=[];',556,671,')])}else{',494,'TeXAtom(',369,'.atom[B],C,A))}},','HandleVariable',142,'A',1088,'7,1,','A.charCodeAt(0))},','HandleNumber',142,'A',1088,2,1118,'HandleOther',142,'A){',494,990,'ord",A,"normal"))},HandleComment',196,'A;',242,'A=',160,245,'A=="\\r"||A=="\\n"){return }}},HandleStyle',142,560,175,'data.style=B[0];',175,523,'style",{style:B[0]}))},HandleSize',142,560,175,677,'=B[0];',175,523,'size",{size:B[0]}))},HandleFont',142,886,175,1094,'=A[0]},HandleCS',196,'B=',232,'();',272,' }',208,'macros[B]){var A=this','.macros','[B];',164,'A',871,'A=[A]}this[A[0]](B,A.slice(1));',555,208,'mathchardef','[','B]){this.HandleMathCode(B,this.',1174,'[B]);',555,'if(',330,231,1176,'delimiter[',231,'B].slice(0,3));',555,213,'Unknown control sequence \'"+',231,'B+"\'")},HandleOpen',158,175,'Open()},HandleClose',158,'if(',175,727,'==null){',213,222,'");return',500,'=',175,'Get(',175,727,');if(!A||A.left',1199,175,'Close()}else{',213,222,' or missing',738,1202,' }},HandleLeft',142,173,'B',646,'A);',272,' }',175,'Open(B)},HandleRight',142,268,'C',646,'B);',272,500,'=',175,'Get(',175,727,180,'&&A.left',563,175,'Close(C)}else{',213,'Extra open brace or missing "+',228,'+"left")}},HandleOver',142,560,'if(',175,744,563,213,'Ambiguous use of "+',231,'A);',555,175,744,'=',175,'Length();',175,'data.overF={name:A};if(B.length>0){',175,'data.overF.','left=',330,'B[0]];',175,1268,'right=',330,'B[1]]}else{if(A.match(/withdelims$/)){',175,1268,'left',646,'A);',272,' }',175,1268,'right',646,'A);',272,' }}else{',175,1268,'left=null;',175,1268,1274,'null}}if(A.match(/^above/)){',175,1268,'thickness',512,'A,1);',272,' }}else{',175,1268,'thickness=null}},HandleSuperscript',196,'A=',175,192,175,744,'==',175,'Length()){A=null}if(A==null||(!A.atom&&A',490,'A',492,'A=',494,495,'if(A.sup){if(A.sup.isPrime){A=',494,495,'else{',213,'Double exponent',499,' }}A',506,275,'("superscript");',272,' }},HandleSubscript',196,'A=',175,192,175,744,'==',175,'Length()){A=null}if(A==null||(!A.atom&&A',490,'A',492,'A=',494,495,'if(A.sub){',213,'Double subscripts',499,' }A.sub=this.',275,'("subscript");',272,' }},Parse',196,'B;',242,'B=',160,'++);',208,'mathchar[',1176,'mathchar[B])}else{',208,'special[B]){this[this',145,'B]](B)}else{',208,'letter','.test(B)){this.',1113,'(B)}else{',208,'number',1376,1119,1378,'this.',1125,'(B)}}}}}if(',175,727,563,'var A=',175,'Get(',175,727,180,'.left){',213,214,738,739,213,262,'")}}if(',175,744,563,175,'Over()}},Atomize',196,'A=',175,'init;if(!this',152,175,751,'A.style,A.size)}},Typeset',196,'F=',175,'init;var D=this.typeset=',175,674,'F.style,F.size);',272,'"<','span class=\\"','error\\">"+',153,939,'if(D.format=="null"){return""}D.Styled().Remeasured();var E=0;var C=0;if(D.bh>D.h&&','D.bh>jsMath.h+0.001){','E=1}if(D.bd>D.d&&D.bd>jsMath.d+0.001){E=1}if(D.h>jsMath.h||D.d>jsMath.d){C=1}var B=D.html;if(E){if(','jsMath.Browser.','allowAbsolute){var G=0;if(',1431,'G=jsMath.h-D.bh}if(',1433,'msieTeXfontBaselineBug&&','jsMath.Controls.cookie.','font=="','tex"){G-=jsMath.d}B=',932,'Absolute(B,D.w,jsMath.h,0,G,jsMath.h)}else{if(',1433,'valignBug){','B="<span style=\\"line-height:"+jsMath.HTML.Em(jsMath.d',')+";\\">"+B',939,'else{var A=',932,'Em(Math.max(0,D.bd-jsMath.hd)/3);',1446,')+";"+" position:relative; top:"+A+"; ',936,'A+"\\">"+B+"</span>"}}C=1}if(C){B+=',932,'Blank(0,D.h+0.05,D.d+0.05)}return"<nobr><',1426,'scale\\">"+B+"</span></nobr>"}});',144,'.AddSpecial({cmd:"HandleCS",open:"HandleOpen",close:"HandleClose"});','jsMath.Add(jsMath,{','Macro',142,173,'C=',144,1166,';C[A]=["Macro"];for(var B=1;B<arguments.',201,'B++){C[A][C[A].length]=arguments[B]}}});',551,'={safeRequire:1,Macro',142,'A,',268,'C=',144,1166,';if(B',1199,'B=A}C[A]=["',87,'",B]},LaTeX',142,'B,',173,'C=',144,'.',102,';C[B]=["Extension",','A,"',102,'"]},Font',142,1045,'A',1199,'A=B+"10"}var C=',144,1166,1492,671,')]},MathChar',142,'C,',173,'D=',369,'.famName[C','];if(D',1199,'D=',369,'.fam.',201,369,'.fam[D]=C;',369,1511,']=D}var B=',144,'.',1174,';for(var E in A){B[E]=[A[E][0],D,A[E][1]]}},Require',142,1045,'this.safeRequire&&(B.match(/\\.\\.\\/|[^-a-z0-9.\\/:_+=%~]/i)||(B.match(/:/)&&B.substr(0,jsMath.root.length)!=jsMath.root))){',553,'loaded[B]=1;',555,553,'Script(this.URL(B),A)},URL',142,'A){A=',169,'+$/g,"");if(!A.match(/^([a-z]+:|\\/|fonts|extensions\\/)/i)){A="extensions/"+A}if(!A.match(/\\.js$/)){A+=".js"}',159,'A}};',1462,171,142,'A){',553,'Body();','jsMath.Script.','Push(',561,',"','Asynchronous','",A)},','ProcessBeforeShowing',142,'A){',553,1546,'var B=(',1439,'asynch?"',1551,'":"','Synchronous','");',1547,1548,561,',B,A)}});',561,'={element:[],cancel:0,Parse',142,'D,C,',173,'B=','jsMath.Global.','cache[D];if(!','B[jsMath.em',']){',1577,']={}}var F=',1577,'][C];if(!F||',173,'E',178,'C,null,null,D);E.Atomize();F=E.Typeset();if(!A){',1577,'][C]=F}}',159,'F},TextMode',142,'B,A){this.Parse("','T",B,A)},DisplayMode',142,1592,'D",B,A)},GetElementText',142,173,627,'recursiveElementText','(A);A.alt=B;if(B.search("&")>=0){','B=B.replace(/&','lt;/g,"<");',1602,'gt;/g,">");',1602,'quot;/g,"\\"");',1602,'amp;/g,"&")}',159,'B},',1600,142,'B){if(','B.nodeValue',563,159,1615,'}if(','B.childNodes.length','==0){return" "}var C="";for(var A=0;A<',1620,';A++){C+=this.',1600,'(B.childNodes[A])}',159,'C},ResetHidden',142,'A){A.innerHTML="<',1426,'jsMath_hiddenSpan\\" style=\\"position:absolute\\"></span>"+',1433,'operaHiddenFix;A.className="";','jsMath.hidden','=A.firstChild;if(!jsMath.BBoxFor("x").w){','jsMath.hidden=jsMath.hiddenTop','}jsMath.ReInit()},','ConvertText',142,'B,A){var C=this.GetElementText(B);this.ResetHidden(B);if(C.match(/^\\s*\\\\nocache([^a-zA-Z])/)){A=true;C=C.replace(/\\s*\\\\nocache/,"")}C=this.Parse("','T','",C,A);B.className="typeset";B.innerHTML=C},','ConvertDisplay',142,1640,'D',1642,'ProcessElement',142,'C){this.restart=0;if(!','C.className','.match(/(^| )math( |$)/)){return',500,'=(',1651,'.toLowerCase().match(/(^| )nocache( |$)/)!=null);try','{if(C.tagName.toLowerCase()=="','div"){this.',1643,'(C,A);C.onclick=jsMath.Click.CheckClick;C.ondblclick=jsMath.Click.CheckDblClick','}else',1657,'span"){this.',1638,1660,'}}}catch(D){if(C.alt',190,'C.alt;B=B.replace(/&/g,"&amp',';");B=B.replace','(/</g,"&lt',1669,'(/>/g,"&gt;");C.innerHTML=B;',1651,'="math";if(A){',1651,'+=" nocache"}}',1636,'}},','ProcessElements',142,'B){',1547,'blocking=','1;if(B>=','this.element.length','||this.cancel){this.','ProcessComplete','();',208,'cancel){','jsMath.Message.','Set("',171,' Math: Canceled");',1691,'Clear()}',1547,1683,'0;',1547,171,'()}else{var A=',1547,'SaveQueue();','this.ProcessElement(this.element[','B]);',1547,'RestoreQueue(A);',208,'restart){',1547,1548,'this,"',1679,'",B);',1547,1683,'0;setTimeout("',1547,171,'()",',1433,'delay)}else{B++;var C=Math.floor(100*B/',1685,');','jsMath.Message.Set("Processing Math',': "+C+"%");setTimeout("',561,'.',1679,'("+B+")",',1433,'delay)}}},',1551,142,'A','){if(!jsMath.initialized){jsMath.Init()}this.element=this.GetMathElements(','A);',1547,1683,'1;this.cancel=0;this',570,'=1;',1726,': 0%",1);setTimeout("',561,'.',1679,'(0)",',1433,'delay)},',1563,142,1045,'A==null',1737,'B);A=0}this',570,'=0;while(A<',1685,'){',1705,'A]);',208,'restart){','jsMath.Synchronize','("',561,'.',1563,'(null,"+A+")");',1547,171,'();',555,'A++}this.',1687,'(1)},GetMathElements',142,'D){var B=[];var A;if(!D){D=','jsMath.document','}',164,'D',871,'D=',1781,'.getElementById(D)}if(!','D.getElementsByTagName','){',184,'}var C=',1789,'("div','");for(A=0;A<C.length;A++){if(C[A].className&&C[A].className.match(/(^| )math( |$)/)){if(jsMath.Browser.renameOK&&D.getElementsByName){C[A].setAttribute("name","_jsMath_")}else{B[B.length]=C[A]}}}','C=',1789,'("span',1795,'if(',1433,'renameOK','&&D','.getElementsByName','){B=D',1804,'("_jsMath_',739,'if(',1634,'.sourceIndex','){B.sort(function(F,E){',159,'F',1811,'-E',1811,'})}}',159,'B},',1687,142,'C){if(',1433,1802,190,1781,1804,1807,'");for(var A=B.length-1;A>=0;A--){B[A].removeAttribute("name")}}',1636,';this.element=[];this.restart=null;',212,1726,': Done");',1691,'Clear()}',1691,'UnBlank();if(',1433,'safariImgBug&&(',1439,1440,'symbol"||',1439,1440,'image")){',208,'timeout){clearTimeout(this.timeout)}this.timeout=setTimeout("','jsMath.window.resizeBy','(-1,0); "+"',1850,'(1,0); "+"',561,'.timeout = null",2000)}},Cancel',158,561,'.cancel=1;if(',1547,'cancelTimer){',1547,'cancelLoad()}}};',1462,'ConvertTeX',142,'A){',1547,'Push(jsMath.tex2math,"',1864,1552,'ConvertTeX2',142,'A){',1547,1868,1871,1552,'ConvertLaTeX',142,'A){',1547,1868,1878,1552,'ConvertCustom',142,'A){',1547,1868,1885,1552,'CustomSearch',142,'C,B,A,D){',1547,1548,'null,function(){jsMath.tex2math.',1892,'(C,B,A,D)})},tex2math:{',1864,482,1871,482,1878,482,1885,482,1892,':function(){}}});',1766,'=',1547,'Synchronize;try{if(','window.parent','!=window&&window.jsMathAutoload){',1914,'.jsMath=jsMath;',1781,'=',1914,'.document;jsMath.window=',1914,'}}catch(err){}',1575,'Register();jsMath.Loaded();jsMath.Controls.GetCookie();',553,'Source();',1575,'Init();',1547,'Init();',553,'Fonts();if(',1781,'.body){',553,'Body()}',553,'User("onload")}}']
   
   ]);
   //end = new Date().getTime();
   //alert(end-start);

Removed from v.1.2  
changed lines
  Added in v.1.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>