/* automatically generated by JSCoverage - do not edit */
try {
  if (typeof top === 'object' && top !== null && typeof top.opener === 'object' && top.opener !== null) {
    // this is a browser window that was opened from another window

    if (! top.opener._$jscoverage) {
      top.opener._$jscoverage = {};
    }
  }
}
catch (e) {}

try {
  if (typeof top === 'object' && top !== null) {
    // this is a browser window

    try {
      if (typeof top.opener === 'object' && top.opener !== null && top.opener._$jscoverage) {
        top._$jscoverage = top.opener._$jscoverage;
      }
    }
    catch (e) {}

    if (! top._$jscoverage) {
      top._$jscoverage = {};
    }
  }
}
catch (e) {}

try {
  if (typeof top === 'object' && top !== null && top._$jscoverage) {
    this._$jscoverage = top._$jscoverage;
  }
}
catch (e) {}
if (! this._$jscoverage) {
  this._$jscoverage = {};
}
if (! _$jscoverage['build/json/json.js']) {
  _$jscoverage['build/json/json.js'] = [];
  _$jscoverage['build/json/json.js'][15] = 0;
  _$jscoverage['build/json/json.js'][17] = 0;
  _$jscoverage['build/json/json.js'][149] = 0;
  _$jscoverage['build/json/json.js'][152] = 0;
  _$jscoverage['build/json/json.js'][153] = 0;
  _$jscoverage['build/json/json.js'][154] = 0;
  _$jscoverage['build/json/json.js'][156] = 0;
  _$jscoverage['build/json/json.js'][174] = 0;
  _$jscoverage['build/json/json.js'][175] = 0;
  _$jscoverage['build/json/json.js'][176] = 0;
  _$jscoverage['build/json/json.js'][177] = 0;
  _$jscoverage['build/json/json.js'][178] = 0;
  _$jscoverage['build/json/json.js'][179] = 0;
  _$jscoverage['build/json/json.js'][180] = 0;
  _$jscoverage['build/json/json.js'][181] = 0;
  _$jscoverage['build/json/json.js'][182] = 0;
  _$jscoverage['build/json/json.js'][184] = 0;
  _$jscoverage['build/json/json.js'][189] = 0;
  _$jscoverage['build/json/json.js'][192] = 0;
  _$jscoverage['build/json/json.js'][204] = 0;
  _$jscoverage['build/json/json.js'][205] = 0;
  _$jscoverage['build/json/json.js'][208] = 0;
  _$jscoverage['build/json/json.js'][209] = 0;
  _$jscoverage['build/json/json.js'][215] = 0;
  _$jscoverage['build/json/json.js'][217] = 0;
  _$jscoverage['build/json/json.js'][220] = 0;
  _$jscoverage['build/json/json.js'][223] = 0;
  _$jscoverage['build/json/json.js'][227] = 0;
  _$jscoverage['build/json/json.js'][235] = 0;
  _$jscoverage['build/json/json.js'][236] = 0;
  _$jscoverage['build/json/json.js'][237] = 0;
  _$jscoverage['build/json/json.js'][245] = 0;
  _$jscoverage['build/json/json.js'][246] = 0;
  _$jscoverage['build/json/json.js'][250] = 0;
  _$jscoverage['build/json/json.js'][251] = 0;
  _$jscoverage['build/json/json.js'][255] = 0;
  _$jscoverage['build/json/json.js'][256] = 0;
  _$jscoverage['build/json/json.js'][257] = 0;
  _$jscoverage['build/json/json.js'][260] = 0;
  _$jscoverage['build/json/json.js'][266] = 0;
  _$jscoverage['build/json/json.js'][267] = 0;
  _$jscoverage['build/json/json.js'][271] = 0;
  _$jscoverage['build/json/json.js'][272] = 0;
  _$jscoverage['build/json/json.js'][273] = 0;
  _$jscoverage['build/json/json.js'][274] = 0;
  _$jscoverage['build/json/json.js'][276] = 0;
  _$jscoverage['build/json/json.js'][281] = 0;
  _$jscoverage['build/json/json.js'][285] = 0;
  _$jscoverage['build/json/json.js'][286] = 0;
  _$jscoverage['build/json/json.js'][296] = 0;
  _$jscoverage['build/json/json.js'][297] = 0;
  _$jscoverage['build/json/json.js'][298] = 0;
  _$jscoverage['build/json/json.js'][299] = 0;
  _$jscoverage['build/json/json.js'][302] = 0;
  _$jscoverage['build/json/json.js'][303] = 0;
  _$jscoverage['build/json/json.js'][306] = 0;
  _$jscoverage['build/json/json.js'][307] = 0;
  _$jscoverage['build/json/json.js'][310] = 0;
  _$jscoverage['build/json/json.js'][314] = 0;
  _$jscoverage['build/json/json.js'][315] = 0;
  _$jscoverage['build/json/json.js'][316] = 0;
  _$jscoverage['build/json/json.js'][317] = 0;
  _$jscoverage['build/json/json.js'][318] = 0;
  _$jscoverage['build/json/json.js'][319] = 0;
  _$jscoverage['build/json/json.js'][323] = 0;
  _$jscoverage['build/json/json.js'][324] = 0;
  _$jscoverage['build/json/json.js'][325] = 0;
  _$jscoverage['build/json/json.js'][329] = 0;
  _$jscoverage['build/json/json.js'][332] = 0;
  _$jscoverage['build/json/json.js'][334] = 0;
  _$jscoverage['build/json/json.js'][335] = 0;
  _$jscoverage['build/json/json.js'][336] = 0;
  _$jscoverage['build/json/json.js'][340] = 0;
  _$jscoverage['build/json/json.js'][341] = 0;
  _$jscoverage['build/json/json.js'][343] = 0;
  _$jscoverage['build/json/json.js'][344] = 0;
  _$jscoverage['build/json/json.js'][345] = 0;
  _$jscoverage['build/json/json.js'][346] = 0;
  _$jscoverage['build/json/json.js'][347] = 0;
  _$jscoverage['build/json/json.js'][354] = 0;
  _$jscoverage['build/json/json.js'][356] = 0;
  _$jscoverage['build/json/json.js'][357] = 0;
  _$jscoverage['build/json/json.js'][361] = 0;
  _$jscoverage['build/json/json.js'][368] = 0;
  _$jscoverage['build/json/json.js'][373] = 0;
  _$jscoverage['build/json/json.js'][412] = 0;
  _$jscoverage['build/json/json.js'][433] = 0;
  _$jscoverage['build/json/json.js'][470] = 0;
  _$jscoverage['build/json/json.js'][488] = 0;
  _$jscoverage['build/json/json.js'][489] = 0;
  _$jscoverage['build/json/json.js'][492] = 0;
  _$jscoverage['build/json/json.js'][510] = 0;
  _$jscoverage['build/json/json.js'][511] = 0;
  _$jscoverage['build/json/json.js'][512] = 0;
  _$jscoverage['build/json/json.js'][513] = 0;
  _$jscoverage['build/json/json.js'][514] = 0;
  _$jscoverage['build/json/json.js'][515] = 0;
  _$jscoverage['build/json/json.js'][517] = 0;
  _$jscoverage['build/json/json.js'][535] = 0;
  _$jscoverage['build/json/json.js'][538] = 0;
}
_$jscoverage['build/json/json.js'].source = ["<span class=\"c\">/*</span>","<span class=\"c\">Copyright (c) 2009, Yahoo! Inc. All rights reserved.</span>","<span class=\"c\">Code licensed under the BSD License:</span>","<span class=\"c\">http://developer.yahoo.net/yui/license.txt</span>","<span class=\"c\">version: 2.8.0r4</span>","<span class=\"c\">*/</span>","<span class=\"c\">/**</span>","<span class=\"c\"> * Provides methods to parse JSON strings and convert objects to JSON strings.</span>","<span class=\"c\"> *</span>","<span class=\"c\"> * @module json</span>","<span class=\"c\"> * @class JSON</span>","<span class=\"c\"> * @namespace YAHOO.lang</span>","<span class=\"c\"> * @static</span>","<span class=\"c\"> */</span>","<span class=\"k\">(</span><span class=\"k\">function</span> <span class=\"k\">()</span> <span class=\"k\">{</span>","","<span class=\"k\">var</span> l <span class=\"k\">=</span> YAHOO<span class=\"k\">.</span>lang<span class=\"k\">,</span>","    isFunction <span class=\"k\">=</span> l<span class=\"k\">.</span>isFunction<span class=\"k\">,</span>","    isObject   <span class=\"k\">=</span> l<span class=\"k\">.</span>isObject<span class=\"k\">,</span>","    isArray    <span class=\"k\">=</span> l<span class=\"k\">.</span>isArray<span class=\"k\">,</span>","    _toStr     <span class=\"k\">=</span> Object<span class=\"k\">.</span>prototype<span class=\"k\">.</span>toString<span class=\"k\">,</span>","                 <span class=\"c\">// 'this' is the global object.  window in browser env.  Keep</span>","                 <span class=\"c\">// the code env agnostic.  Caja requies window, unfortunately.</span>","    Native     <span class=\"k\">=</span> <span class=\"k\">(</span>YAHOO<span class=\"k\">.</span>env<span class=\"k\">.</span>ua<span class=\"k\">.</span>caja <span class=\"k\">?</span> window <span class=\"k\">:</span> <span class=\"k\">this</span><span class=\"k\">).</span>JSON<span class=\"k\">,</span>","","<span class=\"c\">/* Variables used by parse */</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * Replace certain Unicode characters that JavaScript may handle incorrectly</span>","<span class=\"c\">     * during eval--either by deleting them or treating them as line</span>","<span class=\"c\">     * endings--with escape sequences.</span>","<span class=\"c\">     * IMPORTANT NOTE: This regex will be used to modify the input if a match is</span>","<span class=\"c\">     * found.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @property _UNICODE_EXCEPTIONS</span>","<span class=\"c\">     * @type {RegExp}</span>","<span class=\"c\">     * @private</span>","<span class=\"c\">     */</span>","    _UNICODE_EXCEPTIONS <span class=\"k\">=</span> <span class=\"s\">/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g</span><span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * First step in the safety evaluation.  Regex used to replace all escape</span>","<span class=\"c\">     * sequences (i.e. \"\\\\\", etc) with '@' characters (a non-JSON character).</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @property _ESCAPES</span>","<span class=\"c\">     * @type {RegExp}</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     * @private</span>","<span class=\"c\">     */</span>","    _ESCAPES <span class=\"k\">=</span> <span class=\"s\">/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g</span><span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * Second step in the safety evaluation.  Regex used to replace all simple</span>","<span class=\"c\">     * values with ']' characters.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @property _VALUES</span>","<span class=\"c\">     * @type {RegExp}</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     * @private</span>","<span class=\"c\">     */</span>","    _VALUES  <span class=\"k\">=</span> <span class=\"s\">/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g</span><span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * Third step in the safety evaluation.  Regex used to remove all open</span>","<span class=\"c\">     * square brackets following a colon, comma, or at the beginning of the</span>","<span class=\"c\">     * string.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @property _BRACKETS</span>","<span class=\"c\">     * @type {RegExp}</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     * @private</span>","<span class=\"c\">     */</span>","    _BRACKETS <span class=\"k\">=</span> <span class=\"s\">/(?:^|:|,)(?:\\s*\\[)+/g</span><span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * Final step in the safety evaluation.  Regex used to test the string left</span>","<span class=\"c\">     * after all previous replacements for invalid characters.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @property _UNSAFE</span>","<span class=\"c\">     * @type {RegExp}</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     * @private</span>","<span class=\"c\">     */</span>","    _UNSAFE  <span class=\"k\">=</span> <span class=\"s\">/^[\\],:{}\\s]*$/</span><span class=\"k\">,</span>","","","<span class=\"c\">/* Variables used by stringify */</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * Regex used to replace special characters in strings for JSON</span>","<span class=\"c\">     * stringification.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @property _SPECIAL_CHARS</span>","<span class=\"c\">     * @type {RegExp}</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     * @private</span>","<span class=\"c\">     */</span>","    _SPECIAL_CHARS <span class=\"k\">=</span> <span class=\"s\">/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g</span><span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * Character substitution map for common escapes and special characters.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @property _CHARS</span>","<span class=\"c\">     * @type {Object}</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     * @private</span>","<span class=\"c\">     */</span>","    _CHARS <span class=\"k\">=</span> <span class=\"k\">{</span>","        <span class=\"s\">'</span><span class=\"t\">\\b</span><span class=\"s\">'</span><span class=\"k\">:</span> <span class=\"s\">'</span><span class=\"t\">\\\\</span><span class=\"s\">b'</span><span class=\"k\">,</span>","        <span class=\"s\">'</span><span class=\"t\">\\t</span><span class=\"s\">'</span><span class=\"k\">:</span> <span class=\"s\">'</span><span class=\"t\">\\\\</span><span class=\"s\">t'</span><span class=\"k\">,</span>","        <span class=\"s\">'</span><span class=\"t\">\\n</span><span class=\"s\">'</span><span class=\"k\">:</span> <span class=\"s\">'</span><span class=\"t\">\\\\</span><span class=\"s\">n'</span><span class=\"k\">,</span>","        <span class=\"s\">'</span><span class=\"t\">\\f</span><span class=\"s\">'</span><span class=\"k\">:</span> <span class=\"s\">'</span><span class=\"t\">\\\\</span><span class=\"s\">f'</span><span class=\"k\">,</span>","        <span class=\"s\">'</span><span class=\"t\">\\r</span><span class=\"s\">'</span><span class=\"k\">:</span> <span class=\"s\">'</span><span class=\"t\">\\\\</span><span class=\"s\">r'</span><span class=\"k\">,</span>","        <span class=\"s\">'\"'</span> <span class=\"k\">:</span> <span class=\"s\">'</span><span class=\"t\">\\\\</span><span class=\"s\">\"'</span><span class=\"k\">,</span>","        <span class=\"s\">'</span><span class=\"t\">\\\\</span><span class=\"s\">'</span><span class=\"k\">:</span> <span class=\"s\">'</span><span class=\"t\">\\\\\\\\</span><span class=\"s\">'</span>","    <span class=\"k\">}</span><span class=\"k\">,</span>","    ","    UNDEFINED <span class=\"k\">=</span> <span class=\"s\">'undefined'</span><span class=\"k\">,</span>","    OBJECT    <span class=\"k\">=</span> <span class=\"s\">'object'</span><span class=\"k\">,</span>","    NULL      <span class=\"k\">=</span> <span class=\"s\">'null'</span><span class=\"k\">,</span>","    STRING    <span class=\"k\">=</span> <span class=\"s\">'string'</span><span class=\"k\">,</span>","    NUMBER    <span class=\"k\">=</span> <span class=\"s\">'number'</span><span class=\"k\">,</span>","    BOOLEAN   <span class=\"k\">=</span> <span class=\"s\">'boolean'</span><span class=\"k\">,</span>","    DATE      <span class=\"k\">=</span> <span class=\"s\">'date'</span><span class=\"k\">,</span>","    _allowable <span class=\"k\">=</span> <span class=\"k\">{</span>","        <span class=\"s\">'undefined'</span>        <span class=\"k\">:</span> UNDEFINED<span class=\"k\">,</span>","        <span class=\"s\">'string'</span>           <span class=\"k\">:</span> STRING<span class=\"k\">,</span>","        <span class=\"s\">'[object String]'</span>  <span class=\"k\">:</span> STRING<span class=\"k\">,</span>","        <span class=\"s\">'number'</span>           <span class=\"k\">:</span> NUMBER<span class=\"k\">,</span>","        <span class=\"s\">'[object Number]'</span>  <span class=\"k\">:</span> NUMBER<span class=\"k\">,</span>","        <span class=\"s\">'boolean'</span>          <span class=\"k\">:</span> BOOLEAN<span class=\"k\">,</span>","        <span class=\"s\">'[object Boolean]'</span> <span class=\"k\">:</span> BOOLEAN<span class=\"k\">,</span>","        <span class=\"s\">'[object Date]'</span>    <span class=\"k\">:</span> DATE<span class=\"k\">,</span>","        <span class=\"s\">'[object RegExp]'</span>  <span class=\"k\">:</span> OBJECT","    <span class=\"k\">}</span><span class=\"k\">,</span>","    EMPTY     <span class=\"k\">=</span> <span class=\"s\">''</span><span class=\"k\">,</span>","    OPEN_O    <span class=\"k\">=</span> <span class=\"s\">'{'</span><span class=\"k\">,</span>","    CLOSE_O   <span class=\"k\">=</span> <span class=\"s\">'}'</span><span class=\"k\">,</span>","    OPEN_A    <span class=\"k\">=</span> <span class=\"s\">'['</span><span class=\"k\">,</span>","    CLOSE_A   <span class=\"k\">=</span> <span class=\"s\">']'</span><span class=\"k\">,</span>","    COMMA     <span class=\"k\">=</span> <span class=\"s\">','</span><span class=\"k\">,</span>","    COMMA_CR  <span class=\"k\">=</span> <span class=\"s\">\",</span><span class=\"t\">\\n</span><span class=\"s\">\"</span><span class=\"k\">,</span>","    CR        <span class=\"k\">=</span> <span class=\"s\">\"</span><span class=\"t\">\\n</span><span class=\"s\">\"</span><span class=\"k\">,</span>","    COLON     <span class=\"k\">=</span> <span class=\"s\">':'</span><span class=\"k\">,</span>","    COLON_SP  <span class=\"k\">=</span> <span class=\"s\">': '</span><span class=\"k\">,</span>","    QUOTE     <span class=\"k\">=</span> <span class=\"s\">'\"'</span><span class=\"k\">;</span>","","<span class=\"c\">// Only accept JSON objects that report a [[Class]] of JSON</span>","Native <span class=\"k\">=</span> _toStr<span class=\"k\">.</span>call<span class=\"k\">(</span>Native<span class=\"k\">)</span> <span class=\"k\">===</span> <span class=\"s\">'[object JSON]'</span> <span class=\"k\">&amp;&amp;</span> Native<span class=\"k\">;</span>","","<span class=\"c\">// Escapes a special character to a safe Unicode representation</span>","<span class=\"k\">function</span> _char<span class=\"k\">(</span>c<span class=\"k\">)</span> <span class=\"k\">{</span>","    <span class=\"k\">if</span> <span class=\"k\">(!</span>_CHARS<span class=\"k\">[</span>c<span class=\"k\">])</span> <span class=\"k\">{</span>","        _CHARS<span class=\"k\">[</span>c<span class=\"k\">]</span> <span class=\"k\">=</span>  <span class=\"s\">'</span><span class=\"t\">\\\\</span><span class=\"s\">u'</span><span class=\"k\">+(</span><span class=\"s\">'0000'</span><span class=\"k\">+(+(</span>c<span class=\"k\">.</span>charCodeAt<span class=\"k\">(</span><span class=\"s\">0</span><span class=\"k\">))).</span>toString<span class=\"k\">(</span><span class=\"s\">16</span><span class=\"k\">)).</span>slice<span class=\"k\">(-</span><span class=\"s\">4</span><span class=\"k\">);</span>","    <span class=\"k\">}</span>","    <span class=\"k\">return</span> _CHARS<span class=\"k\">[</span>c<span class=\"k\">];</span>","<span class=\"k\">}</span>","","","<span class=\"c\">/* functions used by parse */</span>","","<span class=\"c\">/**</span>","<span class=\"c\"> * Traverses nested objects, applying a filter or reviver function to</span>","<span class=\"c\"> * each value.  The value returned from the function will replace the</span>","<span class=\"c\"> * original value in the key:value pair.  If the value returned is</span>","<span class=\"c\"> * undefined, the key will be omitted from the returned object.</span>","<span class=\"c\"> *</span>","<span class=\"c\"> * @method _revive</span>","<span class=\"c\"> * @param data {MIXED} Any JavaScript data</span>","<span class=\"c\"> * @param reviver {Function} filter or mutation function</span>","<span class=\"c\"> * @return {MIXED} The results of the filtered/mutated data structure</span>","<span class=\"c\"> * @private</span>","<span class=\"c\"> */</span>","<span class=\"k\">function</span> _revive<span class=\"k\">(</span>data<span class=\"k\">,</span> reviver<span class=\"k\">)</span> <span class=\"k\">{</span>","    <span class=\"k\">var</span> walk <span class=\"k\">=</span> <span class=\"k\">function</span> <span class=\"k\">(</span>o<span class=\"k\">,</span>key<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">var</span> k<span class=\"k\">,</span>v<span class=\"k\">,</span>value <span class=\"k\">=</span> o<span class=\"k\">[</span>key<span class=\"k\">];</span>","        <span class=\"k\">if</span> <span class=\"k\">(</span>value <span class=\"k\">&amp;&amp;</span> <span class=\"k\">typeof</span> value <span class=\"k\">===</span> <span class=\"s\">'object'</span><span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">for</span> <span class=\"k\">(</span>k <span class=\"k\">in</span> value<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>l<span class=\"k\">.</span>hasOwnProperty<span class=\"k\">(</span>value<span class=\"k\">,</span>k<span class=\"k\">))</span> <span class=\"k\">{</span>","                    v <span class=\"k\">=</span> walk<span class=\"k\">(</span>value<span class=\"k\">,</span> k<span class=\"k\">);</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>v <span class=\"k\">===</span> undefined<span class=\"k\">)</span> <span class=\"k\">{</span>","                        <span class=\"k\">delete</span> value<span class=\"k\">[</span>k<span class=\"k\">];</span>","                    <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","                        value<span class=\"k\">[</span>k<span class=\"k\">]</span> <span class=\"k\">=</span> v<span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","        <span class=\"k\">}</span>","        <span class=\"k\">return</span> reviver<span class=\"k\">.</span>call<span class=\"k\">(</span>o<span class=\"k\">,</span>key<span class=\"k\">,</span>value<span class=\"k\">);</span>","    <span class=\"k\">}</span><span class=\"k\">;</span>","","    <span class=\"k\">return</span> <span class=\"k\">typeof</span> reviver <span class=\"k\">===</span> <span class=\"s\">'function'</span> <span class=\"k\">?</span> walk<span class=\"k\">(</span><span class=\"k\">{</span><span class=\"s\">''</span><span class=\"k\">:</span>data<span class=\"k\">}</span><span class=\"k\">,</span><span class=\"s\">''</span><span class=\"k\">)</span> <span class=\"k\">:</span> data<span class=\"k\">;</span>","<span class=\"k\">}</span>","","<span class=\"c\">/**</span>","<span class=\"c\"> * Replace certain Unicode characters that may be handled incorrectly by</span>","<span class=\"c\"> * some browser implementations.</span>","<span class=\"c\"> *</span>","<span class=\"c\"> * @method _prepare</span>","<span class=\"c\"> * @param s {String} parse input</span>","<span class=\"c\"> * @return {String} sanitized JSON string ready to be validated/parsed</span>","<span class=\"c\"> * @private</span>","<span class=\"c\"> */</span>","<span class=\"k\">function</span> _prepare<span class=\"k\">(</span>s<span class=\"k\">)</span> <span class=\"k\">{</span>","    <span class=\"k\">return</span> s<span class=\"k\">.</span>replace<span class=\"k\">(</span>_UNICODE_EXCEPTIONS<span class=\"k\">,</span> _char<span class=\"k\">);</span>","<span class=\"k\">}</span>","","<span class=\"k\">function</span> _isSafe<span class=\"k\">(</span>str<span class=\"k\">)</span> <span class=\"k\">{</span>","    <span class=\"k\">return</span> l<span class=\"k\">.</span>isString<span class=\"k\">(</span>str<span class=\"k\">)</span> <span class=\"k\">&amp;&amp;</span>","            _UNSAFE<span class=\"k\">.</span>test<span class=\"k\">(</span>str<span class=\"k\">.</span>replace<span class=\"k\">(</span>_ESCAPES<span class=\"k\">,</span><span class=\"s\">'@'</span><span class=\"k\">).</span>","                             replace<span class=\"k\">(</span>_VALUES<span class=\"k\">,</span><span class=\"s\">']'</span><span class=\"k\">).</span>","                             replace<span class=\"k\">(</span>_BRACKETS<span class=\"k\">,</span><span class=\"s\">''</span><span class=\"k\">));</span>","<span class=\"k\">}</span>","","<span class=\"k\">function</span> _parse<span class=\"k\">(</span>s<span class=\"k\">,</span>reviver<span class=\"k\">)</span> <span class=\"k\">{</span>","    <span class=\"c\">// sanitize</span>","    s <span class=\"k\">=</span> _prepare<span class=\"k\">(</span>s<span class=\"k\">);</span>","","    <span class=\"c\">// Ensure valid JSON</span>","    <span class=\"k\">if</span> <span class=\"k\">(</span>_isSafe<span class=\"k\">(</span>s<span class=\"k\">))</span> <span class=\"k\">{</span>","        <span class=\"c\">// Eval the text into a JavaScript data structure, apply the</span>","        <span class=\"c\">// reviver function if provided, and return</span>","        <span class=\"k\">return</span> _revive<span class=\"k\">(</span> eval<span class=\"k\">(</span><span class=\"s\">'('</span> <span class=\"k\">+</span> s <span class=\"k\">+</span> <span class=\"s\">')'</span><span class=\"k\">),</span> reviver <span class=\"k\">);</span>","    <span class=\"k\">}</span>","","    <span class=\"c\">// The text is not valid JSON</span>","    <span class=\"k\">throw</span> <span class=\"k\">new</span> SyntaxError<span class=\"k\">(</span><span class=\"s\">'JSON.parse'</span><span class=\"k\">);</span>","<span class=\"k\">}</span>","","","","<span class=\"c\">/* functions used by stringify */</span>","","<span class=\"c\">// Utility function used to determine how to serialize a variable.</span>","<span class=\"k\">function</span> _type<span class=\"k\">(</span>o<span class=\"k\">)</span> <span class=\"k\">{</span>","    <span class=\"k\">var</span> t <span class=\"k\">=</span> <span class=\"k\">typeof</span> o<span class=\"k\">;</span>","    <span class=\"k\">return</span>  _allowable<span class=\"k\">[</span>t<span class=\"k\">]</span> <span class=\"k\">||</span>              <span class=\"c\">// number, string, boolean, undefined</span>","            _allowable<span class=\"k\">[</span>_toStr<span class=\"k\">.</span>call<span class=\"k\">(</span>o<span class=\"k\">)]</span> <span class=\"k\">||</span> <span class=\"c\">// Number, String, Boolean, Date</span>","            <span class=\"k\">(</span>t <span class=\"k\">===</span> OBJECT <span class=\"k\">?</span>","                <span class=\"k\">(</span>o <span class=\"k\">?</span> OBJECT <span class=\"k\">:</span> NULL<span class=\"k\">)</span> <span class=\"k\">:</span>     <span class=\"c\">// object, array, null, misc natives</span>","                UNDEFINED<span class=\"k\">);</span>               <span class=\"c\">// function, unknown</span>","<span class=\"k\">}</span>","","<span class=\"c\">// Enclose escaped strings in quotes</span>","<span class=\"k\">function</span> _string<span class=\"k\">(</span>s<span class=\"k\">)</span> <span class=\"k\">{</span>","    <span class=\"k\">return</span> QUOTE <span class=\"k\">+</span> s<span class=\"k\">.</span>replace<span class=\"k\">(</span>_SPECIAL_CHARS<span class=\"k\">,</span> _char<span class=\"k\">)</span> <span class=\"k\">+</span> QUOTE<span class=\"k\">;</span>","<span class=\"k\">}</span>","","<span class=\"c\">// Adds the provided space to the beginning of every line in the input string</span>","<span class=\"k\">function</span> _indent<span class=\"k\">(</span>s<span class=\"k\">,</span>space<span class=\"k\">)</span> <span class=\"k\">{</span>","    <span class=\"k\">return</span> s<span class=\"k\">.</span>replace<span class=\"k\">(</span><span class=\"s\">/^/gm</span><span class=\"k\">,</span> space<span class=\"k\">);</span>","<span class=\"k\">}</span>","","<span class=\"c\">// JavaScript implementation of stringify (see API declaration of stringify)</span>","<span class=\"k\">function</span> _stringify<span class=\"k\">(</span>o<span class=\"k\">,</span>w<span class=\"k\">,</span>space<span class=\"k\">)</span> <span class=\"k\">{</span>","    <span class=\"k\">if</span> <span class=\"k\">(</span>o <span class=\"k\">===</span> undefined<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">return</span> undefined<span class=\"k\">;</span>","    <span class=\"k\">}</span>","","    <span class=\"k\">var</span> replacer <span class=\"k\">=</span> isFunction<span class=\"k\">(</span>w<span class=\"k\">)</span> <span class=\"k\">?</span> w <span class=\"k\">:</span> <span class=\"k\">null</span><span class=\"k\">,</span>","        format   <span class=\"k\">=</span> _toStr<span class=\"k\">.</span>call<span class=\"k\">(</span>space<span class=\"k\">).</span>match<span class=\"k\">(</span><span class=\"s\">/String|Number/</span><span class=\"k\">)</span> <span class=\"k\">||</span> <span class=\"k\">[],</span>","        _date    <span class=\"k\">=</span> YAHOO<span class=\"k\">.</span>lang<span class=\"k\">.</span>JSON<span class=\"k\">.</span>dateToString<span class=\"k\">,</span>","        stack    <span class=\"k\">=</span> <span class=\"k\">[],</span>","        tmp<span class=\"k\">,</span>i<span class=\"k\">,</span>len<span class=\"k\">;</span>","","    <span class=\"k\">if</span> <span class=\"k\">(</span>replacer <span class=\"k\">||</span> <span class=\"k\">!</span>isArray<span class=\"k\">(</span>w<span class=\"k\">))</span> <span class=\"k\">{</span>","        w <span class=\"k\">=</span> undefined<span class=\"k\">;</span>","    <span class=\"k\">}</span>","","    <span class=\"c\">// Ensure whitelist keys are unique (bug 2110391)</span>","    <span class=\"k\">if</span> <span class=\"k\">(</span>w<span class=\"k\">)</span> <span class=\"k\">{</span>","        tmp <span class=\"k\">=</span> <span class=\"k\">{}</span><span class=\"k\">;</span>","        <span class=\"k\">for</span> <span class=\"k\">(</span>i <span class=\"k\">=</span> <span class=\"s\">0</span><span class=\"k\">,</span> len <span class=\"k\">=</span> w<span class=\"k\">.</span>length<span class=\"k\">;</span> i <span class=\"k\">&lt;</span> len<span class=\"k\">;</span> <span class=\"k\">++</span>i<span class=\"k\">)</span> <span class=\"k\">{</span>","            tmp<span class=\"k\">[</span>w<span class=\"k\">[</span>i<span class=\"k\">]]</span> <span class=\"k\">=</span> <span class=\"k\">true</span><span class=\"k\">;</span>","        <span class=\"k\">}</span>","        w <span class=\"k\">=</span> tmp<span class=\"k\">;</span>","    <span class=\"k\">}</span>","","    <span class=\"c\">// Per the spec, strings are truncated to 10 characters and numbers</span>","    <span class=\"c\">// are converted to that number of spaces (max 10)</span>","    space <span class=\"k\">=</span> format<span class=\"k\">[</span><span class=\"s\">0</span><span class=\"k\">]</span> <span class=\"k\">===</span> <span class=\"s\">'Number'</span> <span class=\"k\">?</span>","                <span class=\"k\">new</span> Array<span class=\"k\">(</span>Math<span class=\"k\">.</span>min<span class=\"k\">(</span>Math<span class=\"k\">.</span>max<span class=\"k\">(</span><span class=\"s\">0</span><span class=\"k\">,</span>space<span class=\"k\">),</span><span class=\"s\">10</span><span class=\"k\">)+</span><span class=\"s\">1</span><span class=\"k\">).</span>join<span class=\"k\">(</span><span class=\"s\">\" \"</span><span class=\"k\">)</span> <span class=\"k\">:</span>","                <span class=\"k\">(</span>space <span class=\"k\">||</span> EMPTY<span class=\"k\">).</span>slice<span class=\"k\">(</span><span class=\"s\">0</span><span class=\"k\">,</span><span class=\"s\">10</span><span class=\"k\">);</span>","","    <span class=\"k\">function</span> _serialize<span class=\"k\">(</span>h<span class=\"k\">,</span>key<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">var</span> value <span class=\"k\">=</span> h<span class=\"k\">[</span>key<span class=\"k\">],</span>","            t     <span class=\"k\">=</span> _type<span class=\"k\">(</span>value<span class=\"k\">),</span>","            a     <span class=\"k\">=</span> <span class=\"k\">[],</span>","            colon <span class=\"k\">=</span> space <span class=\"k\">?</span> COLON_SP <span class=\"k\">:</span> COLON<span class=\"k\">,</span>","            arr<span class=\"k\">,</span> i<span class=\"k\">,</span> keys<span class=\"k\">,</span> k<span class=\"k\">,</span> v<span class=\"k\">;</span>","","        <span class=\"c\">// Per the ECMA 5 spec, toJSON is applied before the replacer is</span>","        <span class=\"c\">// called.  Also per the spec, Date.prototype.toJSON has been added, so</span>","        <span class=\"c\">// Date instances should be serialized prior to exposure to the</span>","        <span class=\"c\">// replacer.  I disagree with this decision, but the spec is the spec.</span>","        <span class=\"k\">if</span> <span class=\"k\">(</span>isObject<span class=\"k\">(</span>value<span class=\"k\">)</span> <span class=\"k\">&amp;&amp;</span> isFunction<span class=\"k\">(</span>value<span class=\"k\">.</span>toJSON<span class=\"k\">))</span> <span class=\"k\">{</span>","            value <span class=\"k\">=</span> value<span class=\"k\">.</span>toJSON<span class=\"k\">(</span>key<span class=\"k\">);</span>","        <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">if</span> <span class=\"k\">(</span>t <span class=\"k\">===</span> DATE<span class=\"k\">)</span> <span class=\"k\">{</span>","            value <span class=\"k\">=</span> _date<span class=\"k\">(</span>value<span class=\"k\">);</span>","        <span class=\"k\">}</span>","","        <span class=\"k\">if</span> <span class=\"k\">(</span>isFunction<span class=\"k\">(</span>replacer<span class=\"k\">))</span> <span class=\"k\">{</span>","            value <span class=\"k\">=</span> replacer<span class=\"k\">.</span>call<span class=\"k\">(</span>h<span class=\"k\">,</span>key<span class=\"k\">,</span>value<span class=\"k\">);</span>","        <span class=\"k\">}</span>","","        <span class=\"k\">if</span> <span class=\"k\">(</span>value <span class=\"k\">!==</span> h<span class=\"k\">[</span>key<span class=\"k\">])</span> <span class=\"k\">{</span>","            t <span class=\"k\">=</span> _type<span class=\"k\">(</span>value<span class=\"k\">);</span>","        <span class=\"k\">}</span>","","        <span class=\"k\">switch</span> <span class=\"k\">(</span>t<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">case</span> DATE    <span class=\"k\">:</span> <span class=\"c\">// intentional fallthrough.  Pre-replacer Dates are</span>","                           <span class=\"c\">// serialized in the toJSON stage.  Dates here would</span>","                           <span class=\"c\">// have been produced by the replacer.</span>","            <span class=\"k\">case</span> OBJECT  <span class=\"k\">:</span> <span class=\"k\">break</span><span class=\"k\">;</span>","            <span class=\"k\">case</span> STRING  <span class=\"k\">:</span> <span class=\"k\">return</span> _string<span class=\"k\">(</span>value<span class=\"k\">);</span>","            <span class=\"k\">case</span> NUMBER  <span class=\"k\">:</span> <span class=\"k\">return</span> isFinite<span class=\"k\">(</span>value<span class=\"k\">)</span> <span class=\"k\">?</span> value<span class=\"k\">+</span>EMPTY <span class=\"k\">:</span> NULL<span class=\"k\">;</span>","            <span class=\"k\">case</span> BOOLEAN <span class=\"k\">:</span> <span class=\"k\">return</span> value<span class=\"k\">+</span>EMPTY<span class=\"k\">;</span>","            <span class=\"k\">case</span> NULL    <span class=\"k\">:</span> <span class=\"k\">return</span> NULL<span class=\"k\">;</span>","            <span class=\"k\">default</span>      <span class=\"k\">:</span> <span class=\"k\">return</span> undefined<span class=\"k\">;</span>","        <span class=\"k\">}</span>","","        <span class=\"c\">// Check for cyclical references in nested objects</span>","        <span class=\"k\">for</span> <span class=\"k\">(</span>i <span class=\"k\">=</span> stack<span class=\"k\">.</span>length <span class=\"k\">-</span> <span class=\"s\">1</span><span class=\"k\">;</span> i <span class=\"k\">&gt;=</span> <span class=\"s\">0</span><span class=\"k\">;</span> <span class=\"k\">--</span>i<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">if</span> <span class=\"k\">(</span>stack<span class=\"k\">[</span>i<span class=\"k\">]</span> <span class=\"k\">===</span> value<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">throw</span> <span class=\"k\">new</span> Error<span class=\"k\">(</span><span class=\"s\">\"JSON.stringify. Cyclical reference\"</span><span class=\"k\">);</span>","            <span class=\"k\">}</span>","        <span class=\"k\">}</span>","","        arr <span class=\"k\">=</span> isArray<span class=\"k\">(</span>value<span class=\"k\">);</span>","","        <span class=\"c\">// Add the object to the processing stack</span>","        stack<span class=\"k\">.</span>push<span class=\"k\">(</span>value<span class=\"k\">);</span>","","        <span class=\"k\">if</span> <span class=\"k\">(</span>arr<span class=\"k\">)</span> <span class=\"k\">{</span> <span class=\"c\">// Array</span>","            <span class=\"k\">for</span> <span class=\"k\">(</span>i <span class=\"k\">=</span> value<span class=\"k\">.</span>length <span class=\"k\">-</span> <span class=\"s\">1</span><span class=\"k\">;</span> i <span class=\"k\">&gt;=</span> <span class=\"s\">0</span><span class=\"k\">;</span> <span class=\"k\">--</span>i<span class=\"k\">)</span> <span class=\"k\">{</span>","                a<span class=\"k\">[</span>i<span class=\"k\">]</span> <span class=\"k\">=</span> _serialize<span class=\"k\">(</span>value<span class=\"k\">,</span> i<span class=\"k\">)</span> <span class=\"k\">||</span> NULL<span class=\"k\">;</span>","            <span class=\"k\">}</span>","        <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>   <span class=\"c\">// Object</span>","            <span class=\"c\">// If whitelist provided, take only those keys</span>","            keys <span class=\"k\">=</span> w <span class=\"k\">||</span> value<span class=\"k\">;</span>","            i <span class=\"k\">=</span> <span class=\"s\">0</span><span class=\"k\">;</span>","","            <span class=\"k\">for</span> <span class=\"k\">(</span>k <span class=\"k\">in</span> keys<span class=\"k\">)</span> <span class=\"k\">{</span>","                <span class=\"k\">if</span> <span class=\"k\">(</span>keys<span class=\"k\">.</span>hasOwnProperty<span class=\"k\">(</span>k<span class=\"k\">))</span> <span class=\"k\">{</span>","                    v <span class=\"k\">=</span> _serialize<span class=\"k\">(</span>value<span class=\"k\">,</span> k<span class=\"k\">);</span>","                    <span class=\"k\">if</span> <span class=\"k\">(</span>v<span class=\"k\">)</span> <span class=\"k\">{</span>","                        a<span class=\"k\">[</span>i<span class=\"k\">++]</span> <span class=\"k\">=</span> _string<span class=\"k\">(</span>k<span class=\"k\">)</span> <span class=\"k\">+</span> colon <span class=\"k\">+</span> v<span class=\"k\">;</span>","                    <span class=\"k\">}</span>","                <span class=\"k\">}</span>","            <span class=\"k\">}</span>","        <span class=\"k\">}</span>","","        <span class=\"c\">// remove the array from the stack</span>","        stack<span class=\"k\">.</span>pop<span class=\"k\">();</span>","","        <span class=\"k\">if</span> <span class=\"k\">(</span>space <span class=\"k\">&amp;&amp;</span> a<span class=\"k\">.</span>length<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> arr <span class=\"k\">?</span>","                OPEN_A <span class=\"k\">+</span> CR <span class=\"k\">+</span> _indent<span class=\"k\">(</span>a<span class=\"k\">.</span>join<span class=\"k\">(</span>COMMA_CR<span class=\"k\">),</span> space<span class=\"k\">)</span> <span class=\"k\">+</span> CR <span class=\"k\">+</span> CLOSE_A <span class=\"k\">:</span>","                OPEN_O <span class=\"k\">+</span> CR <span class=\"k\">+</span> _indent<span class=\"k\">(</span>a<span class=\"k\">.</span>join<span class=\"k\">(</span>COMMA_CR<span class=\"k\">),</span> space<span class=\"k\">)</span> <span class=\"k\">+</span> CR <span class=\"k\">+</span> CLOSE_O<span class=\"k\">;</span>","        <span class=\"k\">}</span> <span class=\"k\">else</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> arr <span class=\"k\">?</span>","                OPEN_A <span class=\"k\">+</span> a<span class=\"k\">.</span>join<span class=\"k\">(</span>COMMA<span class=\"k\">)</span> <span class=\"k\">+</span> CLOSE_A <span class=\"k\">:</span>","                OPEN_O <span class=\"k\">+</span> a<span class=\"k\">.</span>join<span class=\"k\">(</span>COMMA<span class=\"k\">)</span> <span class=\"k\">+</span> CLOSE_O<span class=\"k\">;</span>","        <span class=\"k\">}</span>","    <span class=\"k\">}</span>","","    <span class=\"c\">// process the input</span>","    <span class=\"k\">return</span> _serialize<span class=\"k\">(</span><span class=\"k\">{</span><span class=\"s\">''</span><span class=\"k\">:</span>o<span class=\"k\">}</span><span class=\"k\">,</span><span class=\"s\">''</span><span class=\"k\">);</span>","<span class=\"k\">}</span>","","","<span class=\"c\">/* Public API */</span>","YAHOO<span class=\"k\">.</span>lang<span class=\"k\">.</span>JSON <span class=\"k\">=</span> <span class=\"k\">{</span>","    <span class=\"c\">/**</span>","<span class=\"c\">     * Leverage native JSON parse if the browser has a native implementation.</span>","<span class=\"c\">     * In general, this is a good idea.  See the Known Issues section in the</span>","<span class=\"c\">     * JSON user guide for caveats.  The default value is true for browsers with</span>","<span class=\"c\">     * native JSON support.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @property useNativeParse</span>","<span class=\"c\">     * @type Boolean</span>","<span class=\"c\">     * @default true</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     */</span>","    useNativeParse <span class=\"k\">:</span> <span class=\"k\">!!</span>Native<span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * Leverage native JSON stringify if the browser has a native</span>","<span class=\"c\">     * implementation.  In general, this is a good idea.  See the Known Issues</span>","<span class=\"c\">     * section in the JSON user guide for caveats.  The default value is true</span>","<span class=\"c\">     * for browsers with native JSON support.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @property useNativeStringify</span>","<span class=\"c\">     * @type Boolean</span>","<span class=\"c\">     * @default true</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     */</span>","    useNativeStringify <span class=\"k\">:</span> <span class=\"k\">!!</span>Native<span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * Four step determination whether a string is safe to eval. In three steps,</span>","<span class=\"c\">     * escape sequences, safe values, and properly placed open square brackets</span>","<span class=\"c\">     * are replaced with placeholders or removed.  Then in the final step, the</span>","<span class=\"c\">     * result of all these replacements is checked for invalid characters.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @method isSafe</span>","<span class=\"c\">     * @param str {String} JSON string to be tested</span>","<span class=\"c\">     * @return {boolean} is the string safe for eval?</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     */</span>","    isSafe <span class=\"k\">:</span> <span class=\"k\">function</span> <span class=\"k\">(</span>s<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">return</span> _isSafe<span class=\"k\">(</span>_prepare<span class=\"k\">(</span>s<span class=\"k\">));</span>","    <span class=\"k\">}</span><span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * &lt;p&gt;Parse a JSON string, returning the native JavaScript</span>","<span class=\"c\">     * representation.&lt;/p&gt;</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * &lt;p&gt;When lang.JSON.useNativeParse is true, this will defer to the native</span>","<span class=\"c\">     * JSON.parse if the browser has a native implementation.  Otherwise, a</span>","<span class=\"c\">     * JavaScript implementation based on http://www.json.org/json2.js</span>","<span class=\"c\">     * is used.&lt;/p&gt;</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @method parse</span>","<span class=\"c\">     * @param s {string} JSON string data</span>","<span class=\"c\">     * @param reviver {function} (optional) function(k,v) passed each key:value</span>","<span class=\"c\">     *          pair of object literals, allowing pruning or altering values</span>","<span class=\"c\">     * @return {MIXED} the native JavaScript representation of the JSON string</span>","<span class=\"c\">     * @throws SyntaxError</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     */</span>","    parse <span class=\"k\">:</span> <span class=\"k\">function</span> <span class=\"k\">(</span>s<span class=\"k\">,</span>reviver<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">return</span> Native <span class=\"k\">&amp;&amp;</span> YAHOO<span class=\"k\">.</span>lang<span class=\"k\">.</span>JSON<span class=\"k\">.</span>useNativeParse <span class=\"k\">?</span>","            Native<span class=\"k\">.</span>parse<span class=\"k\">(</span>s<span class=\"k\">,</span>reviver<span class=\"k\">)</span> <span class=\"k\">:</span> _parse<span class=\"k\">(</span>s<span class=\"k\">,</span>reviver<span class=\"k\">);</span>","    <span class=\"k\">}</span><span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * &lt;p&gt;Converts an arbitrary value to a JSON string representation.&lt;/p&gt;</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * &lt;p&gt;Objects with cyclical references will trigger an exception.&lt;/p&gt;</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * &lt;p&gt;If a whitelist is provided, only matching object keys will be</span>","<span class=\"c\">     * included.  Alternately, a replacer function may be passed as the</span>","<span class=\"c\">     * second parameter.  This function is executed on every value in the</span>","<span class=\"c\">     * input, and its return value will be used in place of the original value.</span>","<span class=\"c\">     * This is useful to serialize specialized objects or class instances.&lt;/p&gt;</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * &lt;p&gt;If a positive integer or non-empty string is passed as the third</span>","<span class=\"c\">     * parameter, the output will be formatted with carriage returns and</span>","<span class=\"c\">     * indentation for readability.  If a String is passed (such as \"\\t\") it</span>","<span class=\"c\">     * will be used once for each indentation level.  If a number is passed,</span>","<span class=\"c\">     * that number of spaces will be used.&lt;/p&gt;</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * &lt;p&gt;When lang.JSON.useNativeStringify is true, this will defer to the</span>","<span class=\"c\">     * native JSON.stringify if the browser has a native implementation.</span>","<span class=\"c\">     * Otherwise, a JavaScript implementation is used.&lt;/p&gt;</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @method stringify</span>","<span class=\"c\">     * @param o {MIXED} any arbitrary object to convert to JSON string</span>","<span class=\"c\">     * @param w {Array|Function} (optional) whitelist of acceptable object keys</span>","<span class=\"c\">     *                  to include OR a function(value,key) to alter values</span>","<span class=\"c\">     *                  before serialization</span>","<span class=\"c\">     * @param space {Number|String} (optional) indentation character(s) or</span>","<span class=\"c\">     *                  depthy of spaces to format the output </span>","<span class=\"c\">     * @return {string} JSON string representation of the input</span>","<span class=\"c\">     * @throws Error</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     */</span>","    stringify <span class=\"k\">:</span> <span class=\"k\">function</span> <span class=\"k\">(</span>o<span class=\"k\">,</span>w<span class=\"k\">,</span>space<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">return</span> Native <span class=\"k\">&amp;&amp;</span> YAHOO<span class=\"k\">.</span>lang<span class=\"k\">.</span>JSON<span class=\"k\">.</span>useNativeStringify <span class=\"k\">?</span>","            Native<span class=\"k\">.</span>stringify<span class=\"k\">(</span>o<span class=\"k\">,</span>w<span class=\"k\">,</span>space<span class=\"k\">)</span> <span class=\"k\">:</span> _stringify<span class=\"k\">(</span>o<span class=\"k\">,</span>w<span class=\"k\">,</span>space<span class=\"k\">);</span>","    <span class=\"k\">}</span><span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * Serializes a Date instance as a UTC date string.  Used internally by</span>","<span class=\"c\">     * the JavaScript implementation of stringify.  If you need a different</span>","<span class=\"c\">     * Date serialization format, override this method.  If you change this,</span>","<span class=\"c\">     * you should also set useNativeStringify to false, since native JSON</span>","<span class=\"c\">     * implementations serialize Dates per the ECMAScript 5 spec.  You've been</span>","<span class=\"c\">     * warned.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @method dateToString</span>","<span class=\"c\">     * @param d {Date} The Date to serialize</span>","<span class=\"c\">     * @return {String} stringified Date in UTC format YYYY-MM-DDTHH:mm:SSZ</span>","<span class=\"c\">     * @static</span>","<span class=\"c\">     */</span>","    dateToString <span class=\"k\">:</span> <span class=\"k\">function</span> <span class=\"k\">(</span>d<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">function</span> _zeroPad<span class=\"k\">(</span>v<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">return</span> v <span class=\"k\">&lt;</span> <span class=\"s\">10</span> <span class=\"k\">?</span> <span class=\"s\">'0'</span> <span class=\"k\">+</span> v <span class=\"k\">:</span> v<span class=\"k\">;</span>","        <span class=\"k\">}</span>","","        <span class=\"k\">return</span> d<span class=\"k\">.</span>getUTCFullYear<span class=\"k\">()</span>         <span class=\"k\">+</span> <span class=\"s\">'-'</span> <span class=\"k\">+</span>","            _zeroPad<span class=\"k\">(</span>d<span class=\"k\">.</span>getUTCMonth<span class=\"k\">()</span> <span class=\"k\">+</span> <span class=\"s\">1</span><span class=\"k\">)</span> <span class=\"k\">+</span> <span class=\"s\">'-'</span> <span class=\"k\">+</span>","            _zeroPad<span class=\"k\">(</span>d<span class=\"k\">.</span>getUTCDate<span class=\"k\">())</span>      <span class=\"k\">+</span> <span class=\"s\">'T'</span> <span class=\"k\">+</span>","            _zeroPad<span class=\"k\">(</span>d<span class=\"k\">.</span>getUTCHours<span class=\"k\">())</span>     <span class=\"k\">+</span> COLON <span class=\"k\">+</span>","            _zeroPad<span class=\"k\">(</span>d<span class=\"k\">.</span>getUTCMinutes<span class=\"k\">())</span>   <span class=\"k\">+</span> COLON <span class=\"k\">+</span>","            _zeroPad<span class=\"k\">(</span>d<span class=\"k\">.</span>getUTCSeconds<span class=\"k\">())</span>   <span class=\"k\">+</span> <span class=\"s\">'Z'</span><span class=\"k\">;</span>","    <span class=\"k\">}</span><span class=\"k\">,</span>","","    <span class=\"c\">/**</span>","<span class=\"c\">     * Reconstitute Date instances from the default JSON UTC serialization.</span>","<span class=\"c\">     * Reference this from a reviver function to rebuild Dates during the</span>","<span class=\"c\">     * parse operation.</span>","<span class=\"c\">     *</span>","<span class=\"c\">     * @method stringToDate</span>","<span class=\"c\">     * @param str {String} String serialization of a Date</span>","<span class=\"c\">     * @return {Date}</span>","<span class=\"c\">     */</span>","    stringToDate <span class=\"k\">:</span> <span class=\"k\">function</span> <span class=\"k\">(</span>str<span class=\"k\">)</span> <span class=\"k\">{</span>","        <span class=\"k\">var</span> m <span class=\"k\">=</span> str<span class=\"k\">.</span>match<span class=\"k\">(</span><span class=\"s\">/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{3}))?Z$/</span><span class=\"k\">);</span>","        <span class=\"k\">if</span> <span class=\"k\">(</span>m<span class=\"k\">)</span> <span class=\"k\">{</span>","            <span class=\"k\">var</span> d <span class=\"k\">=</span> <span class=\"k\">new</span> Date<span class=\"k\">();</span>","            d<span class=\"k\">.</span>setUTCFullYear<span class=\"k\">(</span>m<span class=\"k\">[</span><span class=\"s\">1</span><span class=\"k\">],</span> m<span class=\"k\">[</span><span class=\"s\">2</span><span class=\"k\">]-</span><span class=\"s\">1</span><span class=\"k\">,</span> m<span class=\"k\">[</span><span class=\"s\">3</span><span class=\"k\">]);</span>","            d<span class=\"k\">.</span>setUTCHours<span class=\"k\">(</span>m<span class=\"k\">[</span><span class=\"s\">4</span><span class=\"k\">],</span> m<span class=\"k\">[</span><span class=\"s\">5</span><span class=\"k\">],</span> m<span class=\"k\">[</span><span class=\"s\">6</span><span class=\"k\">],</span> <span class=\"k\">(</span>m<span class=\"k\">[</span><span class=\"s\">7</span><span class=\"k\">]</span> <span class=\"k\">||</span> <span class=\"s\">0</span><span class=\"k\">));</span>","            <span class=\"k\">return</span> d<span class=\"k\">;</span>","        <span class=\"k\">}</span>","        <span class=\"k\">return</span> str<span class=\"k\">;</span>","    <span class=\"k\">}</span>","<span class=\"k\">}</span><span class=\"k\">;</span>","","<span class=\"c\">/**</span>","<span class=\"c\"> * &lt;p&gt;Four step determination whether a string is safe to eval. In three steps,</span>","<span class=\"c\"> * escape sequences, safe values, and properly placed open square brackets</span>","<span class=\"c\"> * are replaced with placeholders or removed.  Then in the final step, the</span>","<span class=\"c\"> * result of all these replacements is checked for invalid characters.&lt;/p&gt;</span>","<span class=\"c\"> *</span>","<span class=\"c\"> * &lt;p&gt;This is an alias for isSafe.&lt;/p&gt;</span>","<span class=\"c\"> *</span>","<span class=\"c\"> * @method isValid</span>","<span class=\"c\"> * @param str {String} JSON string to be tested</span>","<span class=\"c\"> * @return {boolean} is the string safe for eval?</span>","<span class=\"c\"> * @static</span>","<span class=\"c\"> * @deprecated use isSafe</span>","<span class=\"c\"> */</span>","YAHOO<span class=\"k\">.</span>lang<span class=\"k\">.</span>JSON<span class=\"k\">.</span>isValid <span class=\"k\">=</span> YAHOO<span class=\"k\">.</span>lang<span class=\"k\">.</span>JSON<span class=\"k\">.</span>isSafe<span class=\"k\">;</span>","","<span class=\"k\">}</span><span class=\"k\">)();</span>","YAHOO<span class=\"k\">.</span>register<span class=\"k\">(</span><span class=\"s\">\"json\"</span><span class=\"k\">,</span> YAHOO<span class=\"k\">.</span>lang<span class=\"k\">.</span>JSON<span class=\"k\">,</span> <span class=\"k\">{</span>version<span class=\"k\">:</span> <span class=\"s\">\"2.8.0r4\"</span><span class=\"k\">,</span> build<span class=\"k\">:</span> <span class=\"s\">\"2449\"</span><span class=\"k\">}</span><span class=\"k\">);</span>"];
_$jscoverage['build/json/json.js'][15]++;
(function () {
  _$jscoverage['build/json/json.js'][17]++;
  var l = YAHOO.lang, isFunction = l.isFunction, isObject = l.isObject, isArray = l.isArray, _toStr = Object.prototype.toString, Native = (YAHOO.env.ua.caja? window: this).JSON, _UNICODE_EXCEPTIONS = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, _ESCAPES = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, _VALUES = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, _BRACKETS = /(?:^|:|,)(?:\s*\[)+/g, _UNSAFE = /^[\],:{}\s]*$/, _SPECIAL_CHARS = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, _CHARS = {"\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", "\"": "\\\"", "\\": "\\\\"}, UNDEFINED = "undefined", OBJECT = "object", NULL = "null", STRING = "string", NUMBER = "number", BOOLEAN = "boolean", DATE = "date", _allowable = {"undefined": UNDEFINED, "string": STRING, "[object String]": STRING, "number": NUMBER, "[object Number]": NUMBER, "boolean": BOOLEAN, "[object Boolean]": BOOLEAN, "[object Date]": DATE, "[object RegExp]": OBJECT}, EMPTY = "", OPEN_O = "{", CLOSE_O = "}", OPEN_A = "[", CLOSE_A = "]", COMMA = ",", COMMA_CR = ",\n", CR = "\n", COLON = ":", COLON_SP = ": ", QUOTE = "\"";
  _$jscoverage['build/json/json.js'][149]++;
  Native = ((_toStr.call(Native) === "[object JSON]") && Native);
  _$jscoverage['build/json/json.js'][152]++;
  function _char(c) {
    _$jscoverage['build/json/json.js'][153]++;
    if ((! _CHARS[c])) {
      _$jscoverage['build/json/json.js'][154]++;
      _CHARS[c] = ("\\u" + ("0000" + (+ c.charCodeAt(0)).toString(16)).slice(-4));
    }
    _$jscoverage['build/json/json.js'][156]++;
    return _CHARS[c];
}
  _$jscoverage['build/json/json.js'][174]++;
  function _revive(data, reviver) {
    _$jscoverage['build/json/json.js'][175]++;
    var walk = (function (o, key) {
  _$jscoverage['build/json/json.js'][176]++;
  var k, v, value = o[key];
  _$jscoverage['build/json/json.js'][177]++;
  if ((value && ((typeof value) === "object"))) {
    _$jscoverage['build/json/json.js'][178]++;
    for (k in value) {
      _$jscoverage['build/json/json.js'][179]++;
      if (l.hasOwnProperty(value, k)) {
        _$jscoverage['build/json/json.js'][180]++;
        v = walk(value, k);
        _$jscoverage['build/json/json.js'][181]++;
        if ((v === undefined)) {
          _$jscoverage['build/json/json.js'][182]++;
          (delete value[k]);
        }
        else {
          _$jscoverage['build/json/json.js'][184]++;
          value[k] = v;
        }
      }
}
  }
  _$jscoverage['build/json/json.js'][189]++;
  return reviver.call(o, key, value);
});
    _$jscoverage['build/json/json.js'][192]++;
    return (((typeof reviver) === "function")? walk({"": data}, ""): data);
}
  _$jscoverage['build/json/json.js'][204]++;
  function _prepare(s) {
    _$jscoverage['build/json/json.js'][205]++;
    return s.replace(_UNICODE_EXCEPTIONS, _char);
}
  _$jscoverage['build/json/json.js'][208]++;
  function _isSafe(str) {
    _$jscoverage['build/json/json.js'][209]++;
    return (l.isString(str) && _UNSAFE.test(str.replace(_ESCAPES, "@").replace(_VALUES, "]").replace(_BRACKETS, "")));
}
  _$jscoverage['build/json/json.js'][215]++;
  function _parse(s, reviver) {
    _$jscoverage['build/json/json.js'][217]++;
    s = _prepare(s);
    _$jscoverage['build/json/json.js'][220]++;
    if (_isSafe(s)) {
      _$jscoverage['build/json/json.js'][223]++;
      return _revive(eval(("(" + s + ")")), reviver);
    }
    _$jscoverage['build/json/json.js'][227]++;
    throw new SyntaxError("JSON.parse");
}
  _$jscoverage['build/json/json.js'][235]++;
  function _type(o) {
    _$jscoverage['build/json/json.js'][236]++;
    var t = (typeof o);
    _$jscoverage['build/json/json.js'][237]++;
    return (_allowable[t] || _allowable[_toStr.call(o)] || ((t === OBJECT)? (o? OBJECT: NULL): UNDEFINED));
}
  _$jscoverage['build/json/json.js'][245]++;
  function _string(s) {
    _$jscoverage['build/json/json.js'][246]++;
    return (QUOTE + s.replace(_SPECIAL_CHARS, _char) + QUOTE);
}
  _$jscoverage['build/json/json.js'][250]++;
  function _indent(s, space) {
    _$jscoverage['build/json/json.js'][251]++;
    return s.replace(/^/gm, space);
}
  _$jscoverage['build/json/json.js'][255]++;
  function _stringify(o, w, space) {
    _$jscoverage['build/json/json.js'][256]++;
    if ((o === undefined)) {
      _$jscoverage['build/json/json.js'][257]++;
      return undefined;
    }
    _$jscoverage['build/json/json.js'][260]++;
    var replacer = (isFunction(w)? w: null), format = (_toStr.call(space).match(/String|Number/) || []), _date = YAHOO.lang.JSON.dateToString, stack = [], tmp, i, len;
    _$jscoverage['build/json/json.js'][266]++;
    if ((replacer || (! isArray(w)))) {
      _$jscoverage['build/json/json.js'][267]++;
      w = undefined;
    }
    _$jscoverage['build/json/json.js'][271]++;
    if (w) {
      _$jscoverage['build/json/json.js'][272]++;
      tmp = {};
      _$jscoverage['build/json/json.js'][273]++;
      for (((i = 0), (len = w.length)); (i < len); (++i)) {
        _$jscoverage['build/json/json.js'][274]++;
        tmp[w[i]] = true;
}
      _$jscoverage['build/json/json.js'][276]++;
      w = tmp;
    }
    _$jscoverage['build/json/json.js'][281]++;
    space = ((format[0] === "Number")? new Array((Math.min(Math.max(0, space), 10) + 1)).join(" "): (space || EMPTY).slice(0, 10));
    _$jscoverage['build/json/json.js'][285]++;
    function _serialize(h, key) {
      _$jscoverage['build/json/json.js'][286]++;
      var value = h[key], t = _type(value), a = [], colon = (space? COLON_SP: COLON), arr, i, keys, k, v;
      _$jscoverage['build/json/json.js'][296]++;
      if ((isObject(value) && isFunction(value.toJSON))) {
        _$jscoverage['build/json/json.js'][297]++;
        value = value.toJSON(key);
      }
      else {
        _$jscoverage['build/json/json.js'][298]++;
        if ((t === DATE)) {
          _$jscoverage['build/json/json.js'][299]++;
          value = _date(value);
        }
      }
      _$jscoverage['build/json/json.js'][302]++;
      if (isFunction(replacer)) {
        _$jscoverage['build/json/json.js'][303]++;
        value = replacer.call(h, key, value);
      }
      _$jscoverage['build/json/json.js'][306]++;
      if ((value !== h[key])) {
        _$jscoverage['build/json/json.js'][307]++;
        t = _type(value);
      }
      _$jscoverage['build/json/json.js'][310]++;
      switch (t) {
      case DATE:
      case OBJECT:
        _$jscoverage['build/json/json.js'][314]++;
        break;
      case STRING:
        _$jscoverage['build/json/json.js'][315]++;
        return _string(value);
      case NUMBER:
        _$jscoverage['build/json/json.js'][316]++;
        return (isFinite(value)? (value + EMPTY): NULL);
      case BOOLEAN:
        _$jscoverage['build/json/json.js'][317]++;
        return (value + EMPTY);
      case NULL:
        _$jscoverage['build/json/json.js'][318]++;
        return NULL;
      default:
        _$jscoverage['build/json/json.js'][319]++;
        return undefined;
      }
      _$jscoverage['build/json/json.js'][323]++;
      for (i = (stack.length - 1); (i >= 0); (--i)) {
        _$jscoverage['build/json/json.js'][324]++;
        if ((stack[i] === value)) {
          _$jscoverage['build/json/json.js'][325]++;
          throw new Error("JSON.stringify. Cyclical reference");
        }
}
      _$jscoverage['build/json/json.js'][329]++;
      arr = isArray(value);
      _$jscoverage['build/json/json.js'][332]++;
      stack.push(value);
      _$jscoverage['build/json/json.js'][334]++;
      if (arr) {
        _$jscoverage['build/json/json.js'][335]++;
        for (i = (value.length - 1); (i >= 0); (--i)) {
          _$jscoverage['build/json/json.js'][336]++;
          a[i] = (_serialize(value, i) || NULL);
}
      }
      else {
        _$jscoverage['build/json/json.js'][340]++;
        keys = (w || value);
        _$jscoverage['build/json/json.js'][341]++;
        i = 0;
        _$jscoverage['build/json/json.js'][343]++;
        for (k in keys) {
          _$jscoverage['build/json/json.js'][344]++;
          if (keys.hasOwnProperty(k)) {
            _$jscoverage['build/json/json.js'][345]++;
            v = _serialize(value, k);
            _$jscoverage['build/json/json.js'][346]++;
            if (v) {
              _$jscoverage['build/json/json.js'][347]++;
              a[(i++)] = (_string(k) + colon + v);
            }
          }
}
      }
      _$jscoverage['build/json/json.js'][354]++;
      stack.pop();
      _$jscoverage['build/json/json.js'][356]++;
      if ((space && a.length)) {
        _$jscoverage['build/json/json.js'][357]++;
        return (arr? (OPEN_A + CR + _indent(a.join(COMMA_CR), space) + CR + CLOSE_A): (OPEN_O + CR + _indent(a.join(COMMA_CR), space) + CR + CLOSE_O));
      }
      else {
        _$jscoverage['build/json/json.js'][361]++;
        return (arr? (OPEN_A + a.join(COMMA) + CLOSE_A): (OPEN_O + a.join(COMMA) + CLOSE_O));
      }
}
    _$jscoverage['build/json/json.js'][368]++;
    return _serialize({"": o}, "");
}
  _$jscoverage['build/json/json.js'][373]++;
  YAHOO.lang.JSON = {useNativeParse: (! (! Native)), useNativeStringify: (! (! Native)), isSafe: (function (s) {
  _$jscoverage['build/json/json.js'][412]++;
  return _isSafe(_prepare(s));
}), parse: (function (s, reviver) {
  _$jscoverage['build/json/json.js'][433]++;
  return ((Native && YAHOO.lang.JSON.useNativeParse)? Native.parse(s, reviver): _parse(s, reviver));
}), stringify: (function (o, w, space) {
  _$jscoverage['build/json/json.js'][470]++;
  return ((Native && YAHOO.lang.JSON.useNativeStringify)? Native.stringify(o, w, space): _stringify(o, w, space));
}), dateToString: (function (d) {
  _$jscoverage['build/json/json.js'][488]++;
  function _zeroPad(v) {
    _$jscoverage['build/json/json.js'][489]++;
    return ((v < 10)? ("0" + v): v);
}
  _$jscoverage['build/json/json.js'][492]++;
  return (d.getUTCFullYear() + "-" + _zeroPad((d.getUTCMonth() + 1)) + "-" + _zeroPad(d.getUTCDate()) + "T" + _zeroPad(d.getUTCHours()) + COLON + _zeroPad(d.getUTCMinutes()) + COLON + _zeroPad(d.getUTCSeconds()) + "Z");
}), stringToDate: (function (str) {
  _$jscoverage['build/json/json.js'][510]++;
  var m = str.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{3}))?Z$/);
  _$jscoverage['build/json/json.js'][511]++;
  if (m) {
    _$jscoverage['build/json/json.js'][512]++;
    var d = new Date();
    _$jscoverage['build/json/json.js'][513]++;
    d.setUTCFullYear(m[1], (m[2] - 1), m[3]);
    _$jscoverage['build/json/json.js'][514]++;
    d.setUTCHours(m[4], m[5], m[6], (m[7] || 0));
    _$jscoverage['build/json/json.js'][515]++;
    return d;
  }
  _$jscoverage['build/json/json.js'][517]++;
  return str;
})};
  _$jscoverage['build/json/json.js'][535]++;
  YAHOO.lang.JSON.isValid = YAHOO.lang.JSON.isSafe;
})();
_$jscoverage['build/json/json.js'][538]++;
YAHOO.register("json", YAHOO.lang.JSON, {version: "2.8.0r4", build: "2449"});

